AWS Lambda не авторизован для выполнения действий, перечисленных в разрешениях - PullRequest
1 голос
/ 10 апреля 2020

У меня очень простая AWS лямбда-функция - просто перечисление всех моих событий 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/*

У меня действительно есть эта политика, связанная с ролью выполнения лямбда (и я вижу действия, перечисленные на вкладке разрешений лямбды):

{
  "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.

Есть какие-нибудь подсказки, что может отсутствовать?

1 Ответ

1 голос
/ 10 апреля 2020

После большого разочарования я понял это. В редакторе визуальных политик, выбрав ресурс как любой rule, добавив и ARN и выбрав «любой» для всех параметров, добавьте эту строку в политику:

"Resource": "arn:aws:events:*:*:rule/[*/]*"

Что это означает? for is:

  • ресурс событий
  • в любом (*) регионе
  • на любом аккаунте
  • в любой шине событий, если правило принадлежит одному (это [*/] часть)
  • с любым именем

Однако похоже, что логика Amazon c слегка сломана, а дополнительная часть не ' т работает и, вероятно, воспринимается буквально. Итак, что мне нужно было сделать, чтобы исправить это, изменить это на:

"Resource": "arn:aws:events:*:*:rule/*"

С этим он работает без проблем.

...