2013-07-19 13 views
13

但是在嘗試了所有內容(包括此帖子:Is there an S3 policy for limiting access to only see/access one bucket?)之後,我已經能夠生成僅允許訪問特定桶的用戶策略。限制特定用戶的桶的列表

問題:我無法將存儲桶中的列表限制爲只有一個存儲桶。出於各種原因,我不希望列表顯示除指定的列表之外的任何存儲桶。

我試過各種政策,無濟於事。這是我的最新政策JSON,它儘可能限制操作,但不上市:

{ 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
      "s3:ListAllMyBuckets", 
      "s3:ListBucket", 
      "s3:GetBucketLocation" 
     ], 
     "Resource": "arn:aws:s3:::*" 
    }, 
    { 
     "Effect": "Deny", 
     "Action": [ 
      "s3:ListBucket" 
     ], 
     "NotResource": [ 
      "arn:aws:s3:::acgbu-acg", 
      "arn:aws:s3:::acgbu-acg/*" 
     ] 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
      "s3:*" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::acgbu-acg", 
      "arn:aws:s3:::acgbu-acg/*" 
     ] 
    } 
] 
} 

任何幫助將不勝感激。我開始懷疑這是否可能。

+0

相關:[是否有S3策略限制訪問只看到/訪問一個桶?](https://stackoverflow.com/q/6615168/55075)& [如何讓用戶僅訪問AWS S3中的特定存儲桶](https://devops.stackexchange.com/q/1626/3) – kenorb

回答

29

目前無法將桶列表限制爲只顯示一個桶。

的AWS控制檯依靠ListAllMyBuckets行動來獲得用戶所擁有的水桶名單,但返回的列表無法通過使用亞馬遜資源名稱(或ARN的限制,這就是允許ListAllMyBuckets唯一的ARN是arn:aws:s3:::* )。

這個限制在官方AWS文檔中沒有清楚解釋,但ListAllMyBuckets是服務級API調用(它在REST API中也稱爲GET服務),而不是IAM中的桶級API調用及其關聯的ARN策略是指S3服務不是指向特定的存儲桶。

有關可能的解決方法,請this answer在計算器上:

+0

感謝您的回答。我曾看過那篇文章 - 我真的深入瞭解這一點。我們選擇客戶不能看到他們自己的桶,這是一個恥辱,但是考慮到我們主要關注的問題是最好的選擇。 –

+0

[This answer](https://stackoverflow.com/a/30961920)也有非常有用的信息。 – AndreKR

+0

我們也是這個問題。在我看來,這不應該是我們正常接受的事情。我們運行了幾個項目,如果我想讓員工在進入S3部分時只看到一個桶,那麼這應該是可能的。 – JeremyTM

3

免費的「S3瀏覽器」(這部作品對我的版本3-7-5)允許用戶有相應權限的「添加外部桶」的帳戶,他們所需要知道的是桶的名稱。這使他們能夠「看到」他們的桶和內容(以及他們在桶內被賦予了什麼能力),他們不會看到任何其他桶。

爲了使鬥「玩好」與S3瀏覽器的行爲,我建議用戶或組以下IAM策略:

{ 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:ListBucket", 
     "s3:GetBucketLocation", 
     "s3:GetBucketAcl" 
     ], 
     "Resource": "arn:aws:s3:::acgbu-acg" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:PutObject", 
     "s3:GetObject", 
     "s3:GetObjectAcl", 
     "s3:DeleteObject" 
     ], 
     "Resource": "arn:aws:s3:::acgbu-acg/*" 
    } 
    ] 
} 

這是一個變通的,如果用戶只需要它的好做一次。但是,如果你的用戶正在訪問的存儲桶正在改變很多,那麼這個解決方案並不是很實用。

+0

這個答案的「添加外部桶」部分是「S3瀏覽器」的真正解決方案,我推薦IAM策略部分被精心製作而不是複製。例如,我複製了S3ReadOnly Action的塊;) – ThorSummoner

0

我來這裏尋找如何限制對一個(或一列)用戶的存儲桶的訪問。也許,帖子標題不明確?

無論如何,這似乎有谷歌的青睞,讓我們充實了一點:
如果您需要限制訪問桶一些用戶(S),遵循這些步驟:


首先,獲取您要授予權限的用戶的ID。
這可以通過使用awscli命令aws iam list-users
這些ID是這樣來實現:「AIDAIFKYAC9DNJXM2CRD」,或「AIDAZ362UEKJCJMFFXCL」
請評論,如果它在Web控制檯可用。

一旦您獲得了必須授予訪問權限的ID,請將策略放置在要保護的存儲桶上。
與Web控制檯做到這一點: - >打開S3 - >打開你的水桶 -
>選擇「屬性」選項卡 - >點擊「編輯桶政策」

要使用awscli應用策略,創建該政策的內容的文件,並把它放在你的水桶使用這個命令:
aws s3api put-bucket-policy --bucket NAME_OF_YOUR_BUCKET --policy file:///path/to/policyFile.json
當然,設置YOUR_BUCKET_NAME和文件的,以你的價值觀的路徑,但不刪除該文件:之前你的文件的//前綴名稱


警告:此拒絕策略將覆蓋用戶可能擁有的默認「訪問s3」權限。這意味着你可以用這個來拒絕對你的OWN用戶的訪問。 請謹慎使用!
我甚至害怕你可以使一桶完全無法訪問。
出於好奇,我嘗試訪問我們的帳戶的用戶,我沒有授予訪問權限,實際上不能。
要問這個支持,並希望更新這個答案。

無論如何,我相信你會小心謹慎,所以這是一個示例策略。
只需用您的用戶名和userId替換您想授權訪問的用戶名即可。

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Deny", 
     "Principal": "*", 
     "Action": "s3:*", 
     "Resource": [ 
     "arn:aws:s3:::your-bucket-name", 
     "arn:aws:s3:::your-bucket-name/*" 
     ], 
     "Condition": { 
     "StringNotLike": { 
      "aws:userId": [ 
      "AIDAXAXAXAXAXAXAXAXAX", 
      "AIDAOXOXOXOXOXOOXOXOX", 
      "AIDAXIXIXIXIXIXIXIXIX" 
      ] 
     } 
     } 
    } 
    ] 
} 

對於更具體的東西,或者如果你想使用的,而不是用戶的角色,看到這個AWS post explaining in detail how to restrict access to a buckets

希望這有助於

+0

邏輯向後。除了選擇的用戶之外,您正在限制其他用戶。 –

+0

@Kevin你能精確嗎?除了允許的人之外,否認每個人似乎都是對我安全使用的正常方式。順便說一下,你也可以將這個策略應用到多個桶中。 我對這個atm沒有深入瞭解,但是如果我做錯了什麼,我會很感激更多的細節。 – Balmipour

+0

原始海報詢問用戶策略。這將附加到特定用戶,而其他人可能有更多的leineint政策(或沒有政策)適用於他們。一個典型的用例就是您只想限制一個用戶的地方,他們的憑證需要在最高信任組之外共享。用戶政策是實現這一目標的途徑。 –

0

樓主問的用戶策略。這將附加到特定用戶,而其他人可能有更多的leineint政策(或沒有政策)適用於他們。一個典型的用例就是您只想限制一個用戶的地方,他們的憑證需要在最高信任組之外共享。用戶策略是這樣做的。

+0

感謝發佈。可能是什麼樣子的例子? –

+0

@cale_b對不起 - 我不是說我的評論被置於答案。我在最後一個答案的評論中回答了一個問題。所以,在這種情況下,它可能更有意義。我同意你接受的答案,你不能限制看到的桶的列表。這是全部或沒有。但是,您可以將桶內對象的列表限制爲特定的桶。如果你想要一個例子,我可以在這裏分享。 –

相關問題