如何允许我的 Lambda 执行角色访问 Amazon S3 存储桶?

上次更新时间:2021 年 7 月 20 日

我希望我的 AWS Lambda 函数能够访问 Amazon Simple Storage Service (Amazon S3) 存储桶。该如何操作?

简短描述

要向您的 Lambda 函数授予对同一 AWS 账户中 Amazon S3 存储桶的访问权限,请执行以下操作:

1.    为 Lambda 函数创建 AWS Identity and Access Management (IAM) 角色,它还将授予对 S3 存储桶的访问权限。

2.    将 IAM 角色配置为 Lambda 函数的执行角色

3.    验证 S3 存储桶策略没有明确拒绝对 Lambda 函数或其执行角色的访问。

重要提示:如果您的 S3 存储桶和函数的 IAM 角色位于不同的账户中,则还必须在 S3 存储桶策略中授予所需的权限。有关更多信息,请参阅如何提供对 Amazon S3 存储桶中的对象的跨账户访问权限?

解决方法

为 Lambda 函数创建 IAM 角色,同时授予对 S3 存储桶的访问权限

1.    按照在 IAM 控制台中创建执行角色中的步骤进行操作。

2.    从 IAM 角色列表中,选择您刚刚创建的角色。

3.    从权限选项卡中,选择添加内联策略

4.    选择 JSON 选项卡。

5.    输入基于资源的 IAM 策略,该策略授予对 S3 存储桶的访问权限。有关更多信息,请参阅将基于资源的策略用于 AWS Lambda

授予对特定 S3 存储桶的访问权限的 IAM 策略示例

重要提示:"arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET/*" 替换您 S3 存储桶的 Amazon Resource Name (ARN)。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET/*"
      ]
    }
  ]
}

6.    选择查看策略

7.    在名称字段中输入策略名称。

8.    选择 Create policy(创建策略)。

将 IAM 角色配置为 Lambda 函数的执行角色

1.    打开 Lambda 控制台

2.    选择 Lambda 函数。

3.    在执行角色下,对于现有角色,选择您创建的 IAM 角色。

4.    选择 Save(保存)。

验证 S3 存储桶策略没有明确拒绝对 Lambda 函数或其执行角色的访问

要查看或编辑 S3 存储桶策略,请按照使用 Amazon S3 控制台添加存储桶策略中的说明进行操作。

重要提示:如果您的 S3 存储桶和函数的 IAM 角色位于不同的账户中,则还必须在 S3 存储桶策略中明确授予所需的权限。有关更多信息,请参阅如何提供对 Amazon S3 存储桶中的对象的跨账户访问权限?

IAM S3 存储桶策略示例,该策略向 Lambda 执行角色授予跨账户访问 S3 存储桶的权限

重要提示:"arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET/*" 替换为您 S3 存储桶的 ARN。将 "arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012" 替换为您 Lambda 执行角色的 ARN。

{
  "Id": "ExamplePolicy",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET/*"
      ],
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012"
        ]
      }
    }
  ]
}

这篇文章对您有帮助吗?


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