AWS Control Tower を使って個人開発で複数アカウント運用
複数の Web サービスを個人で運用するにあたり、ひとつのアカウントではリソースが混ざってしまうため、AWS Organization を使って複数アカウントを管理していました。しかし、全部自分で面倒を見ないといけないので色々見落としがちになります。AWS Control Tower を導入すると、AWS のベストプラクティスに沿って自動的に諸々設定してくれます。Control Tower のメリットや導入手順をご説明します。
AWS Control Tower とは
AWS Control Tower とは - AWS Control Tower
AWS Control Tower は、規範的なベストプラクティスに従って、AWS 複数アカウント環境を設定して管理するための簡単な方法を提供します。AWS Control Tower は、AWS Organizations、AWS Service Catalog、AWS Single Sign-On など、他のいくつかの AWS のサービスの機能をオーケストレートして、1 時間足らずでランディングゾーンを構築します。リソースは、ユーザーに代わって設定および管理されます。
「規範的なベストプラクティス」の中身は主に以下の 2 つです。
- 怪しい振る舞いを予防・発見してくれる(ガードレール)
- 管理下の全アカウントに対して Config、CloudTrail が有効になり、ログが一箇所へ集約される(Audit, Log Archive アカウント)
個人開発では、ダブルチェックしてくれる人が基本的にいないので、自動的に設定ミスを防いでくれるのは大変ありがたいです。例えば、指定リージョン以外の利用を制限する地理的なガードレールは、誤ったリソース作成を阻止してくれます。
AWS Control Tower の導入手順
全体の構成イメージ
- アカウント
- 管理アカウント: 管理者
- 複数のメンバーアカウント(サービス x 環境)
- service1-development
- service1-staging
- service1-production
- ...
- 組織単位(OU)
- Root
- Sandbox
- Security(Audit, Log Archive アカウントが所属)
- Suspended(停止中アカウントが所属)
- Workloads(複数のメンバーアカウントが所属)
- 管理アカウント
- Root
管理アカウントは GMail アドレスで、メンバーアカウントには GMail のエイリアスを使います。
アカウントの構成は、AWS のドキュメント「AWS Control Tower の AWS アカウントについて」を参考にしています。
OU の構成は、AWS のドキュメント「AWS Control Tower ランディングゾーンに対する AWS マルチアカウント戦略」を参考にしています。
Control Tower のランディングページ設定
Control Tower のトップページから「ランディングページの設定」ボタンを押して、設定項目を決めます。
- ホームリージョン: アジアパフィシック (東京)
- リージョン拒否設定: 有効
- ガバナンスのための追加 AWS リージョン: 追加しない
- 基礎となる OU: デフォルト値
- 追加の OU: デフォルト値
- ログアーカイブアカウント: GMail のエイリアス
- アカウントの監査: GMail のエイリアス
設定が完了すると、残り 1 時間ほどで完了しますと表示されるので放っておきます。
AWS Organization の既存 OU・アカウントを Control Tower に移行
「AWS Control Tower」左メニュー「組織単位」から、既存 OU を選択して「OU を登録」ボタンを押します。Control Tower への登録によって何が起きるか説明が書かれているので目を通したら、OU を登録します。少し時間がかかるので放っておきます。
もし登録に失敗した場合は、「1 つ以上の事前チェックに失敗したため、この組織単位を登録できませんでした。」というメッセージが表示され、失敗の理由を CSV 形式でダウンロードできます。
私の場合は、停止済みのアカウントが OU に含まれていたため「このアカウントは停止されており、AWS Control Tower に登録できません。OU からこのアカウントを削除してください。」という理由に遭遇しました。そこで、停止アカウントを「Suspended」OU に集約し、それ以外の OU をすべて Control Tower に登録しました。
SSO の Invitation を受け取り、Control Tower に登録したアカウントのパスワードを変更
Control Tower に追加したアカウントには、「Invitation to join AWS Single Sign-On」というメールが届いています。「Accept invitation」を押してパスワードを決めましょう。
これで、管理アカウントから SSO でメンバーアカウントにログインできるようになります。「AWS Single-Sign-On」左メニュー「ダッシュボード」「設定の概要」「ユーザーポータル URL」から管理アカウントでログインします。すると、どのメンバーアカウントのどの権限かを選ぶだけでログインできます。非常に便利です。
管理アカウントで SSO にログインする際の2要素認証を設定
「AWS SSO」左メニュー「設定」「多要素認証を設定」で「ネットワークとセキュリティ」タブから MFA を追加します。
管理アカウントから SSO でメンバーアカウントにログインする際の権限を狭くする
SSO でメンバーアカウントにログインする際の権限を「AWSAdministratorAccess」から「AWSPowerUserAccess」に変更します。もし管理アカウントが攻撃されて乗っ取られたらすでに終わっているので意味は薄めですが、権限を狭くするに越したことはないので。
「AWS Single-Sign-On」左メニュー「AWS アカウント」から権限を指定したいメンバーアカウントをクリックし、更に「ユーザーまたはグループを割り当て」ボタンをクリックします。「割り当てられたユーザーとグループ」が表示されるので、管理アカウントを選択して「Next」ボタンをクリックします。6 つくらい表示される権限のうち「AWSPowerUserAccess」のみにチェックを入れます。
メンバーアカウントへのログインを禁止する
メンバーアカウントは、SSO の Invitation を受けた際にパスワードを設定はしたのですが、基本的にログインしません。すべてのメンバーアカウントに MFA の設定をするのも面倒です。なので、管理アカウント以外はログインできないようにします。
「SSO」左メニュー「ユーザー」でメンバーアカウントの「ユーザー名」をクリックすると、右上に「ユーザーアクセスを無効化」ボタンが表示されます。このボタンを押してステータスを「無効」にしておきます。
AWS Control Tower の注意点
アカウントの 所属 OU を変更するには複数の手続きが必要
アカウントの所属 OU を AWS Organization から変更したあとに Control Tower でアカウントを表示すると「登録に失敗しました」と表示されます。これは、「AWS Service Catalog」での再登録手続きをすれば解消します。以下手順です。
「AWS Service Catalog」左メニュー「プロビジョニングされた製品」一覧画面で、「Enroll〜」みたいな名前の行を選択して、「アクション」「終了」をクリックする。処理が問題なく終われば、一覧画面から終了した行が表示されなくなります。
もし、終了した行が「汚染」と表示されて消えない場合は、他の行の終了を試してみてください。私の場合は、汚染で消えない行があったものの、汚染されずに消える行から終了していったら最終的にすべての行が消えました。
「AWS Control Tower」左メニュー「アカウント」を見ると、アカウントの状態が「未登録」になっているはずです。未登録で OU を移動したいアカウントを選択して「アカウントの登録」ボタンを押し、「組織単位」ドロップダウンリストから移動先の OU を選択して「アカウントの登録」ボタンを押します。
私が作業中に飲んでいるコーヒーや欲しいマンガなどを集めました。開発・執筆の励みになりますのでクリックして頂ければ幸いです。
<Amazon欲しいものリスト>