はじめに
株式会社 fruor でリードエンジニアをしている yanagidate9 です。
AWS のマルチアカウント対応で Control Tower を導入しましたので備忘録も兼ねて書いていきます。
きっかけ
実は私がこの会社にジョインした時点で単一の AWS アカウント内に本番環境と開発環境が同居している状態でした。この状態では、以下の問題があるため早急にアカウントを環境ごとに分ける必要がありました。
- 開発環境のリソースが本番環境に影響を及ぼす可能性がある。
- セキュリティの観点上、不必要なリソースにアクセスできるのはリスクが高い。
- 支払い情報をアカウントごとに管理することで、コスト管理をしやすくする。
- ただし、支払い請求書は統合し、クレジットも同一のものを使用したい。
対応方針の検討
アカウントを分離する方法としてはスイッチロールを使う方法がまず思い浮かびました(前の会社ではそれだった)。ただし、個人ユーザーを管理するのが面倒なのと、普段あまり利用しないアカウントの情報を忘れてしまうなど問題があり、別の方法がないか調べたり、AWS のサポートに相談したりしました。
そのときサポートの方から提案されたのが AWS Control Tower で、これなら要件を満たすことができ、かつスイッチロールに比べても管理が楽にできそうということで導入することにしました。
AWS Control Tower はマルチアカウント環境の雛形みたいなイメージでこれに則って各アカウントを作成することで、AWS でマルチアカウントを管理することができます。また、IAM Identity Center と連携することで SSO による ID 管理を利用することもできます。
AWS Control Tower には他にもいろいろな機能があるのですが、今回はアカウントの分離と ID 管理を目的としているのでその部分にフォーカスしています。
AWS Control Tower の構成
構成は以下のようになっています。ルート配下に ① 管理アカウント、②Security OU、③Workloads OU を作成します。また、セキュリティ OU 配下には監査(Audit)、ログアーカイブ(Log Archive)を作成しています。
Workloads OU にはアプリケーションの開発・運用環境ごとのアカウントを作成しています。
今回は既存のアカウントにある支払い設定やクレジットをそのまま利用したいため、管理アカウントは既存のアカウントを使用しています。EC2 や RDS などのリソースは Workloads OU 配下のアカウントに後で移行する方針としました。(これは別の機会に書こうと思います。)
AWS Control Tower の有効化
まず事前に各アカウントごとのメールアドレスを用意します。
次に AWS Control Tower を有効化します。気をつけなければいけないのが、AWS Control Tower を有効化したアカウントが管理アカウントになるため、管理用のアカウントを事前に用意しておく必要があります。今回は既存のアカウントを管理用にするため、そのアカウントで AWS Control Tower を有効化します。
有効化では特に複雑な設定とかはないので気長に待ちます。(だいたい 60 分ほどかかります。)有効化できたらワークロードにアカウントを作成していきます。
AWS IAM Identity Center の設定
マルチアカウントへの SSO を連携するため、AWS IAM Identity Center の設定をします。AWS Control Tower のランディングゾーンを有効化すると、Identity Center もデフォルトで自動で設定されるので今回はそれをそのまま使います。
管理用ユーザーが最初に作成されていますが、作業用に個人ユーザーを作成します。グループや許可セットは必要に応じて付与します。
AWS アクセスポータルへのサインイン
AWS IAM Identity Center にて設定したユーザーで AWS アクセスポータルにユーザー名とパスワードを入力してサインインします。
サインインするとセッションが切れるまで AWS アクセスポータルから複数の AWS アカウントに画面上からアクセスできるようになります。
スイッチロールのようにアカウント ID やロール名をいれる必要もないのでアカウント切り替えも楽になります。
おわりに
AWS Control Tower に移行することで、環境ごとのアカウントの分離と SSO による ID 管理を行うことができるようになりました!今後開発メンバーが増えてもユーザーの管理がしやすくなるので運用が楽になるはずです。
インフラの管理周りはついつい後に回しがちですが、スタートアップでは一気に人が増えることもあるので、早めに対応しておくことが未来への貯金になると思っています。
EC2 や RDS などのリソースの移行についても別途記事に書こうと思います。