微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 CloudFormation / Serverless 承担角色并将资源部署到与根帐户不同的帐户中

如何解决使用 CloudFormation / Serverless 承担角色并将资源部署到与根帐户不同的帐户中

我的客户有一个 root 帐户和子帐户作为环境(开发、测试、生产)。这个想法是 root 帐户中的 ci_user 在其中的每一个中扮演一个角色,并从 CodeBuild / CodePipeline 执行部署。他们正在使用 serverless 自动创建 Lambas。

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

  • ci_user 存在于 root 帐户中
  • ci_user 在开发、测试或生产帐户中担任角色
  • Resources / CloudFormation 在这些子账户中从根账户执行

是否有可能担任这样的角色?或者 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。