簡體   English   中英

如何構建用於訪問控制的 s3 存儲桶

[英]How to structure s3 bucket for access control

我知道這可能是一個微不足道的問題,但我認為以正確的方式做事很重要。

我們有一個現在有 80 個用戶使用的內部應用程序,我們想將我們的存儲遷移到 s3。

我們有 3 個環境:開發、測試、生產,我在考慮這樣的結構:

  • 開發
    • 用戶-1
    • ...
    • 用戶-n
      • 資產(個人資料圖片,其他公共數據)
      • 生成的文件(私人)
  • 測試
  • 產品

在這部分我們有 3 個用戶權限(ROLE_USER、ROLE_TEAMLEAD、ROLE_ADMIN)。 具有用戶角色的人應該只能訪問他/她的對象,具有團隊負責人角色的人也可以訪問其團隊的所有文檔,而具有管理員角色的人可以訪問所有文檔。

設計這個最安全的方法是什么,這樣當我在一個對象和一個用戶 ID/用戶名之后進行調用以取回屬於該人的所有對象時。

這里應該是創建組的好主意(如果團隊負責人離開,或者如果用戶更改他/她的團隊負責人,也應該很容易更新)並且還為我們所有的用戶擁有 aws 帳戶? 任何想法/好的材料都會有所幫助,謝謝。

如果您的用戶是 IAM(或 Cognito)用戶,則您擁有的結構無法通過靜態策略實現訪問控制目標。 如果您能夠在成員更改時更新 IAM 策略,那么該結構就可以工作。

普通用戶或管理員的 IAM 策略條件很容易滿足目標。 存儲桶策略允許每個用戶訪問他們自己的存儲桶,允許 S3 操作以密鑰前綴為他們的用戶名( ${aws:Username}策略變量)為條件。 可以通過管理員組的組策略來授予管理員訪問權限。

問題是你有團隊領導角色。 在這里,您有兩個訪問維度:用戶和角色,但文件結構只包含其中一條信息——您無法僅通過對象結構來確定哪些對象應該屬於特定的團隊領導角色。 也就是說,您無法在不知道該組中所有用戶名的情況下構建根據要求授予訪問權限的組/存儲桶策略(因為目錄僅按用戶組織)。

如果您通過將用戶嵌套在團隊目錄中來組織結構,則可以解決此問題:

  • 團隊1
    • 用戶1
    • 用戶2
  • 團隊2
    • 用戶3
    • 用戶-N

然后,您可以為每個 teamlead 組應用組策略,以允許訪問相應團隊的團隊目錄下的對象。 當團隊領導或團隊成員發生變化時,IAM 政策不必改變。 這也與Controlling access to a bucket with user policies 指南一致。

但是,這意味着用戶和團隊之間存在嚴格的一對一關系,而您可能並非如此。 而且,如果用戶更換團隊,他們將需要移動 S3 中的目錄。

或者,使用您建議的結構,您可以在某一時刻基於組成員身份生成 IAM 策略,在策略中指定屬於特定團隊的所有用戶目錄。 但是,每當組成員發生變化時,策略也必須隨之改變。


另外,您可能還想考慮為不同的環境使用單獨的存儲桶而不是頂級目錄。 這樣,您就可以針對每個環境獨立有效地測試影響整個存儲桶的更改(例如應用存儲桶策略)。

暫無
暫無

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

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