
AWS 密钥禁用器是一个 Lambda 函数,用于在设定时间后禁用 AWS IAM 用户访问密钥,以减少旧访问密钥带来的风险。



/grunt/package.json 构建配置文件中的 report_to 属性。该脚本运行需要以下组件。
同时假设您拥有启用了 SES 的 AWS 账户,即域名已验证且已解除沙箱模式。
以下说明适用于 OSX。在 Windows 和其他类 Unix 系统上可能有所不同。
/grunt 文件夹npm install/grunt/package.json 中填写以下信息
aws_account_number 设置为您的 AWS 账户 ID,可在 https://portal.aws.amazon.com/gp/aws/manageYourAccount 找到first_warning 和 last_warning 设置为触发警告的密钥天数。这些限制会触发向 report_to 发送电子邮件expiry 设置为密钥过期的天数。在此天数时,密钥将被禁用,并会触发向 report_to 发送通知更改的电子邮件serviceaccount 设置为您希望脚本忽略的账户用户名exclusiongroup 设置为分配给您希望脚本忽略的用户的组名称send_completion_report 设置为 True 以通过 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.logreport_to 设置为您希望接收删除报告的电子邮件地址report_from 设置为您希望用作删除报告发件人地址的电子邮件地址。请注意,该域名需要在 AWS SES 中验证deployment_region 设置为支持 Lambda 的区域email_region 设置为支持 SES 的区域。同时确保该区域的 SES 沙箱模式已禁用
aws iam get-user 验证连接是否成功/grunt 目录下运行 grunt bumpup && grunt deployLambda 以升级版本号并执行 Lambda 函数的构建/部署到所选区域