【发布时间】:2019-09-24 14:07:49
【问题描述】:
我正在尝试寻找一种解决方案,以便在所有 AWS IAM 用户的密码和访问密钥过期时通知他们。有没有办法通过控制台或一些 Python 脚本来做到这一点?
IAM 用户应至少在其 IAM 密码和访问密钥到期前一周收到一封邮件。
【问题讨论】:
标签: python amazon-web-services passwords amazon-iam
我正在尝试寻找一种解决方案,以便在所有 AWS IAM 用户的密码和访问密钥过期时通知他们。有没有办法通过控制台或一些 Python 脚本来做到这一点?
IAM 用户应至少在其 IAM 密码和访问密钥到期前一周收到一封邮件。
【问题讨论】:
标签: python amazon-web-services passwords amazon-iam
编写一个定期运行的脚本(例如,您可以使用计划的 Lambda 执行此操作)。
致电 get_credential_report 了解 IAM 密码将在多长时间内过期,并致电 list_access_keys 了解创建访问密钥的时间(从而计算何时需要轮换)。
注意:AWS 管理控制台会在 IAM 用户在密码到期后 15 天内发出警告。
【讨论】:
对于密码,您可以使用GetCredentialReport API 调用。在那里你会找到password_next_rotation:
当帐户具有要求密码轮换的密码策略时,此字段包含日期和时间,采用 ISO 8601 日期时间格式,当用户需要设置新密码时。 AWS 账户 (root) 的值始终为 not_supported。
使用这些信息,您可以编写一个脚本来发送这些电子邮件(假设您在 IAM 中使用他们的电子邮件地址标记了您的用户)
在boto3:get_credential_report() 中可用。
请注意,访问密钥不会过期。
【讨论】:
这是我对一个简单的 bash 脚本的贡献,它可以帮助更轻松地实现这一目标
#!/usr/bin/env bash
# VERSION 1.0.0
export REPORT=$(aws iam get-credential-report --query "Content" --output text | base64 -d)
export USERS=($(echo $REPORT | awk -F "\"*,\"*" 'NR>2 {print $1"|"$7}'))
for user in $USERS;
do
export USER=$(echo $user | awk -F '[|]' '{print $1}')
export EXPIRATION_DATE=$(echo $user | awk -F '[|]' '{print $2}')
if [[ "$EXPIRATION_DATE" != "N/A" ]] && [ "$EXPIRATION_DATE" != "not_supported" ]; then
echo "Checking user $USER with expiration date -$EXPIRATION_DATE-"
let REM_DAYS=\($(date +%s -d $EXPIRATION_DATE)-$(date +%s)\)/86400
echo $REM_DAYS
fi
done
这是我的链接,如果我发现一些错误/改进,我将发布更新版本https://gist.github.com/andresjz/048891dc6e92c19bc3346c00513232f3#file-get_accounts_expirations-sh-L5
【讨论】: