我可以使用此策略将文件从组Z中的用户A上传到我的存储桶。组B中的另一个用户也在组Z中,因此具有相同的策略。但是,当我以B身份登录到AWS管理控制台时,我无法读取该文件。我特别困惑,因为根据策略模拟器,这个策略(加上管理员访问用户B(应该完全允许B查看有问题的文件。
相反,用户B只得到Access Denied
。
帮助?我觉得我错过了一些非常简单的东西。
我的完整(如果经过编辑(组策略是:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::my-bucket"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::my-bucket/*",
"arn:aws:s3:::my-bucket"
]
}
]
}
我的自动生成bucket策略是:
{
"Version": "2012-10-17",
"Id": "S3-Console-Auto-Gen-Policy-1645709424074",
"Statement": [
{
"Sid": "S3PolicyStmt-DO-NOT-MODIFY-1645709423946",
"Effect": "Allow",
"Principal": {
"Service": "logging.s3.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
我的bucket已打开阻止公共访问。
这里的问题是,即使您登录到AWS控制台,您的身份验证也不会扩展到通过https://mybucket.s3.region.amazonaws.com/myfile.png
上对象的简单HTTP GET下载S3对象,就像您将该URL粘贴到新选项卡中一样。
相反,您可以生成并使用S3预签名的URL来下载对象。预签名的URL是有时间限制的,并且使用您的密钥进行签名,因此它包括下载对象所需的所有身份验证。
您可以使用S3控制台、awscli或任何AWS SDK生成预先签名的S3 URL,例如:
aws s3 presign s3://mybucket/myfile.png
请注意,预签名URL的行为有点像承载令牌。无论谁拥有预先签名的URL,都可以使用它下载对象,直到它过期。
您还可以使用awscli(通过适当的身份验证(下载单个对象,甚至整个对象桶。