我有几个调用 AWS CLI 命令的 Bash 脚本,这些脚本的权限已更改为需要 MFA,我希望能够在这些脚本中提示输入由我的 MFA 设备生成的代码,以便它们可以在必要的身份验证下运行.
但是似乎没有简单的内置方法可以做到这一点。我能找到的唯一文档涉及使用 aws sts get-session-token
的复杂过程。然后将每个值保存在配置中,然后不清楚如何使用。
要清楚我想要的是,当我运行一个包含需要 MFA 的 AWS CLI 命令的脚本时,我只是提示输入代码,以便提供它允许 AWS CLI 操作完成.像这样的东西:
#!/usr/bin/env bash
# (1) prompt for generated MFA code
# ???
# (2) use entered code to generate necessary credentials
aws sts get-session-token ... --token-code $ENTERED_VALUE
# (3) perform my AWS CLI commands requiring MFA
# ....
我不清楚如何在需要时提示它(这可能归结为不精通 bash)或如何使用 get-session-token
的输出.
有什么方法可以满足我的要求吗?
我已经 tried to trigger a prompt通过指定带有 mfa_serial
条目的 --profile
;但这也不起作用。
最佳答案
好的,在与同事一起花更多时间研究这个脚本之后 - 我们已经想出了一个更简单的脚本。这会为您完成所有凭证文件,并且更容易阅读。它还允许您所有环境的新 token 都在同一个 creds 文件中。获取 MFA 的初始调用需要凭证文件中的默认帐户 key - 然后它会生成您的 MFA token 并将它们放回凭证文件中。
#!/usr/bin/env bash
function usage {
echo "Example: ${0} dev 123456 "
exit 2
}
if [ $# -lt 2 ]
then
usage
fi
MFA_SERIAL_NUMBER=$(aws iam list-mfa-devices --profile bh${1} --query 'MFADevices[].SerialNumber' --output text)
function set-keys {
aws configure set aws_access_key_id ${2} --profile=${1}
aws configure set aws_secret_access_key ${3} --profile=${1}
aws configure set aws_session_token ${4} --profile=${1}
}
case ${1} in
dev|qa|prod) set-keys ${1} $(aws sts get-session-token --profile bh${1} --serial-number ${MFA_SERIAL_NUMBER} --query 'Credentials.[AccessKeyId,SecretAccessKey,SessionToken]' --output text --token-code ${2});;
*) usage ;;
esac
关于bash - 如何提示输入 MFA key 以生成和使用 AWS CLI 访问凭证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43051993/