如何允许我的 Lambda 函数访问我的 Amazon S3 存储桶?

2 分钟阅读
0

我希望我的 AWS Lambda 函数能够访问 Amazon Simple Storage Service(Amazon S3)存储桶。

简短描述

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

  1. 为 Lambda 函数创建一个同时授予了 S3 存储桶访问权限的 AWS Identity and Access Management(IAM)角色。
  2. 将 IAM 角色配置为 Lambda 函数执行角色
  3. 验证 S3 存储桶策略是否未明确拒绝对您的 Lambda 函数或其执行角色的访问。

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

解决方法

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

要为 Lambda 函数创建一个同时授予了 S3 存储桶访问权限的 IAM 角色,请完成以下步骤:

  1. 在 IAM 控制台中创建执行角色

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

  3. 要使信任策略允许 Lambda 代入执行角色,请将 lambda.amazonaws.com 添加为受信任的服务。选择信任关系选项卡,然后选择编辑信任策略

  4. 将策略中的变量替换为以下变量:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
         "Effect": "Allow",
         "Principal": {
         "Service": "lambda.amazonaws.com"
        },
      "Action": "sts:AssumeRole"
      }
     ]
    }
  5. 选择更新策略

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

  7. 选择 JSON 选项卡。

  8. 输入对您的 S3 存储桶访问权限的基于资源的 IAM 策略。有关更多信息,请参阅 Writing IAM Policies: How to Grant Access to an Amazon S3 Bucket。以下示例 IAM 策略通过 Get 权限授予对特定 Amazon S3 存储桶的访问权限。如需访问 Amazon S3 存储桶内的对象,请指定正确的路径或使用通配符(“*”)。有关更多信息,请参阅 Writing IAM Policies: how to grant access to an Amazon S3 bucket

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

    **注意:**请将 "arn:aws:s3:::EXAMPLE-BUCKET" 替换为您的 S3 存储桶 ARN。如果对象使用 AWS Key Management Service(AWS KMS)密钥加密,则必须提供额外的权限。有关更多信息,请参阅我的 Amazon S3 存储桶默认使用自定义 AWS KMS 密钥进行加密。我如何允许用户从存储桶下载和上传到存储桶?

  9. 选择查看策略

  10. 对于名称,输入您的策略的名称。

  11. 选择创建策略

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

要将 IAM 角色配置为 Lambda 函数执行角色,请完成以下步骤:

  1. 打开 Lambda 控制台
  2. 选择您的 Lambda 函数。
  3. 执行角色下,对于现有角色,选择您创建的 IAM 角色。
  4. 选择保存

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

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

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

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

**注意:**将 "arn:aws:s3:::EXAMPLE-BUCKET" 替换为 S3 存储桶的 ARN,将 "arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012" 替换为您的 Lambda 执行角色的 ARN。

相关信息

AWS 策略生成器

AWS 官方
AWS 官方已更新 1 年前