AWS Lambda 无权执行权限中列出的操作

Fab*_*oor 7 permissions amazon-web-services amazon-iam aws-lambda amazon-cloudwatch-events

我有一个非常简单的 AWS Lambda 函数——只列出我所有的 CloudWatch 事件:

import boto3

def lambda_handler(event, context):
    client = boto3.client("events")
    return client.list_rules()
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试运行它时(使用空测试事件:){},我收到以下权限异常:

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/*
Run Code Online (Sandbox Code Playgroud)

我确实将此策略附加到 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"
}
Run Code Online (Sandbox Code Playgroud)

我已经使用他们提供的可视化编辑器构建了策略,只是sid手动更改了。

任何可能丢失的线索?

Fab*_*oor 9

在经历了很多挫折之后,我想通了。在可视化策略编辑器中,选择资源为 any rule,添加和 ARN 并为所有选项选择“any”将创建在策略中添加以下行:

"Resource": "arn:aws:events:*:*:rule/[*/]*"
Run Code Online (Sandbox Code Playgroud)

这意味着什么:

  • 事件资源
  • 在任何 ( *) 区域
  • 在任何帐户上
  • 在任何事件总线中,如果规则属于一个(这是[*/]部分)
  • 用任何名字

然而,看起来亚马逊的逻辑有点混乱,可选部分不起作用,可能是字面意思。所以我必须做的来修复它是将其更改为:

"Resource": "arn:aws:events:*:*:rule/*"
Run Code Online (Sandbox Code Playgroud)

有了这个,它可以毫无问题地工作。

  • 接得好!- 为我省去了很多悲伤 (2认同)