使用 CloudFormation / Serverless 承担角色并将资源部署到与根帐户不同的帐户中
Assume role and deploy resources using CloudFormation / Serverless into a separate account from the root account
我的客户有一个根帐户,子帐户作为环境(开发、测试、生产)。这个想法是,root 帐户中的 ci_user 在每个帐户中承担一个角色,并从 CodeBuild / CodePipeline 执行部署。他们正在使用 serverless
自动创建 Lambas。
理想情况下,他们想要以下内容:
- 根账户中存在ci_user
- 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
我的客户有一个根帐户,子帐户作为环境(开发、测试、生产)。这个想法是,root 帐户中的 ci_user 在每个帐户中承担一个角色,并从 CodeBuild / CodePipeline 执行部署。他们正在使用 serverless
自动创建 Lambas。
理想情况下,他们想要以下内容:
- 根账户中存在ci_user
- 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