首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AWS assume role的bash脚本

AWS assume role的bash脚本
EN

Stack Overflow用户
提问于 2021-01-25 15:45:14
回答 2查看 2K关注 0票数 4

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

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

代码语言:javascript
复制
#!/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 <id> --repository-name <name>时,它给出了以下错误消息。

代码语言:javascript
复制
An error occurred (UnrecognizedClientException) when calling the ListImages operation: 
The security token included in the request is invalid.

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

代码语言:javascript
复制
export AWS_ACCESS_KEY_ID="XXX"
export AWS_SECRET_ACCESS_KEY="XXX"
export AWS_SESSION_TOKEN="XXX"

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-25 15:52:57

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

代码语言:javascript
复制
"ASIASZHPM3IXQXXOXFOY"

而不是:

代码语言:javascript
复制
ASIASZHPM3IXQXXOXFOY

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

代码语言:javascript
复制
AccessKeyId=$(cat $output | jq -r '.Credentials''.AccessKeyId')
SecretAccessKey=$(cat $output | jq -r '.Credentials''.SecretAccessKey')
SessionToken=$(cat $output | jq -r '.Credentials''.SessionToken')
票数 6
EN

Stack Overflow用户

发布于 2021-10-10 09:12:37

这是一个不使用文件的一行程序。

代码语言:javascript
复制
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');

也许有用..。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65880727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档