今天要使用 terraform 設定 AWS account structure
賽後文章會整理放到個人的部落格上 http://chechia.net/
--
AWS account structure 是 AWS IAM 提供的 feature 之一,可以讓用戶從一個 account login,然後透過授權操作其他 account 的元件。
然而有這個 feature 不代表用戶就要買單,有實際需求我們才來用 feature。使用 account structure 的理由是什麼?
AWS 官方 whitepaper: 使用 multiple aws account 的好處
AWS 官方的 organization best practice
AWS 官方 OU 管理的 best practice
Gruntwork Doc 建議的 IaC best practice 中的 aws account structure,提到三個主要的目的
從實務上的經驗,有以下狀況就考慮要拆分 aws account
iThome DevOpsDay 有一個聽眾聽完2022 DevOpsDay PaC for IaC 演講 後跑來找我,他問說:
講師你好,我們 terraform 常常誤刪東西,deploy dev / stag 結果 prod 壞掉(汗
如果不是技術的問題,是人的問題,不知道有沒有方法解?
要治本還是要加強內部教育訓練,很基礎的重大錯誤是很難用技術擋的
但短期要治標,可以
也許你們的生活會快樂一點(好血淚)
我們會根據 Gruntwork Landing Zone Guide 的文字敘述來進行今天的 workshop
CAUTION
You must be a Gruntwork subscriber to access the Gruntwork Infrastructure as Code Library.
是的,這份 Gruntwork Landing Zone Guide 內部的範例有使用許多 gruntwork-io 的 private repository,這部分是需要付費。gruntwork subscription 一個月 $795 起跳,有興趣的朋友可以參考 Gruntwork subscription checkout
我們這篇 workshop 並不使用 Gruntwork 的付費功能,所有 private repository 我們就會使用其他開源的 modules 來替代,例如使用 aws + terraform team 官方維護的 aws modules
由於缺少部分 repository 的內容,這份 Gruntwork Landing Zone Guide 會常常看到很多 github external link 是 404 not found,表示是 private repository。看起來會有點不舒服,但沒關係我們就見招拆招自由發揮。
repository 的內容可以直接參照 Gruntwork Guide 的內容
本次 workshop 我們使用的 repository https://github.com/chechiachang/terragrunt-infrastructure-live-example
root account 是整個 account structure 最上層的 account,創世 account。由於是創世 account,權限也是最大,因此會需要加上許多限制:
我們使用 root account 的最後一件工作,就是建立一個 IAM User 作為 admin,之後使用這個 IAM User 操作。文件與步驟在此
接著也是要鎖住 root account 的 IAM User
依照 gruntwork guide 接下來需要設定底下的元件
CAUTION
You must be a Gruntwork subscriber to access terraform-aws-service-catalog.
由於 terraform-aws-service-catalog 是 private repository,需要付費訂閱才能使用,所以我們無法取得裡面的內容
為了避免這個 workshop 卡在這裡,我們就來自幹這些 module 吧XD
NOTE: Gruntwork 的 security module 有其 enterprise solution 的經驗在裡面,其實公司有預算還是相當值得參考的。只是我們 workshop 為了避免大家破費,先當一回免費仔。
寫到這邊就 6000 字了,還沒開始碰 terragrunt
明天會繼續今天的工作,把 aws account / iam policy / permission 配好