AWS Lambda 无权执行权限中列出的操作
Posted
技术标签:
【中文标题】AWS Lambda 无权执行权限中列出的操作【英文标题】:AWS Lambda not authorised to perform action listed in permissions 【发布时间】:2020-07-23 06:46:12 【问题描述】:我有一个非常简单的 AWS Lambda 函数 - 仅列出我所有的 CloudWatch 事件:
import boto3
def lambda_handler(event, context):
client = boto3.client("events")
return client.list_rules()
但是,当我尝试运行它时(使用空的测试事件:),我收到以下权限异常:
An error occurred (AccessDeniedException) when calling the ListRules operation:
User: arn:aws:sts::123321123321:assumed-role/lambda+basicEvents/lambdaName
is not authorized to perform: events:ListRules
on resource: arn:aws:events:eu-west-1:123321123321:rule/*
我确实将此策略附加到 lambda 执行角色(我可以看到 lambda 的权限选项卡中列出的操作):
"document":
"Version": "2012-10-17",
"Statement": [
"Sid": "BasicCloudWatchEventsManager",
"Effect": "Allow",
"Action": [
"events:DescribeRule",
"events:EnableRule",
"events:PutRule",
"events:ListRules",
"events:DisableRule"
],
"Resource": "arn:aws:events:*:*:rule/[*/]*"
]
,
"name": "BasicCloudWatchEventsManager",
"id": "SOME7LONG7ID",
"type": "managed",
"arn": "arn:aws:iam::123321123321:policy/BasicCloudWatchEventsManager"
我已经使用他们提供的可视化编辑器构建了策略,只是手动更改了sid
。
有什么线索可能会丢失吗?
【问题讨论】:
可能是 SCP(如果您在使用 AWS Organizations 的环境中)或权限边界启动。您尝试policysim.aws.amazon.com 进行验证吗? @MichaelHausenblas 我在自己的账户上从 AWS 界面运行此程序 - 未设置策略边界。不知道policysim,但现在尝试了-denied Implicitly denied (no matching statements)
。
明白了。使用策略模拟器时,您是否提供了资源 ARN?
@MichaelHausenblas 我不想提供特定的 ARN,因为我想列出我的所有规则,甚至是我计划在未来创建的规则。但是当我尝试使用特定的 arn 或更改为 "Resource": "*"
时,它起作用了 - 这让我找到了我发布的答案。谢谢你的帮助! policysim 是一个很好的提示。
【参考方案1】:
在经历了很多挫折之后,我想通了。
在可视化策略编辑器中,将资源选择为任意 rule
,添加 ARN 并为所有选项选择“任意”,将在策略中添加以下行:
"Resource": "arn:aws:events:*:*:rule/[*/]*"
这意味着什么:
事件资源 在任何 (*
) 地区
任何帐户
在任何事件总线中,如果规则属于一个(这是[*/]
部分)
任何名字
但是,亚马逊的逻辑似乎有点不正常,可选部分不起作用,可能是按字面意思理解的。所以我必须做的就是把它改成:
"Resource": "arn:aws:events:*:*:rule/*"
有了这个,它就可以正常工作了。
【讨论】:
好收获! - 为我节省了很多悲伤 我尝试使用 "Resource": "*" 并且效果很好。 无法再将其设置为“arn:aws:events:*:*:rule/*”,因为它会自动更正以删除最后一个“*”以上是关于AWS Lambda 无权执行权限中列出的操作的主要内容,如果未能解决你的问题,请参考以下文章
来自执行环境的 AWS Lambda 凭证没有执行角色的权限
AWS Lambda:提供的执行角色无权调用 EC2 上的 DescribeNetworkInterfaces
(具体资源)AWS Lambda:提供的执行角色无权调用EC2上的DescribeNetworkInterfaces
尝试使用 ffmpeg 时 AWS Lambda 权限被拒绝
错误代码:AccessDeniedException。用户:arn:aws:iam::xxx:user/xxx 无权执行:lambda:CreateEventSourceMapping on reso