昨天設定了多個 aws organization accounts,但我們還沒有說明為什麼要這樣做
今天會先講 Gruntwork 提出的 Production-Grade Design: multi-account security strategy
賽後文章會整理放到個人的部落格上 http://chechia.net/
Gruntwork 提出的 Production-Grade Design: multi-account security strategy,我們這邊一一講解
IAM policy 管理,不要把 policy 直接綁在 User 上,應該要
透過 root account 創建 child accounts 後,這裡說明各個 account 的設計用途
Security
用來管理 authentication 與 authorization
Security
底下統一管理security
/dev-admin/chechia assume role dev
/admin,透過 aws STS(Security Token Service) 暫時取得 dev/admin 這個 role 的權限來控制 dev
這個做法有非常多好處,但又不會造成工作上的負擔
security
登入。不會一個人有好幾個帳號密碼很煩security
內管理 User,而不用一直切換 account 去調整 IAM Usersecurity
內落實安全性設定,就可以很好的控制所有 account 的存取權限dev
/ stag
/ prod
用來存放 infrastructure 與跑 application
prod
公開給用戶使用shared
裡面放跨 application account 共用的元件
shared
,然後讓其他 account 存取 shared
shared
prod
會使用到 shared
的元件,建議要把 shared
的安全等級當作 prod
來管理,嚴格限制 shared
的存取,以保護 prod
環境的安全很多個 sandbox
account 讓工程師自由的測試功能
sandbox
讓工程師可以做各種實驗,對於促進團隊內部的創新會有非常大的幫助
dev
上做這測試,有可能會影響到其他團隊成員,而覺得綁手綁腳的事情,都可以盡情在 sandbox
上操作sandbox
的帳號設定更嚴格的 billing / cost 設定,避免工程師玩太嗨超過預算sandbox
來達到 100% 開發獨立testing
account 用來測試 infrastructure 的測試
testing
就是用來讓 IaC 做自動化測試的環境,裡面的 infrastructure 都是常常 create + destroy,不會有常駐的服務sandbox
不同的是
testing
是跑自動化 CI/CD pipeline 的測試sandbox
是讓工程師做規模較小的手動測試與開發,因為我們也不希望一堆測試用 infrastructure 散落在 sandbox
裡面,感覺很貴logs
用來收集 log 到單一 account 底下,方便查閱
如果公司規模很大,有多個 business unit 的話,也可以多建幾個 organization,來對應公司組織
我是一個開發工程師(不是 admin),那在 multi-account 下的環境我應該如何工作?
如何存取 aws
security
account 底下
web console 如何 switch role
填入
dev
account 下的 IAM role 身分如同 day03 使用 root account IAM User,來跑 terraform 建立 child accounts 一樣,我們也需要設定 aws-vault,讓我們可以在 local 機上 assume 不同 account role,來使用各個 child account
需要調整 ~/.aws/config
的設定
cat ~/.aws/config
# 這是 root account IAM User 不要再拿來用了
# aws access key 收在本機的 aws-vault 內
[profile terraform-30day-root-iam-user]
region=ap-northeast-1
# 這是 security account (111111111111) IAM User(還沒建立)
# aws access key 收在本機的 aws-vault 內
[profile chechia-security-iam-user]
region=ap-northeast-1
# 這是 dev account (333333333333) IAM Role(還沒建立)
[profile dev-admin]
source_profile = chechia-security-iam-user
role_arn = arn:aws:iam::333333333333:role/dev-admin
mfa_serial = arn:aws:iam::111111111111:mfa/chechia-security-iam-user
上面這些都還沒建立,所以都還不能用,只是先說一下之後要怎麼操作
security 管理員要設定一大堆東西,但工程師使用非常簡單,只要透過 aws-vault 切換就可以在不同 account 下操作 terraform
aws-vault exec dev-admin -- aws sts get-caller-identity
{
"UserId": "xxxxxxxxxxxxxxxx",
"Account": "333333333333",
"Arn": "arn:aws:iam::333333333333:role/dev-admin"
}
aws-vault exec dev-admin -- terragrunt plan
aws-vault exec stag-admin -- terragrunt plan
...
Cloudtrail