在多个地区部署stackset时如何避免重复IAM角色



你好,我对云的形成有点生疏。但我们正在部署一个跨15个账户和多个地区的数据集。我在一个地区进行了测试,但当添加另一个地区时,它就爆炸了。原因是因为我有来自中央帐户的lambda将承担的iam角色。子角色在每个帐户中部署在us-east-1中,但是当它到达另一个区域模板失败时,由于我是全局的。我一直在研究如何杠杆化的条件,但有点困惑。有什么帮助或想法吗?

有两种方法可以处理这个问题:

  1. 创建单个角色,并将该角色的ARN提供给需要它的堆栈(通过参数或导入)。这意味着您需要维护两件事。
  2. 在使用该角色的事物旁边创建角色,并在角色名称中添加区域标识符。

在这些选项中,我更喜欢选项#2。下面是一个Lambda执行角色的示例(LambdaName是一个堆栈参数)。注意,我还包括了堆栈名称:我喜欢将来自同一堆栈的所有内容列在一起。

!Sub "${AWS::StackName}-${AWS::Region}-${LambdaName}-ExecutionRole"

像这样的详细角色名的问题是角色名的最大长度为64个字符。因此,我可能会省略LambdaName以保持在此限制以下(特别是创建单个Lambda的堆栈,其中我通常使用AWS::StackName作为Lambda的名称)。

在我看来,处理这个问题的最简单的方法,只需要使用一个堆栈是使用Cloudformation '条件'。我能够在我需要的目标帐户中创建必要的IAM角色。我的lambda函数将在遍历每个帐户和区域时承担这些子角色。此外,它不会为每个区域创建两个角色,因为它们是从先前的响应中工作的。这种方法有效,但只需要一个角色。这里有一个例子。这种方法允许只创建一次全局资源,并根据需要为每个区域复制其他项目。条件:

RegionCheck: !Equals
- !Ref "AWS::Region"
- us-east-1

资源:

ApprovedUntilDatePatchBaselineCrossAccountRole:
Type: 'AWS::IAM::Role'
Condition: RegionCheck
Properties:
RoleName: approved-until-date-patchbaseline-cross-account-role
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
AWS:
- arn:aws:iam::<AccountID>/etc

最新更新