Arc*_*nes 15 amazon-web-services aws-cli aws-sts
要在 CLI 中担任 AWS 角色,我执行以下命令:
aws sts assume-role --role-arn arn:aws:iam::123456789123:role/myAwesomeRole --role-session-name test --region eu-central-1
Run Code Online (Sandbox Code Playgroud)
这给了我一个遵循架构的输出:
{
"Credentials": {
"AccessKeyId": "someAccessKeyId",
"SecretAccessKey": "someSecretAccessKey",
"SessionToken": "someSessionToken",
"Expiration": "2020-08-04T06:52:13+00:00"
},
"AssumedRoleUser": {
"AssumedRoleId": "idOfTheAssummedRole",
"Arn": "theARNOfTheRoleIWantToAssume"
}
}
Run Code Online (Sandbox Code Playgroud)
然后我手动复制和粘贴 , 的值AccessKeyId,SecretAccessKey并SessionToken在像这样的一堆导出中:
export AWS_ACCESS_KEY_ID="someAccessKeyId"
export AWS_SECRET_ACCESS_KEY="someSecretAccessKey"
export AWS_SESSION_TOKEN="someSessionToken"
Run Code Online (Sandbox Code Playgroud)
最终承担起这个角色。
我怎么能一次性做到这一点?我的意思是,无需手动干预将aws sts ...命令的输出复制和粘贴到exports.
Arc*_*nes 24
最后,一位同事与我分享了这个很棒的片段,可以一次性完成工作:
eval $(aws sts assume-role --role-arn arn:aws:iam::123456789123:role/myAwesomeRole --role-session-name test | jq -r '.Credentials | "export AWS_ACCESS_KEY_ID=\(.AccessKeyId)\nexport AWS_SECRET_ACCESS_KEY=\(.SecretAccessKey)\nexport AWS_SESSION_TOKEN=\(.SessionToken)\n"')
Run Code Online (Sandbox Code Playgroud)
除了 AWS CLI,它只需要jq通常安装在任何 Linux 桌面中的那个。
Gre*_*low 14
Arcones 的答案很好,但这是一种不需要 jq 的方法:
eval $(aws sts assume-role \
--role-arn arn:aws:iam::012345678901:role/TrustedThirdParty \
--role-session-name=test \
--query 'join(``, [`export `, `AWS_ACCESS_KEY_ID=`,
Credentials.AccessKeyId, ` ; export `, `AWS_SECRET_ACCESS_KEY=`,
Credentials.SecretAccessKey, `; export `, `AWS_SESSION_TOKEN=`,
Credentials.SessionToken])' \
--output text)
Run Code Online (Sandbox Code Playgroud)
您可以将 IAM 角色作为配置文件存储在 AWS CLI 中,它会自动为您代入该角色。
以下是在 AWS CLI - AWS 命令行界面中使用 IAM 角色的示例:
[profile marketingadmin]
role_arn = arn:aws:iam::123456789012:role/marketingadminrole
source_profile = user1
Run Code Online (Sandbox Code Playgroud)
这是在说:
--profile marketingadminuser1AssumeRole指定角色这意味着您可以简单地调用这样的命令,它将承担该角色并自动使用返回的凭据:
aws s3 ls --profile marketingadmin
Run Code Online (Sandbox Code Playgroud)
不jq,不eval,没有多个导出 - 使用printf内置和命令替换:
export $(printf "AWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s AWS_SESSION_TOKEN=%s" \
$(aws sts assume-role \
--role-arn arn:aws:iam::123456789012:role/MyAssumedRole \
--role-session-name MySessionName \
--query "Credentials.[AccessKeyId,SecretAccessKey,SessionToken]" \
--output text))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7304 次 |
| 最近记录: |