如何在 Cloudformation 中编写基于资源的策略
Posted
技术标签:
【中文标题】如何在 Cloudformation 中编写基于资源的策略【英文标题】:How to write Resource-based policy in Cloudformation 【发布时间】:2022-01-08 07:21:37 【问题描述】:我想从外部 AWS 账户调用 Lambda,我通过在控制台的基于资源的策略选项卡(Lambda > 配置 > 权限 > 基于资源的策略)中创建策略语句来设法做到这一点。虽然,我找不到在我的 CloudFormation 模板中编写这样的策略的方法。这是我写的:
InvokePolicy:
Type: AWS::IAM::Policy
Properties:
PolicyName: 'InvokeLambdaFromGateway'
Roles:
- !Sub "arn:aws:iam::$AWS::AccountId:role/NameOfLambda"
PolicyDocument:
Version: '2012-10-17'
Statement:
- Sid: InvokeLambdaExternally
Effect: Allow
Resource:
- !Ref NameOfLambda
Action:
- lambda:InvokeFunction
Principal:
AWS: ["arn:aws:iam::AccountIUseToInvokeTheLambda:root"]
但我收到此错误:IAM Resource Policy statement shouldnt have Principal or NotPrincipal
。
如何使用 Principal 定义将该策略附加到我的 Lambda?
【问题讨论】:
【参考方案1】:此错误是因为您没有将主体添加到策略中。您需要添加权限:
permission:
Type: AWS::Lambda::Permission
Properties:
FunctionName: !GetAtt function.Arn
Action: lambda:InvokeFunction
Principal: 123456789012
在documentation 中了解更多信息。
【讨论】:
效果很好,我只是不明白为什么我以前没有找到这个,但非常感谢以上是关于如何在 Cloudformation 中编写基于资源的策略的主要内容,如果未能解决你的问题,请参考以下文章
使用 cloudformation 基于 lambda 持续时间指标创建 cloudwatch 警报
如何使用 CloudFormation 在现有 EC2 实例上启动容器?
如何根据 IAM 角色 CloudFormation 模板中的参数提供不同的条件