【发布时间】:2019-11-24 17:02:51
【问题描述】:
作为 IAM 用户,我已获得对 Amazon S3 存储桶的完全访问权限。
查看 AWS 管理控制台 > 我的安全凭证 > 用户 > my_username 时,AmazonS3FullAccess 的策略如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
但我无法通过 AWS 管理控制台下载其他 IAM 用户上传的对象。尝试下载对象时出现以下 xml 错误页面:
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>CB7861FFD8043D3D</RequestId>
<HostId>
whN/Ftumk8fRJcEyugQI7rpLC1F+00YJ7cM3bTILY9COmiuS0j2v7r37mbPf7B4tqYKTzNkjdfM=
</HostId>
</Error>
这些其他 IAM 用户拥有与我相同的权限,并对其对象的权限进行了任何特定更改。
存储桶的所有者(也创建了 IAM 用户账户)尝试将我的 Canonical ID 添加到相关对象的权限中,但没有成功。但是,他能够下载任何 IAM 用户上传的对象。
以上 JSON 中的权限设置是否不足以完全访问其他 IAM 用户创建的对象?所有 IAM 用户均在同一账户下创建。我们如何才能轻松地进行设置,以便我们组中的任何 IAM 用户都可以访问彼此的对象?
编辑:认为这是一个跨账户问题,但我相信所有 IAM 用户都是在同一个账户中创建的。相应地更改了措辞。
一些附加信息: 以下是实际存储桶策略的样子:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Bucket Policy",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::123456789012:root",
"arn:aws:iam::987654321012:user/my_username"
]
},
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:PutObject",
"s3:DeleteObject",
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::my_bucket/*",
"arn:aws:s3:::my_bucket"
]
}
]
}
我将我的用户信息添加到 Principal,但在阅读了有关 IAM 用户的更多信息后,这听起来似乎没有必要。不过,这似乎也不是问题。
【问题讨论】:
-
啊!您提到了“跨账户对象”!如果将对象上传到属于不同账户的 Amazon S3 存储桶,则应选择
--acl bucket-owner-full-control。如果不这样做,则该对象由源帐户“拥有”,而不是目标帐户。事情可能会变得非常混乱,甚至很难移除对象,即使是存储桶所有者! -
还要检查 IAM 用户是否具有编程访问权限。您的 MFA 政策可能会阻止此操作!
-
此外,可能有分配给存储桶的存储桶策略阻止您执行此类操作。每当 AWS 委托人向 S3 发出请求时,授权决策取决于所有适用的 IAM 策略、S3 存储桶策略和 S3 ACL 的联合。
-
我不知道我是否误用了“跨账户”访问权限。它实际上可能是同一个账户,但只是同一账户中不同 IAM 用户创建的对象。不确定这里的术语。
-
@user1964692 您还应该检查您尝试下载的对象是否由 KMS 密钥加密 - 如果是这样,您还需要将 kms:Decrypt 添加到用于执行下载。
标签: amazon-web-services amazon-s3 amazon-iam