使用 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。

理想情况下,他们想要以下内容:

是否可以担任这样的角色?或者 IAM 帐户是否需要在这些子帐户中创建才能工作?即使用子账户中的那些 IAM 账户执行部署,因此,运行 来自每个子账户的 CodeBuild / CodePipeline 部署。

我通过使用 STS 并在 Codebuild 中担任内联临时角色来实现这一目标。找到文档 here

简而言之,我添加了以下内容。您需要更改 ACCOUNT_IDROLE_TO_ASSUMETEMP_NAMECOMMAND 才能实现此目的。

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