上次更新时间:2020 年 11 月 2 日
我想使用 AWS Lambda 函数将文件上传到另一个 AWS 账户的 Amazon Simple Storage Service (Amazon S3) 存储桶,但收到“拒绝访问”错误。如何修复此问题?
简短描述当 AWS Lambda 函数和 Amazon S3 存储桶之间的权限不完整或不正确时,您会收到“拒绝访问”错误。
若要在一个账户(账户 A)中的 Lambda 函数和另一个账户(账户 B)中的 S3 存储桶之间设置正确的权限,请按照以下步骤操作:
1.在账户 A 中,为 Lambda 函数创建 AWS Identity and Access Management (IAM) 角色(执行角色),该角色允许函数将对象上传到 Amazon S3。
2.在账户 B 中,更新存储桶策略以允许 Lambda 函数上传对象。
在开始之前,请确保:
已在一个账户(账户 A)中创建 AWS Lambda 函数 已在另一个账户(账户 B)中创建 Amazon S3 存储桶 在账户 A 中,为 Lambda 函数创建 IAM 角色(执行角色),该角色允许函数将对象上传到 Amazon S31.为 Lambda 函数创建 IAM 角色。
2.请记下 IAM 角色的 Amazon 资源名称 (ARN),以便在后面的步骤中使用。获取 ARN 的一种方法是运行 AWS 命令行界面 (AWS CLI) 命令 get-role。
注意:如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI。
3.将策略附加到 IAM 角色,该角色授予将对象 (s3:PutObject) 上传到账户 B 中的存储桶的权限。例如,此策略向角色授予 s3:PutObject 和 s3:PutObjectAcl 的权限:
{
"Version": "2012-10-17",
"Statement": ,
"Resource": "arn:aws:s3:::AccountBBucketName/*"
}
]
}
4.将 Lambda 函数的执行角色更改为您创建的 IAM 角色。您可以通过配置函数的设置来更改执行角色。
在账户 B 中,更新存储桶策略以允许 Lambda 函数上传对象更新存储桶策略,以便将 Lambda 函数的 IAM 角色(执行角色)的 ARN 指定为可访问操作 s3:PutObject 的委托人。您可以使用与以下类似的存储桶策略:
注意:此策略还授予执行角色 s3:PutObjectAcl 的权限。
{
"Version": "2012-10-17",
"Statement": ,
"Resource":
}
]
}