如何向其他 AWS 账户的用户授予权限,使其能够向我的 Amazon S3 存储桶上传对象?
上次更新日期:2021 年 2 月 10 日
我希望其他 AWS 账户中的 AWS Identity and Access Management (IAM) 用户能够访问我的 Amazon Simple Storage Service (Amazon S3) 存储桶。该用户正尝试将对象上传到我的 Amazon S3 存储桶。我该如何授予这种跨账户访问权限?
解决方法
按照以下步骤操作,授予账户 A 中的 IAM 用户向账户 B 中的 S3 存储桶上传对象的访问权限:
1. 在帐户 A 中,将策略附加到 IAM 用户。该策略必须允许用户在帐户 B 中的存储桶上运行 s3:PutObject 和 s3:PutObjectAcl 操作。
例如:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
]
}
]
}
注意:上传过程中必须指定对象访问控制列表 (ACL) 的用户需要 s3:PutObjectAcl 权限。如果没有此权限,用户在上传带有 ACL 的对象(例如,bucket-owner-full 控制 ACL)时,会出现“访问被拒”错误。
2. 在账户 A 中,获取 IAM 用户的 Amazon 资源名称 (ARN)。
3. 在账户 B 中,附加一条存储桶策略,授权账户 A 中的 IAM 用户运行 s3:PutObject 和 s3:PutObjectAcl 操作的权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DelegateS3Access",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::999999999999:user/UploadData"},
"Action": ["s3:PutObject", "s3:PutObjectAcl"],
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
]
}
]
}
重要提示:对于 Principal 的值,请务必输入账户 A 中 IAM 用户的 ARN。
设置好账户 A 中的 IAM 用户策略、账户 B 中的存储桶策略之后,IAM 用户即可将对象上传到 Amazon S3。