以下是aws官网上给出的IAM role的主要使用场景:
如何使用在aws client 去assume 一个IAM role(macOS)
前提条件:AWS上建好IAM 并且本地aws client对应的用户要有assume的权限。这个不细说,非本文主要内容。
1. 在aws client端执行assume role命令
aws sts assume-role –role-arn arn:aws:iam::28441135585:role/role-name –role-session-name “AnySessionName”
2. 把上面返回信息设置为环境变量,让当前aws iam user具有role权限
export AWS_ACCESS_KEY_ID=*
export AWS_SECRET_ACCESS_KEY=*
export AWS_SESSION_TOKEN=*
3. 验证是否assume成功
aws sts get-caller-identity
在assume前这个命令的输出应该是:
assume role之后这个命令的输出应该是:
4. 做任何该role具有权限的事情
5. unassume role
unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN
6. 执行export命令。从终端输出中查看,以上环境变量是否已经被删除
export
以上述知识点为背景,接下来讨论如何在执行gitlab cicd pipeline时,assume IAM role。
1. 首先,要有一个aws的IAM user,该用户需要具有执行terraform的基本权限。列如创建IAM role(无法创建role就无法有后续assume role的执行)、上传文件到s3(terraform的状态文件卧室持久化到s3上的,所以我需要)。
2. 在gitlab-runner上配置aws IAM user的credential,然后在pipeline中执行脚本来assume role
以下三个命令实现“从assume role命令的返回值中提取各个字段的方法”,这是在pipeline中实现assume role的关键。
– export AWS_ACCESS_KEY_ID=$(aws sts assume-role –role-arn “arn:aws:iam::284411369985:role/grand-world-development-role” –role-session-name “GitLabSession” –query ‘Credentials.AccessKeyId’ –output text)
– export AWS_SECRET_ACCESS_KEY=$(aws sts assume-role –role-arn “arn:aws:iam::284411369985:role/grand-world-development-role” –role-session-name “GitLabSession” –query ‘Credentials.SecretAccessKey’ –output text)
– export AWS_SESSION_TOKEN=$(aws sts assume-role –role-arn “arn:aws:iam::284411369985:role/grand-world-development-role” –role-session-name “GitLabSession” –query ‘Credentials.SessionToken’ –output text)
暂无评论内容