Amazon web services AWS角色的bash脚本

Amazon web services AWS角色的bash脚本,amazon-web-services,amazon-ecr,assume-role,Amazon Web Services,Amazon Ecr,Assume Role,我试图在CI/CD管道中扮演AWS角色,因此我必须编写一个脚本来通过脚本更改角色。下面是实现这一点的脚本,我使用source.sh替换现有的AWS访问和密钥,并添加会话密钥 我通过在终端中回显3个env变量来检查它们是否存在 #!/bin/bash output="/tmp/assume-role-output.json" aws sts assume-role --role-arn "arn:aws:iam::<account-id>:role/&

我试图在CI/CD管道中扮演AWS角色,因此我必须编写一个脚本来通过脚本更改角色。下面是实现这一点的脚本,我使用
source.sh
替换现有的AWS访问和密钥,并添加会话密钥

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

#!/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 list命令可以正常工作

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

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

如果您使用
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')

编写脚本源代码时,请检查导出的环境变量,以查看它们是否与手动条目匹配。
AccessKeyId=$(cat $output | jq -r '.Credentials''.AccessKeyId')
SecretAccessKey=$(cat $output | jq -r '.Credentials''.SecretAccessKey')
SessionToken=$(cat $output | jq -r '.Credentials''.SessionToken')