我希望我的 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