元茹でガエルなエンジニアの記録

ちょっとやってみたことや考えたことなどを不定期に書き残していきます

AWSでのマルチアカウントを攻略する

※書きかけの記事でしたが、完全に仕上げきる前に、ControlTowerが東京リージョンでローンチされたのでニーズは無くなったかも知れません。。。※

AWSを使い込んでいくと、開発案件ごとや環境ごと、技術検証や学習用のラボ環境など、複数のアカウントを使いわけたくなります。というか、分けることが推奨されています。 そんなマルチアカウント環境を構築するにあたり、いろいろ情報が散らばって存在しているので、整理しておくことにしました。

とても参考にさせて頂いたサイト

15分で教えるAWSの複数アカウント管理 - Qiita

Organizationsでイチから頑張るか、ControlTowerを使うか

マルチアカウント環境構築にあたり、ControlTowerの採用を考えた。マルチアカウント環境に必要な一式やセキュリティ対策のサービスとルール含めて一括構築してくれて、マルチアカウントの全リージョンを統合してダッシュボード化までできる。 本当はスゴくスゴく使いたかったのですが、東京リージョンが未対応だったので採用を見送り、自力で頑張ることにしました。

※ 2020.06追記 ControlTowerが既存のOrganizationsに対してあとから有効にできるようになりました。あとは東京リージョンに対応されれば移行しようと考えています。

※2021.04 さらに追記 しばらく仕事上でAWSから離れていたのですが、気付いたらControlTowerが東京リージョンで利用可能になっていました!→ https://aws.amazon.com/jp/blogs/news/aws-control-tower-tokyo/ すなおにこちらを利用するのが楽で良いと思います。

ControlTowerの対応リージョンとは何か

東京リージョン未対応って、結局何が出来て何が出来ないのかよく分からなかったので、実際にアカウント作って確かめました。

ControlTowerを使う場合、ControlTower自体が使ういくつかのサービスや監査ログのS3をどのリージョンに構築するか、という意味でリージョンを決める必要があります。 ここで、東京リージョンは選べないという事になります。 まあこれだけならControlTowerをバージニアとかで立ち上げて使えばいいか、と考えていました。しかし、大事なのは次。 ControlTowerを開始すると、AWS Configの必須ルールなどが適用されるのですが、これが東京リージョン含む"未対応リージョン"には展開されません。 これはツラい。というか使う意味が無くなった。 というわけでチマチマと自分で構築することにしました。修羅の道です。

このへん、AWSさんにはもっと頑張って欲しい。正直、プロダクト単位で環境を分離したいときにわざわざマルチアカウントにしないといけないのが、そもそもいけてない。ここだけはAzureのほうが使いやすい。確かGCPも一つのアカウントで複数の独立したクラウド管理できるし。AWSさん、なんとかなりませんか。頼みます。

アカウント統制やセキュリティ対策観点で使いたいサービス

  • Organizations
  • GuardDuty
  • ConfigとConfig Aggregator
  • CloudTrail
  • SSO
  • Securityhub

サービスの統合度合い

これがまた統一されていなくて、ややこしい。 基本的にそれぞれのサービスは、アカウント単位かつリージョン単位での管理がまずベースにある。 そして、サービスによって、マスターアカウントとメンバーアカウントの関係を構築して集中管理できるものや、Organizationsの組織に対して一元管理できるものなどがある。せっかくOrganizationsあるんだから、OU単位で扱えるように統一して欲しいです。

Security Hubでできること

  • Amazon GuardDuty、Amazon Inspector、Amazon Macie AWS Identity and Access Management (IAM) Access Analyzer、AWS Firewall Managerなどのアラートや検出結果を一元管理できる
  • マスターアカウントとメンバーアカウントによる集約
  • Security Hubを使うには、そのアカウントでAWS Configが有効になっている必要がある。

Organizationsで使えるサービス

  • CloudTrail
    • マスターアカウントで組織のすべてのアカウントのログを記録できる
  • Config
    • アグリゲーターを使うことで組織全体のConfigデータを統合して可視化できる
    • アグリゲーターにより、単一アカウントの複数リージョンのデータを集約することも出来る
    • マルチアカウントに対してルールを集中的にプロビジョニングすることはできない。Configデータの収集のみ。ルールは個別にプロビジョニングする。
    • ルールの適合結果をメールなどで通知をしたいときは、ConfigからSNSトピックに投稿することができる。ただし、全部のタイミングで通知が発生するので、OKかNGかの判定結果に変化があったときだけ通知するようなニーズであれば、CloudWatch Eventsを使い、そこからSNSトピックに投稿するほうが便利。

※GuardDutyもOrganizationsでの一元管理に対応されました。 Amazon GuardDuty が、AWS Organizations のサポートでマルチアカウントの脅威検出を簡素化

最後に

まだまだ書き足りないのですが、いったんここまで。