我在s3.eu-central-1.amazonaws.com/my-bucket-123上有一个桶,这是公开的。我可以通过浏览器访问它,即使我没有通过身份验证;它显示了一个xml页面,其中包含指向我文件的所有链接,即使我在存储桶中有此策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::my_bucket123"
},
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::my_bucket123/*"
}
]
}
我认为这个政策可能会以错误的方式建立。
我想要的是
a)使其不公开
和
b)允许我的python脚本通过API使用它,无论IP地址如何。该脚本使用Amazon的标准cli“aws s3”实用程序和API密钥。
我怎样才能做到这一点?
默认情况下,所有S3存储桶和对象都是私有的。现在,您正在使用带有“Principal”的存储桶策略:{“AWS”:“*”}这使其成为“公共”。通常,如果我们想要访问另一个AWS账户或获得更细化的权限,我们应该使用存储桶策略。如果您尝试从同一帐户访问存储桶,则可能不需要存储桶策略。
因此,为了使其成为私有,您可以通过IAM获得delete the bucket policy并给予必要的许可,例如如果您的脚本使用IAM用户的访问密钥,则应将IAM permission policy(例如S3FullAccess)附加到用户。
此外,"Sid"是策略中使用的可选标识符,因此您可以在IAM / S3存储桶策略中使用任何内容甚至省略它。