3
我現在有有像這樣一個政策的IAM角色:使用boto庫,我可以避免在S3中的基礎存儲桶上授予列表權限嗎?
{
"Version":"2008-10-17",
"Statement": [
{
"Effect":"Allow",
"Action":["s3:ListBucket"],
"Resource":[
"arn:aws:s3:::blah.example.com"
]
},
{
"Effect":"Allow",
"Action":["s3:GetObject", "s3:GetObjectAcl", "s3:ListBucket", "s3:PutObject", "s3:PutObjectAcl", "s3:DeleteObject"],
"Resource":[
"arn:aws:s3:::blah.example.com/prefix/"
]
}
]
}
寶途似乎需要ListBucket允許存在的水桶做get_bucket呼叫的根源。如果我刪除了Statement數組中的第一個散列,get_bucket('blah.example.com')將失敗。這裏的錯誤文本:
*** S3ResponseError: S3ResponseError: 403 Forbidden <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>xxxx</RequestId><HostId>yyyy</HostId></Error>
有什麼辦法,同時仍然使用博託限制桶的上市在一定前綴(例如「前綴/」)?
UPDATE
爲了使一切工作正常,我用了以下政策:
{
"Version":"2008-10-17",
"Statement": [
{
"Effect":"Allow",
"Action":["s3:ListBucket"],
"Resource":[
"arn:aws:s3:::blah.example.com"
],
"Condition":{
"StringLike":{
"s3:prefix":"prefix/*"
}
}
},
{
"Effect":"Allow",
"Action":["s3:GetObject", "s3:GetObjectAcl", "s3:PutObject", "s3:PutObjectAcl", "s3:DeleteObject"],
"Resource":[
"arn:aws:s3:::blah.example.com/prefix/*"
]
}
]
}
你仍然必須使用validate=False
參數的get_bucket
方法,但它允許內上市字首。
不幸的是,列表(prefix ='prefix /')似乎仍然失敗。 – 2012-07-13 21:53:06
我明白了。這實際上是一個S3權限問題,而不是一個博託問題。那麼,把它稱爲一個問題也許是不公平的。這只是它的工作方式。我認爲沒有辦法解決這個問題,但我會再調查一下,如果發現任何問題,請回復。 – garnaat 2012-07-13 22:28:37
我找到了。第二個權限的資源需要是「arn:aws:s3 ::: blah.example.com/prefix/*」。不同之處在於*末尾。謝謝您的幫助。 – 2012-07-13 23:00:14