我有一个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
- '"}'
我的问题是,是否有可能做我正在尝试的事情?到目前为止,我的努力都失败了。
答案 0 :(得分:1)
我不相信这只能使用CloudFormation在单一资源中实现。
如果您不介意拥有多个资源,则可以使用不同的帐户ID多次显示InvokePermission块。不过,我认为这不是你正在寻找的东西。
如果您事先并不知道您需要允许访问的帐户数量,或者您不想要那么多重复的样板,您可以使用模板预处理器来生成来自较小的输入集的模板。谷歌看起来合理的三个热门点击是condense,fab_aws和cloudformable,但我认识的大多数开发者都是自己写的,以满足他们的特定需求。