2017-04-04 88 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,但我知道大多數開發者已經自己寫了一些東西來滿足他們的特定需求。