跳至内容

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

2 分钟阅读
0

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

简短描述

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

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

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

解决方法

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

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

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

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

  3. 要配置信任策略以允许 Lambda 代入执行角色,请将 lambda.amazonaws.com 添加为可信服务。选择 Trust relationships(信任关系)选项卡,然后选择 Edit trust policy(编辑信任策略)。

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

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

  6. Permissions(权限)选项卡中,选择 Add inline policy(添加内联策略)。

  7. 选择 JSON 选项卡。

  8. 输入授予对 Amazon S3 存储桶访问权限的基于资源的 IAM 策略。有关详细信息,请参阅为 Lambda 使用基于资源的策略。以下示例 IAM 策略通过 Get 权限授予对特定 Amazon S3 存储桶的访问权限。如需访问 Amazon S3 存储桶内的对象,请指定正确的路径或使用通配符 ("*")。有关更多信息,请参阅编写 IAM 策略:如何授予对 Amazon S3 存储桶的访问权限

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

    **注意:**请将 "arn:aws:s3:::example-bucket" 替换为您的 Amazon S3 存储桶的 Amazon 资源名称 (ARN)。如果您使用 AWS Key Management Service (AWS KMS) 密钥加密对象,则还必须提供必要的权限。有关更多信息,请参阅如何允许用户从使用客户管理型 AWS KMS 密钥加密的 Amazon S3 存储桶进行下载和上传操作?

  9. 选择 Review policy(查看策略)。

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

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

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

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

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

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

使用 Amazon S3 控制台查看您的 Amazon S3 存储桶策略。验证您的策略是否允许访问您的 Lambda 函数及其执行角色。

以下示例 IAM 策略向 Lambda 执行角色授予对 Amazon 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" 替换为您的 Amazon S3 存储桶的 ARN,并将 "arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012" 替换为您的 Lambda 执行角色的 ARN。

相关信息

AWS 策略生成器

AWS 官方已更新 5 个月前