无法访问 S3 对象,即使所有迹象都表明我应该包括策略模拟器。为什么?
Cannot access S3 object even though all indications are that I should including policy simulator. Why?
我可以使用此策略将文件从组 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"
]
}
]
}
我自动生成的存储桶策略是:
{
"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/*"
}
]
}
我的存储桶已启用阻止 Public 访问权限。
这里的问题是,即使您登录到 AWS 控制台,您的身份验证也不会扩展到通过 https://mybucket.s3.region.amazonaws.com/myfile.png
处对象的简单 HTTP GET 下载 S3 对象,如果您将 URL 粘贴到新标签页中。
相反,您可以生成并使用 S3 pre-signed URL 来下载对象。 pre-signed URL 是 time-limited 并使用您的密钥签名,因此它包含下载对象所需的所有身份验证。
您可以使用 S3 控制台、awscli 或任何 AWS SDK 生成 pre-signed S3 URL,例如:
aws s3 presign s3://mybucket/myfile.png
请注意,pre-signed URLs 的行为有点像不记名令牌。谁拥有 pre-signed URL 就可以使用它来下载对象,直到它过期。
您还可以使用 awscli(通过适当的身份验证)下载单个对象,甚至整个对象桶。
我可以使用此策略将文件从组 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"
]
}
]
}
我自动生成的存储桶策略是:
{
"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/*"
}
]
}
我的存储桶已启用阻止 Public 访问权限。
这里的问题是,即使您登录到 AWS 控制台,您的身份验证也不会扩展到通过 https://mybucket.s3.region.amazonaws.com/myfile.png
处对象的简单 HTTP GET 下载 S3 对象,如果您将 URL 粘贴到新标签页中。
相反,您可以生成并使用 S3 pre-signed URL 来下载对象。 pre-signed URL 是 time-limited 并使用您的密钥签名,因此它包含下载对象所需的所有身份验证。
您可以使用 S3 控制台、awscli 或任何 AWS SDK 生成 pre-signed S3 URL,例如:
aws s3 presign s3://mybucket/myfile.png
请注意,pre-signed URLs 的行为有点像不记名令牌。谁拥有 pre-signed URL 就可以使用它来下载对象,直到它过期。
您还可以使用 awscli(通过适当的身份验证)下载单个对象,甚至整个对象桶。