YAML 中基于资源的 AWS lambda:Permission 多个主体?

Resource based AWS lambda:Permission multiple principals in YAML?

从事云形成项目,并在我的 lambda 上附加了一个基于资源的策略;它类似于 YAML 中的以下内容:

Mapping:
  AccMap:
    Alpha:
      AWSAcc: 1234567 # aws account numbers
    Beta:
      AWSAcc: 2345678
    Prod:
      AWSAcc: 3456789

PermissionPolicy:
  Type: AWS::Lambda::Permission
  Properties:
    Resource: !Ref LambdaNameHere
    Principal:
      Fn::FindInMap:
        - AccMap
        - !Ref Stage # defined elsewhere
        - AWSAcc

我想授予多个帐户此权限,例如,Beta 中的多个帐户。我将如何在 YAML 中处理它?我可以像这样把 AWSAcc 做成一个数组吗?

Mapping:
  Beta:
    AWSAcc:
      - 1234567
      - 2345678

您不能传递列表。 PermissionsPolicy 资源的 Principal 属性 接受单个字符串值:

{
  "Type" : "AWS::Lambda::Permission",
  "Properties" : {
      "Action" : String,
      "EventSourceToken" : String,
      "FunctionName" : String,
      "FunctionUrlAuthType" : String,
      "Principal" : String,
      "PrincipalOrgID" : String,
      "SourceAccount" : String,
      "SourceArn" : String
    }
}

作为解决方法,添加多个 Permission 资源并查找每个资源的主体。 !FindInMap returns 舞台的右侧 AWSAcc 列表。 !Select 从列表中选择正确的主要元素:

Principal: !Select [ "0", !FindInMap [ AccMap, !Ref Stage, AWSAcc ] ]

将第二任校长的Permission"0"改为"1",以此类推。请注意,每个阶段必须具有相同数量的委托人,否则会出现越界错误。

编辑: 如果阶段的主体数量不相等,定义一个 Condition 并将其应用于“额外的”Permission 资源。