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

上次更新时间:2020 年 6 月 11 日

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

简短描述

请遵循以下步骤:

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

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

3.    验证存储桶策略是否对 Lambda 函数执行角色授予了访问权限。

重要提示:如果为 Lambda 函数创建的 IAM 角色与存储桶位于同一 AWS 账户中,则无需在 IAM 角色和存储桶策略上授予 Amazon S3 权限。相反,您可以授予 IAM 角色权限,然后验证存储桶策略是否未明确拒绝 Lambda 函数角色的访问权限。例如,以下过程授予 IAM 角色 对 Amazon S3 的访问权限。如果 IAM 角色和存储桶位于不同的账户中,则需要在 IAM 角色和存储桶策略上授予 Amazon S3 权限。

解决方法

为 Lambda 函数创建还将授予对 S3 存储桶的访问权限的 IAM 角色(执行角色)

1.    按照以下步骤在 IAM 控制台中创建 Lambda 执行角色

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

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

4.    选择 JSON 选项卡。

5.    输入授予对 S3 存储桶访问权限的策略。您可以使用与以下类似的策略:

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

6.    选择查看策略

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

8.    选择创建策略

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

1.    打开 Lambda 控制台

2.    选择 Lambda 函数。

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

4.    选择保存

验证存储桶策略是否授予了 Lambda 函数执行角色访问权限

如果您的 Lambda 函数的执行角色(IAM 角色)与存储桶位于同一个 AWS 账户中,则验证存储桶策略是否未明确拒绝对 Lambda 函数或其执行角色的访问权限。只要存储桶策略未明确拒绝访问权限,则 Lambda 函数就可以访问存储桶,因为对其 IAM 角色授予了权限。

如果您的 Lambda 函数的执行角色和存储桶属于不同的账户,则需要添加存储桶策略,以便在请求来自执行角色发时允许访问存储桶。对于此跨账户访问,您需要在其 IAM 策略和存储桶策略上授予执行角色对 Amazon S3 的访问权限。

您可以使用类似于以下内容的存储桶策略:

{
  "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"
        ]
      }
    }
  ]
}

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?