我要做的是让(匿名)用户将文件共享到指定的存储桶。但是,它们不应该可以读取已经存在的文件(对于所有我甚至不关心它们自己提交的文件)。应该能够从存储桶中列出/获取对象的唯一帐户应该是存储桶拥有者。
这是我到目前为止所得到的:
{
"Version": "2012-10-17",
"Id": "PutOnlyPolicy",
"Statement": [
{
"Sid": "Allow_PublicPut",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::myputbucket/*"
},
{
"Sid": "Deny_Read",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::myputbucket/*"
},
{
"Sid": "Allow_BucketOwnerRead",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::myAWSAccountID:root"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::myputbucket/*"
}
]
}
以上策略使我能够将文件写入存储桶(例如,通过Android应用程序S3anywhere),但是我无法获取对象,即使是经过身份验证的帐户也无法获取。
你对我如何做到这一点有任何暗示吗?谢谢!
答案 0 :(得分:2)
默认情况下,匿名用户无法读取存储桶内容。所以你的政策应该只有这些行:
{
"Version": "2012-10-17",
"Id": "PutOnlyPolicy",
"Statement": [
{
"Sid": "Allow_PublicPut",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::myputbucket/*"
}
]
}
答案 1 :(得分:0)
策略中的deny语句优先于其他所有语句。默认是拒绝所有不被特别允许的内容,因此您应该只需删除deny语句,所有内容都将以您希望的方式工作。
答案 2 :(得分:0)
政策看起来不错,我想这个问题进入 Principal ,您可以查看它如何用于文档http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-bucket-user-policy-specifying-principal-intro.html。您可能应该使用 AccountNumber-WithoutHyphens