允许所有 cloudwatch 事件规则访问 lambda 函数

Allow all cloudwatch event rules to have access to lambda function

在尝试为 cloudwatch 事件规则提供访问权限以按计划触发 lambda 函数时,我遇到了 lambda 函数策略的硬性限制。

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

它适用于新的 lambda 函数,但最终它的策略会膨胀,并且会在可以访问它的 cloudwatch 事件规则上达到硬性限制。

有人说要重新创建函数 (delete/create),但这在已经配置了 cloudwatch 事件的生产环境中不会是一个选项,导致现有的失去访问权限到 lambda 函数。

使用 aws cli,我能够提取我的 lambda 函数的策略,它看起来像这样:

"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/*

为了避免达到硬性限制,但我似乎做不到。即使在控制台上的 lambda 函数本身,您也无法创建这样的规则,允许指定帐户的所有 cloudwatch 事件使用通配符“*”访问 lambda 函数。

非常欢迎提出建议。谢谢大家

这被接受没有错误:

$ 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-*

我使用了上面的 CLI 命令,但在控制台中出现错误,请查看随附的错误截图enter image description here。请找到以下 lambda 函数策略:

{   "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:events:us-east-1:096280016729:rule/*"
        }
      }   
    }   
  ] }