我最近創建了一個新的AWS賬戶(我們稱之爲「賬戶A」),並在該賬戶中創建了一個S3存儲桶(我們稱之爲「bucketa」),上傳foo文件。文本。繼advicefromtheinternet,我成立了我認爲是最寬鬆的水桶政策可能(應該允許任何用戶的任何類型的訪問):無法使用boto訪問公有s3存儲桶中的文件
{
"Version": "2012-10-17",
"Id": "PolicyABCDEF123456",
"Statement": [
{
"Sid": "StmtABCDEF123456",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucketa/*",
"arn:aws:s3:::bucketa"
]
}
]
}
帳戶A創建IAM用戶後(」身份&訪問管理 - >用戶 - >創建新用戶「並創建一個用戶」爲每個用戶生成訪問密鑰「並將該用戶的憑證存儲在〜/ .boto中,使用boto S3接口的簡單腳本可以訪問上傳的文件foo.txt:
import boto
conn = boto.connect_s3()
b = conn.get_bucket("bucketa", validate=False)
k = boto.s3.key.Key(b)
k.key = "foo.txt"
print len(k.get_contents_as_string())
# 9
然後我創建了一個新的AWS賬戶(我們稱之爲「賬戶B」),並遵循相同的步驟,將IAM憑證存儲在.boto文件中並運行相同的Python腳本。
Traceback (most recent call last):
File "access.py", line 7, in <module>
print len(k.get_contents_as_string())
File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 1775, in get_contents_as_string
response_headers=response_headers)
File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 1643, in get_contents_to_file
response_headers=response_headers)
File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 1475, in get_file
query_args=None)
File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 1507, in _get_file_internal
override_num_retries=override_num_retries)
File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 343, in open
override_num_retries=override_num_retries)
File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 291, in open_read
self.resp.reason, body)
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>7815726085F966F2</RequestId><HostId>EgFfldG4FoA5csuUVEKBq15gg3QQlQbPyqnyZjc2fp5DewlqDZ4F4HNjXYWQtBl5MUlSyLAOeKA=</HostId></Error>
爲什麼帳戶B無法儘管它非常寬容的政策鬥訪問bucketa:然而,在這種情況下,執行線print len(k.get_contents_as_string())
當我得到一個403錯誤?我是否需要設置其他權限以啓用其他AWS賬戶的公共訪問權限?
注:我已經用在兩條線「bucketb」取代了同一個桶政策(「bucketa」創建從帳戶B的S3存儲bucketb排除了B帳戶中的.boto文件的罪魁禍首憑據無效);在這種情況下,我可以使用帳戶B的憑據訪問bucketb,但使用桶A的憑據時會得到相同的403錯誤。