AWS Lambda 无权执行权限中列出的操作
AWS Lambda not authorised to perform action listed in permissions
我有一个非常简单的 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
。
任何可能遗漏的线索?
经过一番挫折,我想通了。
在可视策略编辑器中,将资源选择为任何 rule
,添加 ARN 并为所有选项选择 "any" 将在策略中添加此行:
"Resource": "arn:aws:events:*:*:rule/[*/]*"
这句话的意思是:
- 事件资源
- 在任何 (
*
) 地区
- 任何帐户
- 在任何事件总线中,如果规则属于一个(这是
[*/]
部分)
- 任何名字
但是,看起来亚马逊的逻辑有点不对劲,可选部分不起作用,可能是按字面意思理解的。所以我必须做的是将其更改为:
"Resource": "arn:aws:events:*:*:rule/*"
有了这个它就可以正常工作了。
我有一个非常简单的 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
。
任何可能遗漏的线索?
经过一番挫折,我想通了。
在可视策略编辑器中,将资源选择为任何 rule
,添加 ARN 并为所有选项选择 "any" 将在策略中添加此行:
"Resource": "arn:aws:events:*:*:rule/[*/]*"
这句话的意思是:
- 事件资源
- 在任何 (
*
) 地区 - 任何帐户
- 在任何事件总线中,如果规则属于一个(这是
[*/]
部分) - 任何名字
但是,看起来亚马逊的逻辑有点不对劲,可选部分不起作用,可能是按字面意思理解的。所以我必须做的是将其更改为:
"Resource": "arn:aws:events:*:*:rule/*"
有了这个它就可以正常工作了。