我试图创建一个存储桶并为另外两个帐户设置完全权限 . 首先,我在存储桶Permissions中添加了这些帐户 . 文件仍然无法访问 . 然后,我试了一个政策 . 我为每个帐户创建了两个角色,以便在其中指定它们 . 这是政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAccess",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::id:role/user1",
"arn:aws:iam::id:role/user2"
]
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket-name/*",
"arn:aws:s3:::bucket-name"
]
}
]
}
依然没有 . 然后我看到,即使存储桶具有所有权限设置,其中的文件也没有 . 当我为文件设置它们时,其他用户可以访问它 . 但我真的不想为我上传的每个文件都这样做 . 怎么了?
我尝试使用aws cli加载文件并使用“--grants”选项设置权限,但在上传后,我甚至无法通过aws控制台自行下载它们 .
2 回答
为了演示这是如何工作的,我做了以下工作:
在Account-1中创建了
bucket-1
指定了这个 bucket policy :
.
此政策说:允许account2:account-2-user对account1:bucket-1执行任何操作
在Account-2中创建了
account-2-user
给用户这个 inline policy :
.
此策略说明:允许此策略附加的用户对bucket-1执行任何操作
如果存储桶和用户都在同一帐户中,则此策略足以授予对存储桶的完全访问权限 . 但是,由于bucket-1实际上属于不同的帐户,因此第一个策略(上面)也是必需的,因此account-1实际上授予访问权限 . 这意味着第二个策略实际上并未授予对存储桶的访问权限 - 它只是授予
account-user-2
发出访问存储桶请求的权限 . 实际访问权限在第一个策略中授予 .然后我成功使用
account-2-user
的凭据访问bucket-1
:如果存储桶策略授予对对象的访问权限,则无需在对象级别授予访问权限 .
如果通过从名为
user1
或user2
的 role 发出的凭据访问,则您列出的存储桶策略将授予对存储桶的访问权限 . (它是's quite strange that you are giving '用户'角色名称的前缀 . )例如,如果您为Amazon EC2实例分配了名为
user1
的IAM角色,则会自动为其提供访问存储桶的凭据 .如果
user1
和user2
实际上是用户,那么ARN应该是:在这种情况下,访问该用户的凭据时可以访问该存储桶 .
Update:
我认为它实际上需要在两个位置分配权限:
在Account-1中
帐户2中的
*
资源的s3:*
权限,则不需要这样做 . 对于所需的存储桶,它至少需要针对S3的权限 .