为lambda提供许多主体调用权限的方法

时间:2017-04-04 05:28:55

标签: amazon-web-services aws-lambda amazon-cloudformation

我有一个lambda需要访问超过1个主体,因此我正在寻找在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"

...它不起作用,因为documentation表示它只接受字符串所以我认为可能会将 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
          - '"}'

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

1 个答案:

答案 0 :(得分:1)

我不相信这只能使用CloudFormation在单一资源中实现。

如果您不介意拥有多个资源,则可以使用不同的帐户ID多次显示InvokePermission块。不过,我认为这不是你正在寻找的东西。

如果您事先并不知道您需要允许访问的帐户数量,或者您不想要那么多重复的样板,您可以使用模板预处理器来生成来自较小的输入集的模板。谷歌看起来合理的三个热门点击是condensefab_awscloudformable,但我认识的大多数开发者都是自己写的,以满足他们的特定需求。