如何允许我的 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 角色

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

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

3.    信任策略必须通过将 lambda.amazonaws.com 添加为受信任的服务来允许 Lambda 代入执行角色。选择信任关系选项卡,选择编辑信任策略,然后将策略替换为以下内容:

{
  "Version": "2012-10-17",
  "Statement": [
    {
     "Effect": "Allow",
     "Principal": {
     "Service": "lambda.amazonaws.com"
    },
  "Action": "sts:AssumeRole"
  }
 ]
}

4.选择更新策略

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

6.    选择 JSON 选项卡。

7.    输入对您的 S3 桶访问权限的基于资源的 IAM 策略。有关详细信息,请参阅使用 AWS Lambda 基于资源的策略

以下示例 IAM 策略通过 Get 权限授予对特定 Amazon S3 桶的访问权限。如需访问 Amazon S3 桶内的对象,请确保指定正确的路径或使用通配符(“*”)。有关详细信息,请参阅编写 IAM 策略: 如何授予对 Amazon S3 桶的访问权限

**重要事项:请将“arn:aws:s3:::EXAMPLE-BUCKET”**替换为您的 S3 桶 Amazon 资源名称 (ARN)。

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

6.    选择查看策略

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

8.    选择创建策略

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

1.    打开 Lambda 控制台

2.    选择您的 Lambda 函数。

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

4.    选择保存

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

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

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

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

**重要事项:请将“arn:aws:s3:::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:::EXAMPLE-BUCKET/*"
      ],
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:role/ExampleLambdaRoleFor123456789012"
        ]
      }
    }
  ]
}

相关信息

AWS Policy Generator

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