问题描述
我的客户有一个 root 帐户和子帐户作为环境(开发、测试、生产)。这个想法是 root 帐户中的 ci_user 在其中的每一个中扮演一个角色,并从 CodeBuild / CodePipeline 执行部署。他们正在使用 serverless
自动创建 Lambas。
理想情况下,他们需要以下内容:
- ci_user 存在于 root 帐户中
- ci_user 在开发、测试或生产帐户中担任角色
- Resources / CloudFormation 在这些子账户中从根账户执行
是否有可能担任这样的角色?或者 IAM 账户是否需要在这些子账户中创建才能工作?即使用子账户中的那些 IAM 账户来执行部署,从而从每个子账户运行 CodeBuild/CodePipeline 部署。
解决方法
我通过使用 STS 并在 Codebuild 中内联承担临时角色来实现这一点。找到文档 here。
简而言之,我添加了以下内容。您需要更改 ACCOUNT_ID
、ROLE_TO_ASSUME
、TEMP_NAME
和 COMMAND
才能实现此目的。
version: 0.2
phases:
install:
runtime-versions:
nodejs: 14.x
commands:
- ASSUME_ROLE_ARN="arn:aws:iam::ACCOUNT_ID:role/ROLE_TO_ASSUME
- TEMP_ROLE=`aws sts assume-role --role-arn ROLE_TO_ASSUME --role-session-name TEMP_NAME`
- export TEMP_ROLE
- export AWS_ACCESS_KEY_ID=$(echo "${TEMP_ROLE}" | jq -r '.Credentials.AccessKeyId')
- export AWS_SECRET_ACCESS_KEY=$(echo "${TEMP_ROLE}" | jq -r '.Credentials.SecretAccessKey')
- export AWS_SESSION_TOKEN=$(echo "${TEMP_ROLE}" | jq -r '.Credentials.SessionToken')
pre_build:
commands:
- npm run COMMAND