我希望我的 AWS Lambda 函数能够访问 Amazon Simple Storage Service(Amazon S3)存储桶。
简短描述
若要授予您的 Lambda 函数访问同一 AWS 账户中的 Amazon S3 存储桶的权限,请完成以下操作:
- 为 Lambda 函数创建一个同时授予了 S3 存储桶访问权限的 AWS Identity and Access Management(IAM)角色。
- 将 IAM 角色配置为 Lambda 函数执行角色。
- 验证 S3 存储桶策略是否未明确拒绝对您的 Lambda 函数或其执行角色的访问。
**重要事项:**如果您的 S3 存储桶和函数 IAM 角色位于不同账户中,则应授予 S3 存储桶策略所需的权限。有关更多信息,请参阅如何提供对 Amazon S3 桶中对象的跨账户存取权限?
解决方法
为 Lambda 函数创建一个同时授予了 S3 存储桶访问权限的 IAM 角色
要为 Lambda 函数创建一个同时授予了 S3 存储桶访问权限的 IAM 角色,请完成以下步骤:
-
在 IAM 控制台中创建执行角色。
-
从 IAM 角色列表中,选择您创建的角色。
-
要使信任策略允许 Lambda 代入执行角色,请将 lambda.amazonaws.com 添加为受信任的服务。选择信任关系选项卡,然后选择编辑信任策略。
-
将策略中的变量替换为以下变量:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
-
选择更新策略。
-
在权限选项卡中,选择添加内联策略。
-
选择 JSON 选项卡。
-
输入对您的 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 密钥进行加密。我如何允许用户从存储桶下载和上传到存储桶?
-
选择查看策略。
-
对于名称,输入您的策略的名称。
-
选择创建策略。
将 IAM 角色配置为 Lambda 函数执行角色
要将 IAM 角色配置为 Lambda 函数执行角色,请完成以下步骤:
- 打开 Lambda 控制台。
- 选择您的 Lambda 函数。
- 在执行角色下,对于现有角色,选择您创建的 IAM 角色。
- 选择保存。
验证 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 策略生成器