AWSアカウント単位を考える(マルチアカウント)
AWSでアカウント作成するのに
- AWSアカウント
- IAM
単位がありますが、全てのシステムを
一つのアカウントで管理するべきか
1システム1アカウントにするのか。
本番とdevを含めて全て別にするのか迷う所です。
色々検討した結果
自分の場合マルチアカウントで運用するのがベストと言う事に辿りつきました。
そもそも公式ではAWSではセキュリティなどの観点から、システムや本番/検証/開発環境ごとにAWSアカウントを分離することが推奨されてるようです。
またマルチアカウントの導入に特に「コストの明確化」これが外せない要件でした。
自社プロダクト開発なら一個でもよいのですが、自社と他社案件で切り離す場合はマストになる要件です。
超簡単なアカウント構成として
・運用する会社のアカウント
・プロジェクトの本番
・プロジェクトの開発
の3つアカウントを作成して管理となります。
アカウント管理してOrganizationsを使用する
と思ったのですが、AWS organizationsよりAWS ControlTowerの方が
安全にベストプラクティスの形式までもっていってくれるぽです。
- ベストプラクティスに従って自動でマルチアカウント環境を作成してくれる
- デメリットは自動でやってくれることが多すぎて、必要のないものまで作成される可能性があること
下記参考
https://www.ragate.co.jp/blog/articles/6766
既存アカウントをcontroll towerに追加する
既にあるアカウントをcontroll tower配下に置いて管理したい場合もあるので、その場合の手順になります。
まずは、親アカウントが操作できりるように、配下アカウント(子)にアクセスして親からのアクセス権限を付与します。
ロールにAWSControlTowerExecutionを付与して、親のIDで登録します。
これで親のアカウントから子のアカウントが操作できるようになります。
次に、controll towerで既存アカウントの登録をします。
rootユーザーでは操作ができない(下記エラーが発生します。)ので、IAMユーザーを親で発行します。
作成したIAMユーザーでログインして操作すれば可能です。
「OU を登録する前に、IAM ユーザーを AWS Service Catalog ポートフォリオに追加します。」
IAMユーザーに「Service Catalog」内のポートフォリオへのアクセス権限を与える事で作成できました。
詳しくは下記の記事が参考にりました。
https://dev.classmethod.jp/articles/resolve-no-launch-paths-found-for-resource-on-control-tower/
マルチアカウントでドメインはどこで持つの問題
マルチアカウントでのドメインを所持する場所ですが、
各システムの本番環境でドメインを取得するのがよいです。
理由として
- 他の担当者が他のシステムのドメインをいじれる事の防止
- controll towerタワーの親アカウントは、権限付与と請求関係とする役割の分離
- システムを開発会社が変わり移譲する場合も各システム本番で持っていた方が楽(親会社から子会社)
という事が上げられます。