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

AWS Lambda 返回权限被拒绝尝试从 S3 存储桶获取对象