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