こんにちは。 秋田県出身の丹(たん)です。
JAWS FESTA 2023 KYUSHU の盛り上がりにやる気をもらって本記事を書き始めました!(書き始めて既に2週間経過しました・・)オフラインイベントに参加したい今日この頃です。
JAWS FESTA当日は、家族行事で東北にいたため当然現地参加できていませんが、X(旧Twitter)から雰囲気だけ楽しんでいました。
JAWS FESTAとは、地方で地方のJAWS-UG支部が主催で開催するカンファレンスで、2019年札幌開催後4年ぶりとなります。
NRIネットコムも企業サポーターとして応援しています。
Supporters | JAWS FESTA 2023 KYUSHU
さて、本題に入っていきましょう。
今回は、AWSマルチアカウント管理においてAWSアカウントを分ける観点を中心に、利用規模に応じてAWSを複数アカウントに分割することで解決できる課題について紹介します。
AWS大村さんが2021年に公開されている「マルチアカウント管理の基本」を参考に書いています。
www.slideshare.net
AWSで実現したい環境と課題
AWS(Amazon Web Services)上では様々な分野のシステムが構築されています。AWSで実現したい環境に共通することとして3つ挙げられます。
- Secure&Compliant(安全で要件に準拠した環境)
- Scalable&Resilient(拡張性と弾力性のある環境)
- Adaptable&Flexible(適応性と柔軟性のある環境)
AWSで実現したい環境において、1つのAWSアカウントで環境を構築しようとすると、いくつか課題が発生します。
例えば、AWSアカウントを利用するチームが増えた場合、1つのAWSアカウントにシステムが増えていきます。この時、VPCを分けてシステムの仮想ネットワークを分けます。そうすると、複数のVPCが必要になり、IAMによるVPC単位でのアクセス制御が必要になります。アクセス制御が複雑になりますし、クォータ制約の引き上げも必要になってきます。
また、1つのAWSアカウント上にリソースが増えていき、システム毎の請求金額を把握するのが難しくなります。
他にも、1つのAWSアカウントでシステムを管理する部署が増えるとビジネスプロセスの分離も難しくなってきます。
最終的には、セキュリティやコンプライアンスの統制が効かなくなってしまいます。
このような課題を、AWSアカウントを分離することで解消することができます。
前述で例に挙げたように、1つのAWSアカウントだとシステム毎にVPCを分けていたものが、アカウント単位での分割になりアクセス制御をアカウント単位で行うことができます。クォータも1つのAWSアカウントで管理している時よりも、アカウント単位で管理できるので余裕を持つことができます。
請求もアカウント単位で確認することができますし、1つのアカウントに多くのシステムを詰め込むよりも用途や目的ごとにアカウントを分けることで、境界が明確になりシステムの開発や管理がしやすくなります。
では、どのような観点でAWSアカウントを分離するのが良いのでしょう。
AWSアカウントの分離観点
AWSで実現したい環境における課題に対して、主に4つの観点でAWSアカウントを分割することを考えます。
- 環境
- ワークロード(システム)
- ビジネスプロセス(部門等)
- 請求
AWSアカウントを分離する観点が分かりました。
それでは、AWSアカウントを分離して管理した場合にどのような課題が解消できるのかをもう少し見ていきましょう。
利用規模に応じて変わるAWSアカウント管理方法
今まで自社やお客様のAWSアカウント管理と向き合ってきましたが、大きく3つのアカウント管理方法に分かれます。AWS利用規模が大きくなるにつれて、AWSアカウントの数も増えていきます。
AWSアカウントが1つの場合は、単独アカウントで管理をします。
その後、前述したAWSアカウントの分離観点でAWSアカウントを分離していくと、マルチアカウントでの管理となります。
AWSアカウント数が10以上になってくると、組織としてAWSアカウントを管理しないと管理が難しくなってきます。AWS Organizations には、組織としてAWSをマルチアカウントで管理することができる機能があります。
単独アカウントで管理:AWSアカウント数「1」
最初はAWSアカウントを作成すると1アカウント単独での管理となります。
この場合、1つのAWSアカウント上にVPCを作成して、VPC上にワークロード(システム)を構築していきます。
この時、構築するシステムが増えるに従って、3つの課題が出てきます。
結果として、「グレーな」境界で曖昧になり、責任の押し付け合いが発生します。
構築するシステムが増える時には、AWSアカウントを分割することで、単独でAWSアカウントを管理していた時に発生していた課題は解消されます。
マルチアカウントで管理:AWSアカウント数「2~10程度」
AWSアカウントが2~10アカウント程度まではマルチアカウントで個々にAWSアカウントを管理することができます。
この場合、IAMの踏み台アカウントを用意して、IAMユーザを一元管理します。また、クロスアカウントIAMロールにより各AWSアカウントへスイッチするアクセス制御を考えます。
クォータ制約の課題はマルチアカウントで管理することにより、アカウント毎のクォータ管理となり解消されます。ただし、アカウント毎に制約は存在するため制約の意識は必要です。
マルチアカウントで管理していても、共用のアカウントや監査/ログ集約をするためのアカウントが必要になり、さらに管理するシステムが増えていくことでAWSアカウントが増えます。
アクセス制御の観点でIAMユーザやクロスアカウントロールが増えて管理負荷が増加します。また、可視化/トラッキングに関しても個々のアカウント単位の請求、アカウント単位のログ集約となり一元管理ができない課題が出てきます。
このような課題が出てくるため、AWSアカウントが10アカウントを超えると、「AWS Organizations」を利用した組織としてのマルチアカウント管理が必要となります。
組織としてマルチアカウントで管理:AWSアカウント数「10以上~数百」
「AWS Organizations」で組織を作成すると、親となるアカウントをマネジメントアカウント、子であるメンバーアカウントとしてマルチアカウント構成となります。
AWS Organizationsの一括請求機能の他に、Service Control Policy(SCP)、AWS IAM Identity Center、AWS CloudFormation StackSets等のAWSサービス・機能を利用してマルチアカウント管理を行うことが可能となります。
その結果、個々でアカウント管理する際に発生していた課題を解消できます。
AWSマルチアカウント管理の利用規模に応じたAWSアカウント分割まとめ
AWSアカウントを分ける観点と利用規模に応じて変わるAWSアカウント管理方法について紹介してきました。
AWSアカウントを管理する上では主に4つの観点(環境、システムワークロード、部門等のビジネスプロセス、請求)でAWSアカウントを分割していきます。
利用規模が大きくなっていくと、AWSアカウント数も増えていきます。AWSアカウント数が増えていくと、組織として複数アカウントを管理する必要が出てきて、マルチアカウント前提でのアクセス制御や可視化/トラッキング等、セキュリティ統制の管理手法を考える必要が出てきます。
まずは、どのような観点でAWSアカウントを分離して、どうやって複数のAWSアカウントを管理するのかということから知っていきましょう。
AWSマルチアカウント管理前提で利用するAWSサービスもありますが、多くは単独のAWSアカウントを管理する上で利用しているAWSサービスをマルチアカウント管理の観点で活用することができます。
AWSマルチアカウント管理で活用できるAWSサービスや機能については、また別の機会に紹介したいと思います。
Let's AWS Multi-Account Management!