首页 > 解决方案 > AWS sts 在一个命令中扮演角色

问题描述

要在 CLI 中担任 AWS 角色,我执行以下命令:

aws sts assume-role --role-arn arn:aws:iam::123456789123:role/myAwesomeRole --role-session-name test --region eu-central-1

这给了我一个遵循模式的输出:

{
    "Credentials": {
        "AccessKeyId": "someAccessKeyId",
        "SecretAccessKey": "someSecretAccessKey",
        "SessionToken": "someSessionToken",
        "Expiration": "2020-08-04T06:52:13+00:00"
    },
    "AssumedRoleUser": {
        "AssumedRoleId": "idOfTheAssummedRole",
        "Arn": "theARNOfTheRoleIWantToAssume"
    }
}

然后我手动复制并粘贴 , 的值AccessKeyIdSecretAccessKeySessionToken在一堆这样的导出中:

export AWS_ACCESS_KEY_ID="someAccessKeyId"                                                                                      
export AWS_SECRET_ACCESS_KEY="someSecretAccessKey"
export AWS_SESSION_TOKEN="someSessionToken"

终于承担起这个角色。

我怎样才能一口气做到这一点?aws sts ...我的意思是,无需手动干预将命令的输出复制和粘贴到exports.

标签: amazon-web-servicesaws-cliaws-sts

解决方案


jq,不eval,没有多个导出 - 使用printf内置(即没有凭据泄漏/proc)和命令替换:

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))

推荐阅读