
오래된 액세스 키를 지정된 일수보다 오래된 경우 비활성화하는 작은 람다 스크립트입니다.

AWS 키 비활성화기는 설정된 시간 이후에 AWS IAM 사용자 액세스 키를 비활성화하는 Lambda 함수로, 오래된 액세스 키와 관련된 위험을 줄이기 위한 것입니다.



/grunt/package.json의 report_to 속성을 참조하세요.이 스크립트를 실행하려면 다음 구성 요소가 필요합니다.
또한 SES가 활성화된 AWS 계정(도메인 인증 및 샌드박스 모드 해제)이 있다고 가정합니다.
이 지침은 OSX용입니다. Windows 및 다른 *nix에서는 결과가 다를 수 있습니다.
/grunt 폴더로 이동합니다.npm install/grunt/package.json에 다음 정보를 입력합니다.
aws_account_number 값을 https://portal.aws.amazon.com/gp/aws/manageYourAccount에서 찾은 AWS 계정 ID로 설정합니다.first_warning과 last_warning을 경고를 트리거할 키 사용 기간(일)으로 설정합니다. 이 제한은 report_to로 이메일 전송을 트리거합니다.expiry를 키가 만료되는 사용 기간(일)으로 설정합니다. 이 기간이 되면 키가 비활성화되고 이 변경 사항을 알리는 이메일이 report_to로 전송됩니다.serviceaccount를 스크립트가 무시하려는 계정 사용자 이름으로 설정합니다.exclusiongroup을 스크립트가 무시하려는 사용자에게 할당된 그룹의 이름으로 설정합니다.send_completion_report 값을 로 설정하여 SES를 통한 이메일 전송을 활성화합니다.이름이 AccessKeyRotation인 Lambda 함수를 실행하고 스캔 출력을 scan.report.log 파일에 기록합니다:
aws lambda invoke --function-name AccessKeyRotation scan.report.log --region us-east-1
{
"StatusCode": 200
}
jq를 사용하여 scan.report.log의 내용을 콘솔에 표시합니다:
jq '.' scan.report.log
{
"reportdate": "2016-06-26 10:37:24.071091",
"users": [
{
"username": "TestS3User",
"userid": "1",
"keys": [
{
"age": 72,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************Q3GA1"
},
{
"age": 12,
"changed": false,
"state": "key is still young",
"accesskeyid": "**************F3AA2"
}
]
},
{
"username": "BlahUser22",
"userid": "2",
"keys": []
},
{
"username": "LambdaFake1",
"userid": "3",
"keys": [
{
"age": 23,
"changed": false,
"state": "key is due to expire in 1 week (7 days)",
"accesskeyid": "**************DFG12"
},
{
"age": 296,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************4ZASD"
}
]
},
{
"username": "apiuser49",
"userid": "4",
"keys": [
{
"age": 30,
"changed": true,
"state": "key is now EXPIRED! Changing key to INACTIVE state",
"accesskeyid": "**************ER2E2"
},
{
"age": 107,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************AWQ4K"
}
]
},
{
"username": "UserEMRKinesis",
"userid": "5",
"keys": [
{
"age": 30,
"changed": false,
"state": "key is now EXPIRED! Changing key to INACTIVE state",
"accesskeyid": "**************MGB41A"
}
]
},
{
"username": "CDN-Drupal",
"userid": "6",
"keys": [
{
"age": 10,
"changed": false,
"state": "key is still young",
"accesskeyid": "**************ZDSQ5A"
},
{
"age": 5,
"changed": false,
"state": "key is still young",
"accesskeyid": "**************E3ODA"
}
]
},
{
"username": "ChocDonutUser1",
"userid": "7",
"keys": [
{
"age": 59,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************CSA123"
}
]
},
{
"username": "ChocDonut2",
"userid": "8",
"keys": [
{
"age": 60,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************FDGD2"
}
]
},
{
"username": "[email protected]",
"userid": "9",
"keys": [
{
"age": 45,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************BLQ5GJ"
},
{
"age": 71,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************GJFF53"
}
]
}
]
}
key_disabler.keystates.<state>.message 아래의 값을 변경하여 각 경고 및 최종 비활성화에 사용되는 메시지를 설정할 수 있습니다.key_disabler.mask_accesskey_length 아래에서 마스킹 길이를 변경할 수 있습니다. 액세스 키는 20자입니다.이 스크립트는 있는 그대로 제공됩니다. 시간이 허락하는 한 질문에 답변해 드리지만 어떤 약속도 할 수 없습니다.
작동하지 않는 경우 다음을 확인하세요:
Lambda 함수가 성공적으로 배포되면 다음 명령을 수행할 수 있습니다:
aws lambda list-functionsopenssl dgst -binary -sha256 ..\Releases\AccessKeyRotationPackage.1.0.18.zip | openssl base64aws lambda invoke --function-name AccessKeyRotation report.log --region us-east-1jq '.' report.logjq '.users[] | select(.username=="johndoe")' report.logjq '.' report.log | grep age | cut -d':' -f2 | sort -njq 'def maximal_by(f): (map(f) | max) as $mx | .[] | select(f == $mx); .users | maximal_by(.keys[].age)' report.logjq 'def minimal_by(f): (map(f) | min) as $mn | .[] | select(f == $mn); .users | minimal_by(.keys[].age)' report.logTruereport_to 값을 삭제 보고서를 수신할 이메일 주소로 설정합니다.report_from 값을 삭제 보고서의 발신자 주소로 사용할 이메일 주소로 설정합니다. 이 도메인은 AWS SES에서 인증되어야 합니다.deployment_region을 Lambda를 지원하는 리전으로 설정합니다.email_region을 SES를 지원하는 리전으로 설정합니다. 또한 해당 리전에서 SES 샌드박스 모드가 비활성화되어 있는지 확인하세요.
aws iam get-user를 실행하여 연결 확인/grunt 디렉터리에서 grunt bumpup && grunt deployLambda를 실행하여 버전 번호를 올리고 Lambda 함수를 선택한 리전에 빌드/배포합니다.