AWSでのマルチアカウントについて調べてみたのでまとめてみました。
誰かの参考になれば幸いです。
- AWSで実際に開発していく時にはマルチアカウントでやっていくんでしょ?
でもよくわからないんだよなぁ - マルチアカウントだとどうやって認証とかするんや?
そもそもどうやって管理・運用してるんや?
よくわからん…
- AWSでのアカウント運用のベストプラクティスを自分なりにまとめてみる
- マルチアカウント運用についてまとめる
- セキュリティとしてガードレールを設置する場合に使用するサービスと内容をまとめる
結論
AWS Control Towerを使おう!
Control Towerで作成できるLanding Zoneは、ベストプラクティスに基づいたマルチアカウント環境のセットアップを行ってくれます!
しかも60分待つだけでできるとのこと!
参考⇒AWS マルチアカウント管理を実現するベストプラクティスとは ?、スタートアップにおけるマルチアカウントの考え方と AWS Control Tower のすゝめ
とはいっても、何がベストプラクティスで具体的にどんな設定がされるのかは把握しておいた方が良いのでそれをまとめてみます!
AWS アカウントの管理と分離
まずは、AWSのWell-Architectedフレームワークを参照してアカウント管理のベストプラクティスを確認してみます。
セキュリティの柱のAWSアカウントの管理と分離では以下の5項目が挙げられています。
この5項目から必要な要素を考えていきます。
- アカウントを使用してワークロードを分ける
- AWSアカウントを保護する
- アカウントを一元的に管理する
- 制御を一括設定する
- サービスとリソースを一括設定する
アカウントを使用してワークロードを分ける
Well-Architentedフレームワークでは、環境ごとにアカウントレベルで分離を強く推奨しています。
アカウントの分離をおこなうということは、いわゆるマルチアカウントで運用するということを意味します。
いったいなぜマルチアカウントを推奨しているのでしょうか?
メリット・デメリットを自分なりにまとめてみました
マルチアカウントで得られるメリット
メリットは以下の点です。
- 環境の分離
- コストの明確化
- 制約の緩和
環境の分離
環境をアカウントで分けることで、操作ミスなどによってサービスに影響が出ることを防ぐことができます!!
例えば、提供するサービスや、開発用・検証環境用・本番環境用毎にアカウントを分けるということです。
また、開発環境と本番環境では要求されるセキュリティや認証などが異なるはずです。
開発環境は開発者であれば気軽にアクセスできるようにするが、本番環境は認証が複数必須かつ読み取りアクセスのみなどです。
もそ、1つのアカウント内で複数の環境が混在してしまうと、設定が煩雑になり運用コストが増加することが予想できます。
権限の面で見ると、IAMの設定が楽になりますね。
1アカウント内だと、どのリソースを操作できるか明示していくことになりますが、サービスに機能が追加されたりするたびに見直す必要がでてくるので面倒くさいですよね。
このアカウントはこのサービスのリソースしかない!というのであれば、考慮する点が減少するので管理が楽になります!
コストの明確化
サービスAはアカウントA、サービスBはアカウントBと分けていると、アカウントの単位がサービスの単位になります!
コスト配分タグを利用することでコストを見ることができますが、タグの運用・管理戦略を厳密に定めないとぐちゃぐちゃになることが容易に想像できます。
アカウントを分離してしまえば、そのアカウント内でのタグ戦略だけになるので運用コストが下がることが予想されます。
制約の緩和
AWSでは、1つのアカウントで作成できるリソースの上限(サービスクォータ)が存在します。
緩和申請はできますが、環境を複数のアカウントで分けておけば上限に達する可能性が低くなります。
マルチアカウントでの課題
マルチアカウントを使えば課題は何もなくなるのか?
いいえ。
もちろん課題はあります。
- 複数のアカウントの維持・管理コスト
- 社内のコンプライアンスに則った設定でアカウントの発行コスト
複数のアカウントの維持・管理コスト
複数のアカウントを利用する場合、それぞれのアカウントを適切に運用・管理していく必要があります。
1つのアカウントであれば1つのアカウント内で完結するものが、マルチアカウントでは全アカウントに展開する必要がでてきます。
しかし、これはAWS Organizationsで解決することができます。
AWS OrganizationsではAWSアカウントの作成と管理、作成後の制御を自動化することができるためです。
社内のコンプライアンスに則った設定でアカウントの発行コスト
アカウントはただ発行すれば良いものではありません。
操作ログをちゃんと記録するようにしたり、認証を追加したり、請求情報をまとめたりなど設定しなければならないことが多く存在します。
これらの設定にはコストがかかります。
しかし、これもAWS Organizationsで解決することができます。
AWS OrganizationsではAWSアカウント作成後の制御も自動化することができるためです。
具体的には、SCP(サービスコントロールポリシー)を利用することでアカウントやグループごとに制限を課したり、認証にMFAを強制したりすることが可能です。
AWSアカウントを保護する
AWSのアカウントを保護するとは具体的に以下のことになります。
- ルートユーザの保護と使用の回避
- 連絡先情報の最新化
- MFAの有効化
- 認証情報へのアクセスをモニタリング
これらについては、AWS Organizationsの管理アカウントのベストプラクティスとメンバーアカウントのベストプラクティスがより参考になります。
- 管理アカウントは必要とするタスクにのみ使用する
- 複雑なパスワードを使用する
- MFAを有効にする
- 連絡先情報に電話番号を追加する
- 誰がアクセスできるかを確認、追跡する
- ルートユーザーの認証情報の使用プロセスをドキュメント化する
- ルートユーザーへの認証情報へのアクセスをモニタリングする
- SCPを使用して、メンバーアカウントのルートユーザーで行えることを制限する
複雑なパスワードや、MFAを使用するなど当たり前の内容が多いですね。
注目すべきは、管理アカウントは必要とするタスクにのみ使用するです。
管理アカウントは必要とするタスクにのみ使用する
AWSリソースCloudTrailの追跡とログを保持すること以外は、全て他のAWSアカウントで行うべきです。
管理アカウントはOrganizationsのSCPが使えないため、SCPが適用できる他のAWSアカウントで保持すべきというのがベストプラクティスです。
アカウントを一元的に管理する
アカウントはAWS Organizationsで一元的に管理しましょうということですね。
OrganizationsでAWSアカウントの作成と管理、作成後の制御を自動化できるからです。
OU(Organizational Units:組織単位)で一元的に権限を管理することが可能なため、権限のについては低いコストで変更可能です。
確認する箇所が1か所になるので、ヒューマンエラーを最小限にできます。
制御を一括設定する
アカウントを個別で設定するのではなくて、Organizationsなどで一括して設定しましょうということです。
OrganizaionsではOU(組織単位)でアカウントをグループ化でき、SCP(サービスコントロールポリシー)でサービス・リージョン・アクションの制御をすることが可能です。
OUについても、ベストプラクティスがありますので見てみましょう。
OUのベストプラクティス
このサイト:AWS Organizations における組織単位のベストプラクティスがまとまっていてわかりやすいです。
10個以上のOUが解説されていますが、全てを作る必要はなくて、必要に応じて作っていけばいいという感じですね。
ここでは細かくは見ませんが、興味があれば上述のサイトから見てみてください!
制限とは?
そもそも一括で設定する制御とはなんでしょうか?
簡単に言うと、適切なレベルでできることを制限するとのことでした。
今までのやり方ですと、基本的には全てできないようにして、必要な時にだけ許可するというものです。
しかし、ビジネスのスピードに付いて行くためにリリースを頻繁に行って改善をしていくには、毎回許可を得るのというのが遅すぎる!
そこで、ガードレールという新しい(2019年には出てたから新しくはないかも…)考え方があります。
簡単に言うと、「アカウントに対して厳しすぎる制限を設けるのではなく、できるだけ自由を確保しつつ望ましくない領域のみ制限、または発見する」とのことでした。
必要な場合に許可するのではく、そもそも問題のあることはできないようにして、どんなにスピードを出しても問題ないようにする考え方です。
セキュリティと便利さのトレードオフではなく、どっちも大事だからどっちも良くするって感じます。
そもそも危ないことをガードレールで防いでくれているなら、その制限の中で安心してスピード高く様々なことができますね!
管理・運用側としても、危ないことはできないようにしているなら安心して寝ることができます。
ただ、実際に取り入れるとなると組織構造やワークフローにも手を入れないといけない気が…
一応、従来行われてきた方法はゲートキーパー方式と呼ぶことができて、ガードレール方式ではそもそも事故を防ぐようにしているイメージです。
ガードレール的なセキュリティでは、以下の内容を自動で横断的に設定できるようにする考え方です。
- 予防的ガードレール (制限) : 対象の操作を実施できないようにするガードレール
- 発見的ガードレール (検知) : 望ましくない操作を行った場合にそれを発見する、またはリスクのある状態を発見するガードレール
このガードレールが、AWSのどういった機能で実現できるかを考えてみます。
予防的ガードレール (制限)
AWSのサービスとしては、OrganizationsのSCPが該当します。
SCPはOUに割り当てることができ、そのOUはアカウントをグループ化することができます。
OU内のアカウントには割り当てたSCPが適用されるため、一括して実行できることの制御が可能です。
SCPで危ないことは実行できないようにしておけば、許可を出さずとも自動的に安全を担保することが可能です!
発見的ガードレール(検知)
AWSのサービスとしては、以下のものが該当します。
- AWS Config Rules
- AWS Security Hub
- Config Conformance Packs
その他、AWSではないSaaSとしてDome9などのクラウドセキュリティ設定チェックも発見的ガードレールとしての役割が期待できます。
AWSが考えているガードレール
ベストプラクティスに基づいたマルチアカウント環境のセットアップを行ってくれるAWS Control Towerではガードレールを設定することができます!
AWS上で必須・強く推奨・選択的な予防的ガードレール・発見的ガードレールが定義されているので、AWS上ではどんなガードレール必要なのかを理解するのに役立ちます!
量が多いのでここでは細かく見ていきませんが、ざっと見た感じではどれも設定した方がよさそうなものばかりです。
ガードレールは別記事でまとめてみたいと考えてます
サービスとリソースを一括設定する
セキュリティ要件として必要な設定を一括して行おうということです。
具体的にはOrganizationsでCloudFormation StackSetsを利用することで設定が可能です。
では何を設定するのが良いか?
ベストプラクティスに記載の内容は以下の通りです。
- 組織全体のアクションの集中ログ管理設定としてのCloudTrail
- CloudTrailの無効化をできないようにする設定
- AWS Configの設定をしてアカウント内のリソースの設定を評価
- AWS Configのデータの一元的な集約
上記のようなことをStackSetsを利用して一括設定することで、自動でセキュリティ要件を満たすことができるようにすべきです!
具体的な設定例としては、Organizationsでログ集中管理用のアカウントを作成しているのあれば、CloudTrailのログの出力先がログ集中管理用のアカウントにするなどが考えられますね
その他にも一括設定したほうがいいセキュリティなどのサービスがあるので、一括設定した方が良さそうなものを一覧にしてみました。
- AWS Audit Manager:AWSの使用状況を継続的に監査して、リスク評価方法と規制や業界標準への準拠を簡素化する
- AWS Config:AWSリソースの設定を評価・監査・審査して、対応策の推奨事項を提供する
- AWS GuardDuty:不正なアクティビティや悪意のあるアクティビティを検出する
- AWS Macie:機械学習を使って、機密データを特定する
- AWS Trusted Advisor:アカウントを評価して、AWSのベストプラクティスをフォローするためのレコメンデーションをする
- AWS IAM Access Analyzer:外部と共有されているS3バケットやIAMロールを特定する
- AWS Secutiry Hub:セキュリティのベストプラクティスのチェックを行い、アラートを集約し、自動修復を行う
- AWS Service Catalog:コンプライアンスを確保したリソース一覧を作成して、ユーザー部門に提供できる
いろいろありますが、自動で設定するようにすれば運用コストを少なくすることができるはずです。
もちろん、そもそもの設定内容が社内のコンプライアンスに適合するかの継続的な確認は必要です!!
シングルサインオン
AWSのアカウントはマルチアカウントが推奨されることはわかったので、マルチアカウントで組織を作っていきたい。
しかし、各アカウントごとを利用できるようにするためには全開発者用のIAMユーザーを作る必要があるのではないか???
そういった疑問に答えるために、AWS SSO(Single Sign-On)が提供されています。
SSOを使用することで、各アカウントにIAMユーザーを作らずにアクセスすることが可能になります!
SSOで認証することで、各AWSアカウントでは認証が不要になり操作効率が上がります!
開発者はSSOの認証情報だけを覚えれば良く、IAMユーザーも存在しないためパスワードとアクセスキーの漏洩の心配がなくなります!
さらに!有効期限付きの認証になるため、もし業務パソコンを紛失されたとしても影響範囲が最小になります!
AWS CLIについても対応しているようです。
認証がSSOだけになることで、SSOの認証だけ管理すれば良い状態になるのも良い点です。
運用管理コストが小さくなりますね!
ちなみに、SSOを利用するにはOrganizationsは必須です
まとめ
AWSでのマルチアカウントについて、Well-Architentedフレームワークからまとめてみました。
いろいろ確認してみると、AWSは様々なサービスによってセキュリティを担保できるようになっているんだなぁと感じました。
組織としてAWSアカウントを利用する際は、よくよく組織の構造やワークフローを考えないとだめそうですねー
参考サイト
AWS Well-Architectedフレームワーク セキュリティの柱 AWS アカウントの管理と分離
AWS Control Towerについて
スタートアップにおけるマルチアカウントの考え方と AWS Control Tower のすゝめ
AWS INNOVATE 増加するシステムをマルチアカウントで効率よく管理する ⇒わかりやすめのスライド
Amazon Web Services ブログ AWS Organizations と AWS Control Tower を使ったマルチアカウント管理 ⇒ポイントがまとまっていてすごい良い…
2021年末版Control Tower総まとめ〜これからAWSマルチアカウント管理したい人に向けて〜 #reinvent
AWS AWS Control Tower の料金 ⇒Control Towerのだいたいの料金が把握できる!
マルチアカウントについて
AWS builders.flash AWS マルチアカウント管理を実現するベストプラクティスとは ?
AWS マルチアカウント管理を実現するベストプラクティスとは ? 第 2 回 ~ Landing Zoneの実現方法
AWS Organizationsユーザーガイド 管理アカウントのベストプラクティス
AWS Organizationsユーザーガイド メンバーアカウントのベストプラクティス
Ragate AWSで複数環境運用のベストプラクティスを紹介!マルチアカウントで安全に環境を運用しましょう
DevelopersIO AWSのマルチアカウント戦略ってなに?なぜ必要?【社内勉強会スライド】 ⇒わかりやすくマルチアカウント戦略がまとまっているのでおすすめ
AWS builders.flash ベストプラクティスの AWS 環境を確立する
制御を一括設定する
Amazon Web Services ブログ AWS Organizations における組織単位のベストプラクティス ⇒OUのベストプラクティスがわかりやすい
スタートアップがAWSを使う時にやりたいこと(アカウントとユーザー管理編)
ビルダーに必要なセキュリティは「門番」ではなく「ガードレール」
モノタロウ セキュリティガードレールを作って、非エンジニアに安心してGCPを提供できるようにした話
【対談】DevSecOpsの浸透において重要なのは「顧客起点」の着想である-後編
Visional Engineering Blog 100を超えるAWSアカウント運用におけるガードレール構築事例 ⇒Control Towerがなかった時のガードレール例。めちゃくちゃ細かい!
シングルサインオン
Youtube 【AWS Black Belt Online Seminar】AWSアカウント シングルサインオンの設計と運用
PLAN-B AWS SSOに移行して1年たったのでまとめる
トレタ 入社後にAWSアカウントの整理とAWS SSOを導入した話
ZOZO 「シングルサインオンはいいぞ」 AWS Single Sign-Onのいいところ・イマイチなところ
AWS Startup ブログ え、IAM ユーザーを作らなくてもマネジメントコンソールにログインできるの!? – シングルサインオン考え方編
参考になりそうなハンズオン
AWS Single Sign-On(SSO)でAWSアカウントへシングルサインオン
え、IAM ユーザーを作らなくてもマネジメントコンソールにログインできるの!? – シングルサインオン実践編