我试图创建一个存储桶并为另外两个帐户设置完全权限。首先,我在存储桶权限中添加了这些帐户。文件仍然无法访问。然后,我尝试了一个策略。我为每个帐户创建了两个角色以在其中指定它们。这是政策:
{
"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 控制台自行下载它们。
最佳答案
为了演示这是如何工作的,我执行了以下操作:
bucket-1
在 Account-1 .
{
"Id": "Account1Policy",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowBucketAccess",
"Action": "s3:*",
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bucket-1",
"arn:aws:s3:::bucket-1/*"
],
"Principal": {
"AWS": [
"arn:aws:iam::222222222222:user/account-2-user"
]
}
}
]
}
此策略说:允许 account2:account-2-user 对 account1:bucket-1 执行任何操作
account-2-user
在 Account-2 .
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowBucket1Access",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucket-1",
"arn:aws:s3:::bucket-1/*"
]
}
]
}
此策略说:允许附加此策略的用户对bucket-1 执行任何操作
如果存储桶和用户都在同一个账户中,则此策略足以授予对存储桶的完全访问权限。但是,由于bucket-1 实际上属于不同的账户,因此还需要第一个策略(以上),以便account-1 实际授予访问权限。这意味着第二个策略实际上并没有授予对存储桶的访问权限 - 它只是授予对
account-user-2
的权限。发出访问存储桶的请求。真正的访问权限是在第一个策略中授予的。然后我成功地使用了
account-2-user
的凭据访问 bucket-1
:$ aws s3 cp foo.txt s3://bucket-1 --profile account-2-user
upload: ./foo.txt to s3://bucket-1/foo.txt
关于amazon-web-services - 设置权限后,为什么我无法从 s3 存储桶下载文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49587775/