amazon-web-services - 无法通过 CloudFormation 将 IAM 角色分配为基于 AWS Lambda 资源的策略中的委托人
问题描述
我正在尝试授予 IAM 角色在InvokeFunction
lambda 函数上执行的权限。我不能简单地将附加语句添加到 IAM 角色的语句列表以允许这样做(根据系统的设计,这不是我需要的方法)。
我尝试在 CloudFormation 模板中创建 AWS::Lambda::Permission 资源,然后执行 UpdateStack。我在 UI 中收到以下错误:
CREATE_FAILED 属性 Principal 的值必须是 String 类型
以下是在 UpdateStack 期间引发错误的 CloudFormation 资源
"ResourceBasedPermission": {
"Type": "AWS::Lambda::Permission",
"Properties": {
"Action": "lambda:InvokeFunction",
"Principal": {
"AWS": "arn:aws:iam::XXXXXXX:role/XXXXXXX"
},
"FunctionName": {
"Fn::GetAtt": [
"LambdaFunction",
"Arn"
]
}
}
}
但是,我可以在 Lambda UI 中创建这个基于资源的策略,并且在测试时可以正常工作(请参阅它在 UI 中为我呈现的策略文档):
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "test123",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXXXX:role/XXXXXX"
},
"Action": "lambda:InvokeFunction",
"Resource": <arn_to_the_lambda>
}
]
}
最后我不认为这是相关的......但以下消息显示在https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html的文档中:
Note 您只能在 AddPermission 和 AddLayerVersionPermission API 操作的范围内为 Lambda 资源更新基于资源的策略。目前,您无法以 JSON 格式为您的 Lambda 资源编写策略,或使用未映射到这些操作参数的条件。
解决方案
推荐阅读
- python - 如何在python中返回多维字典的关联键和值?
- sql - 在整个时间范围内产生时间孤岛。SQL 服务器
- javascript - 带有 JS 的复杂 JSON 结构
- sql - 将一个表与下一个表的最新版本连接起来
- azure - 如何指定到网关的路由
- regex - 是否有一种简单的方法来替换非数字字符配置单元,不包括 - 只允许 -ve 和 +ve 数字
- maximo - 用于更改工单状态的 Maximo 自动化脚本
- c# - 如何在基类上使用泛型时将函数从一个接口应用到另一个接口?
- wordpress - Firebase 推送通知不会使用 react-native 在后台发送通知
- java - 如何使用 2 个参数创建简单的 Hello World 应用程序