我正在尝试授予 IAM 角色在InvokeFunctionlambda 函数上执行的权限。我不能简单地将附加语句添加到 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 资源编写策略,或使用未映射到这些操作参数的条件。