【问题标题】:bash script for AWS assume-roleAWS 假设角色的 bash 脚本
【发布时间】:2021-04-29 00:28:36
【问题描述】:

我试图在 CI/CD 管道中担任 AWS 角色,因此我必须编写一个脚本来通过脚本更改角色。下面是执行此操作的脚本,我使用 source <script>.sh 替换现有的 AWS 访问密钥和密钥,并添加会话密钥。

我通过在终端中回显它们来检查 3 个环境变量是否存在。

#!/bin/bash

output="/tmp/assume-role-output.json"

aws sts assume-role --role-arn "arn:aws:iam::<account-id>:role/<rolename>" --role-session-name AWSCLI-Session > $output
AccessKeyId=$(cat $output | jq '.Credentials''.AccessKeyId')
SecretAccessKey=$(cat $output | jq '.Credentials''.SecretAccessKey')
SessionToken=$(cat $output | jq '.Credentials''.SessionToken')

export AWS_ACCESS_KEY_ID=$AccessKeyId
export AWS_SECRET_ACCESS_KEY=$SecretAccessKey
export AWS_SESSION_TOKEN=$SessionToken

但是,当我尝试运行一个简单的 aws 命令来列出 ECR 图像 aws ecr list-images --registry-id &lt;id&gt; --repository-name &lt;name&gt; 时,它给出了以下错误消息。

An error occurred (UnrecognizedClientException) when calling the ListImages operation: 
The security token included in the request is invalid.

我尝试在终端中手动设置 AWS 密钥和令牌,令人惊讶的是 ecr list 命令有效。

export AWS_ACCESS_KEY_ID="XXX"
export AWS_SECRET_ACCESS_KEY="XXX"
export AWS_SESSION_TOKEN="XXX"

有人知道我的脚本有什么问题吗?

【问题讨论】:

  • 当您获取脚本时,检查导出的 ENV 变量以查看它们是否与手动输入的内容匹配。

标签: amazon-web-services amazon-ecr assume-role


【解决方案1】:

如果您按照您的方式使用jq,您的导出值将包含引号,例如

"ASIASZHPM3IXQXXOXFOY"

然后:

ASIASZHPM3IXQXXOXFOY

为避免这种情况,您必须将-r 标志添加到jq

AccessKeyId=$(cat $output | jq -r '.Credentials''.AccessKeyId')
SecretAccessKey=$(cat $output | jq -r '.Credentials''.SecretAccessKey')
SessionToken=$(cat $output | jq -r '.Credentials''.SessionToken')

【讨论】:

    【解决方案2】:

    这是一个不使用文件的单行..

    OUT=$(aws sts assume-role --role-arn arn:aws:iam::<YOUR_ACCOUNT>:role/<YOUR_ROLENAME> --role-session-name aaa);\
    export AWS_ACCESS_KEY_ID=$(echo $OUT | jq -r '.Credentials''.AccessKeyId');\
    export AWS_SECRET_ACCESS_KEY=$(echo $OUT | jq -r '.Credentials''.SecretAccessKey');\
    export AWS_SESSION_TOKEN=$(echo $OUT | jq -r '.Credentials''.SessionToken');
    

    可能有用..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-30
      • 2020-02-23
      • 2020-10-23
      • 2018-11-18
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 2018-12-23
      相关资源
      最近更新 更多