【问题标题】:Add permissions to aws-cdk pipelines' cross account execution role为 aws-cdk 管道的跨账户执行角色添加权限
【发布时间】:2021-12-16 18:29:59
【问题描述】:

我确实有三个 AWS 账户:

  • 共享(aws-cdk 管道所在的位置)
  • 发展
  • 生产

Shared账号拥有一个route53域名,对应的zone。

我确实希望 DevelopmentProduction 能够使用这些域名(附加 dns 记录,例如 dev.domainname.com

编辑:我还需要访问共享帐户中的其他资源(s3 存储桶、证书管理器等),这是为了问题而进行的简化。

我启动了pipeline stages 的帐户和跨帐户部署,按照此guide 工作

如果我尝试部署使用该域的堆栈,它会按预期失败,因为 Development 堆栈中的角色 (cfn-exec-role) 对 Shared 堆栈。

我可以在共享堆栈中附加必要的策略,允许 开发生产 堆栈中的角色访问必要的资源,但有什么办法可以解决这在代码中按照“基础设施即代码”?

这需要获取开发生产帐户的执行角色,并在共享帐户

中附加权限

【问题讨论】:

  • 这里的“执行角色”是什么意思?
  • cdk 管道有两个角色,用于部署堆栈(由引导步骤创建)部署角色(创建资源)是 cfn-exec-role

标签: amazon-web-services aws-cdk


【解决方案1】:

所以我假设你想要这样的东西 (GitHub): 主要区别在于您不想在 prod/dev 帐户中手动创建角色,并且您的 dev-env 也在不同的帐户中。

我将通过创建一个不同的 CDK 堆栈来扩展这一点,该堆栈在 prod 上创建角色 CodePipelineCrossAccountRole (policy) 和 CloudFormationDeploymentRole (policy)。在您的情况下,开发人员也需要这样做。在 dev 和 prod 中部署这些堆栈,您可以通过管道堆栈中的 ARN 访问角色。您可以以类似的方式对其进行扩展,以提供对其他共享资源的跨账户访问权限,这已为工件存储桶 en KMS 实现。

【讨论】:

  • 我想这是正确的答案,也许我可以提供一个例子,必须删除手动部分,因为这容易出错并且不适合 CI/CD,即使它是一次性行动
【解决方案2】:

由于Route53支持cross-account subdomain Hosted Zones,可以避免跨账号资源共享或权限。在您的开发帐户中创建一个 dev.domainname.com 托管区域,并在您的生产帐户中创建一个 domainname.com 托管区域。

const hostedZone = HostedZone.fromLookup(this, 'HostedZone', {
  // synth-time hosted zone lookup
  domainName: props.isProd ? 'domainname.com' : 'dev.domainname.com',
});

【讨论】:

  • 好的,我想这对于我的问题来说过于简单了,因为我也有根区域的问题,因为有几十个域,而且我还需要使用证书管理器和 s3 等其他资源桶。我需要在更通用的层面上解决这个问题
猜你喜欢
  • 1970-01-01
  • 2022-01-20
  • 2020-07-17
  • 2023-02-02
  • 2017-03-16
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
相关资源
最近更新 更多