簡體   English   中英

如何以boto編程方式檢查Amazon S3權限?

[英]How can I programmatically check Amazon S3 permissions with boto?

我們在Amazon S3上的桶中有一個濃密的樹,有大量文件。 我剛剛發現,雖然有些文件有兩個權限條目,如果單擊AWS管理控制台中的文件,則會顯示屬性 - >權限,一行是“所有人”而另一行是某個特定用戶,其他文件只有一個該用戶的條目。 結果,我們在使用boto或curl將這些文件下載到Amazon EC2實例時遇到問題。

我需要做的是查看存儲桶中的所有文件並檢查它們。 我知道如何獲取前綴的完整密鑰列表。 我可以使用boto來提取密鑰的權限嗎?是否有一種標准的方法來測試這些權限是針對每個人還是某個特定的人,以及它們是什么?

此外,一旦我確定某個密鑰是否具有限制權限,我是否可以通過向“所有人”添加讀取權限來以編程方式更改它們?

謝謝

下面是一些使用boto的Python代碼,它可以查看存儲桶中的所有密鑰。 如果密鑰不允許“everyone”讀取密鑰的內容,它將為該密鑰添加public-read權限:

import boto

all_users = 'http://acs.amazonaws.com/groups/global/AllUsers'
conn = boto.connect_s3()
bucket = conn.get_bucket('mybucket')

for key in bucket:
    readable = False
    acl = key.get_acl()
    for grant in acl.acl.grants:
        if grant.permission == 'READ':
            if grant.uri == all_users:
                readable = True
    if not readable:
        key.make_public()

此代碼尚未經過全面測試,因此您應該先嘗試一下。 另外,要明確這樣做的最終結果是使任何人都可以讀取桶中的所有對象。 另外請記住,此腳本正在獲取存儲桶中每個對象的當前ACL,因此,如果有數百萬個對象,那么數百萬個請求可能會花費大量時間並且會產生一些相關成本。

另一種方法是只對存儲桶中的每個密鑰調用make_public() ,而不管它是否是當前的ACL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM