如何使用 AWS Lambda 的基于资源的策略授予对 AWS 服务的访问权限?

上次更新日期:2021 年 9 月 27 日

我想使用 AWS Lambda 的基于资源的策略来授予对 AWS 服务的访问权限。

简短描述

您可以将 AWS Command Line Interface(AWS CLI)与 Lambda 配合使用,通过基于资源的策略向 AWS 服务授予访问权限。有关更多信息,请参阅使用 AWS Lambda 的基于资源的策略

解决方法

以下示例为向 Amazon CloudWatch 事件添加权限,并验证 Lambda 函数是否调用基于资源的策略。

注意:

确认 Lambda 函数没有配置资源策略

某些 AWS 服务(例如 CloudWatch)会为 Lambda 函数创建基于资源的策略。使用与以下类似的 AWS CLI 命令 get-policy,验证基于资源的策略是否没有 CloudWatch 事件的权限:

aws lambda get-policy --region your-region --function-name your-function

An error occurred (ResourceNotFoundException) when calling the GetPolicy operation: The resource you requested does not exist.

此错误确认 Lambda 函数未配置基于资源的策略。

为 CloudWatch 事件添加权限

运行 AWS CLI 命令 add-permission 以调用与以下类似的 Lambda 函数:

aws lambda add-permission --region your-region --function-name your-function --statement-id "your-event-permission" --action "lambda:InvokeFunction" --principal "events.amazonaws.com" --source-arn "arn:aws:events:your-region:xxxxxxxxxxxxx:rule/your-event"

{
    "Statement": "{\"Sid\":\"your-event-permission\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:your-region:xxxxxxxxxxxxx:function:your-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:events:your-region:xxxxxxxxxxxxx:rule/your-event\"}}}"
}

验证 Lambda 函数基于资源的策略的权限

再次运行与以下类似的 AWS CLI 命令 get-policy:

aws lambda get-policy --region your-region --function-name your-function

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "your-event-permission",
      "Effect": "Allow",
      "Principal": {
        "Service": "events.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:your-region:xxxxxxxxxxxxx:function:your-function",
      "Condition": {
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:events:your-region:xxxxxxxxxxxxx:rule/your-event"
        }
      }
    }
  ]
}

(可选)从 Lambda 函数的基于资源的策略中删除权限

如果您不再需要 AWS 服务来触发 Lambda 函数,则可以运行与以下类似的 AWS CLI 命令 remove-permission

aws lambda remove-permission --region your-region --function-name your-function --statement-id "your-event-permission"

注意:Lambda 函数的基于资源的策略配额为 20 KB。有关更多信息,请参阅 Lambda 配额


这篇文章对您有帮助吗?


您是否需要账单或技术支持?