前陣子遇到一個這樣的需求, 外部的USER想用傳輸軟體上傳一些圖檔到 S3 ,做為靜態網站使用。直覺上這不是什麼難事, IAM 權限設定一下即可。
但是實際研究了一下, 無論IAM Policy如何設計, 對於S3 第一層的Bucket 列表, 只有兩種選擇, 全部列表出來或是全部隱藏. 並不能列出某一個特定Bucket 給USER看, 這造成兩個問題:
- 我不想讓USER(可能是外部USER甚至包商等等), 從S3 Bucket列表名稱裡,猜到公司的一些資訊.
- 有些第三方的S3上下傳軟體,依賴著這個List功能, 如果你隱藏了S3 Bucket List, 軟體會判定登入有問題而拒絕進一步操作.
AWS 官方Forum也證明了這個限制(2017/03)
使用 AWS Organizations
AWS Organizations是在2016年底 re:Invent 推出的新功能, 簡單來說, 就是管理AWS多帳號的功能。這邊指的多帳號,並不是IAM帳號,而是AWS Root Account. 當公司組織很大, 可以使用這功能開幾個帳號給下面單位使用, 最後可以合併帳單到同樣一張信用卡上付賬.
為何使用這個功能? 理由很簡單: 新的AWS帳號,也代表一個全新、乾淨的AWS使用環境.
使用方式也很簡單:
- 使用 AWS Organizations 開一個新的帳號
- 在新的環境, 開一個新的IAM USER, 並且規劃權限較小的S3 使用權限.
- 把 IAM 帳密交給USER, 新的Root Account仍由自己保管.
這樣就大功告成.很簡單
如何使用AWS Organizations開新帳號
從AWS Console登入後進入AWS Organizations, Create帳號即可. 至於權限、組織設計則跳過.
這邊有點奇怪, 填了Name & Email 卻找不到 Password要填哪? 請使用Forget Password功能將密碼取回(這設計有點怪怪的..).
適用場景
除了前言說的, 不希望讓外部USER存取不必要的資訊之外. 我覺得像是出去講課,需要DEMO的場合也很適合這樣處理.