Разрешить всем правилам события cloudwatch иметь доступ к лямбда-функции - PullRequest
0 голосов
/ 24 октября 2018

Я столкнулся с жестким ограничением политики лямбда-функций при попытке предоставления доступа к правилу события cloudwatch для запуска лямбда-функции по расписанию.

An error occurred (PolicyLengthExceededException) when calling the AddPermission operation: The final policy size (20670) is bigger than the limit (20480).

Он работает для новой лямбда-функции, но в конечном итоге ее политика будет раздутой и достигнет жесткого ограничения числа в правиле события cloudwatch, которое может получить к нему доступ.

Некоторые сказали, чтопересоздать функцию (удалить / создать), но это не будет вариантом в производственной среде, где в ней уже сконфигурированы события cloudwatch, в результате чего существующие теряют доступ к лямбда-функции.

Используя aws cli, я смог извлечь политику моей лямбда-функции, она выглядит примерно так:

"Statement": [{
    "Sid": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "Effect": "Allow",
        "Principal": {
            "Service": "events.amazonaws.com"
        },
        "Action": "lambda:*",
        "Resource": "arn:aws:lambda:xxxxx:xxxxxxxxxxx:function:xxxxxxxxxxxxx",
        "Condition": {
            "ArnLike": {
                "AWS:SourceArn": "arn:aws:events:xxxxxxx:xxxxxx:rule/xxxxxxxxx"
            }
        }
}]

Итак, я искал что-то похожее на AWS: SourceArn

arn:aws:events:xxxxxxx:xxxxxx:rule/*

Чтобы избежать жестких ограничений, но я не могу этого сделать.Даже в самой лямбда-функции на консоли вы не сможете создать такое правило, которое позволит всем событиям cloudwatch указанной учетной записи иметь доступ к лямбда-функции с использованием подстановочного знака '*'.

Предложения приветствуются.Спасибо, ребята

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Я использовал вышеупомянутую команду CLI, но получил ошибку в консоли, пожалуйста, найдите прикрепленный скриншот ошибки , введите описание изображения здесь .Ниже приведена политика функций лямбды:

{"Version": "2012-10-17", "Id": "default", "Statement": [{"Sid": "events-access "," Effect ":" Allow "," Principal ": {" Service ":" events.amazonaws.com "}," Action ":" lambda: InvokeFunction "," Resource ":" arn: aws: lambda: us-east-1: 096280016729: function: leto_debug_log "," Condition ": {" ArnLike ": {" AWS: SourceArn ":" arn: aws: события: us-east-1: 096280016729: rule / * "}}}]}

0 голосов
/ 24 октября 2018

Это было принято без ошибки:

$ aws lambda add-permission --function-name function_name\
    --action 'lambda:InvokeFunction' --principal events.amazonaws.com \
    --statement-id '1' \
    --source-arn arn:aws:events:ap-southeast-2:123456789012:rule/*

Это будет принимать все правила CloudWatch Events.

Вместо этого вы могли бы назвать свои правила так, чтобы те, которые вы хотите разрешить, могли иметь всетот же префикс в их имени, например:

--source-arn arn:aws:events:ap-southeast-2:123456789012:rule/Event-*
...