2017-04-04 84 views
0

我有一个需要访问多于一个委托人的lambda,所以我正在寻找方法来在CloudFormation模板中创建所有必要的调用权限。给许多委托人授予对lambda的权限的方法

例如账户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

我不认为目前只有在使用CloudFormation的单个资源中才有可能。

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

如果您事先不知道需要允许访问多少个帐户,或者如果您不想要那么多重复的样板,则可以使用模板预处理器从较小的集合中生成模板的投入。从谷歌合理的三个顶级点击是condense,fab_awscloudformable,但我知道大多数开发者已经自己写了一些东西来满足他们的特定需求。