Amazon web services 向lambda授予多个主体调用权限的方法

Amazon web services 向lambda授予多个主体调用权限的方法,amazon-web-services,aws-lambda,amazon-cloudformation,Amazon Web Services,Aws Lambda,Amazon Cloudformation,我有一个lambda,需要访问多个主体,因此我正在寻找在CloudFormation模板中创建所有必要调用权限的方法 例如,帐户123和456将需要访问MyFunction,因此类似的内容将无法工作: Resources: LambdaInvokePermission: Type: AWS::Lambda::Permission Properties: FunctionName: arn:aws:lambda:us-west-2:${AWS::AccountId}

我有一个lambda,需要访问多个主体,因此我正在寻找在CloudFormation模板中创建所有必要调用权限的方法

例如,帐户123和456将需要访问MyFunction,因此类似的内容将无法工作:

Resources:
  LambdaInvokePermission:
    Type: AWS::Lambda::Permission
    Properties:
      FunctionName: arn:aws:lambda:us-west-2:${AWS::AccountId}:MyFunction
      Action: lambda:InvokeFunction          
      Principal: "123,456"
…它将不起作用,因为声明它只接受字符串,所以我认为可能将CommaDelimitedList参数传递给CloudFormation模板并使用Fn:Join可以完成这项工作。大概是这样的:

Parameters:
  MyAccounts:
    Description: All accounts
    Type: CommaDelimitedList
...
Resources:
  CrossInvokePermission:
    Type: AWS::Lambda::Permission
    Properties:
      Fn::Join:
        - ""
        - - '{"Principal": {"AWS": ["'
          - Fn::Join: ['","', {Ref: MyAccounts} ]
          - '"]}, "Action": "lambda:InvokeFunction", "FunctionName" : "'
          - arn:aws:lambda:us-west-2:${AWS::AccountId}:function:MyFunction
          - '"}'

我的问题是,有可能做到我正在尝试的吗?到目前为止,我的努力都失败了。

我认为目前仅使用云信息的单一资源不可能做到这一点

如果您不介意拥有多个资源,可以使用不同的帐户ID多次显示InvokePermission块。我想这不是你想要的

如果您事先不知道需要多少帐户才能允许访问,或者如果您不希望有那么多重复的样板文件,则可以使用模板预处理器从较小的输入集生成模板。谷歌的三大热门产品看起来都很合理,而且,但我知道的大多数开发人员都只是自己写了一些东西来满足他们的特定需求