
はじめに
こんにちは! プロフェッショナルサービス本部の髙山です。
普段の業務では主にサーバーの要件や設計のセキュリティ面のチェックをしています。
今回、社内で使用しているシステムのリプレースにあたりAWSアカウントの構成を変更しました。
AWS Organizations を用いてマルチアカウント構成をとり、スイッチロールを使用してIAMユーザーを一元管理し、
統一化されたセキュアな環境でシステムを構築することができたので紹介したいと思います。
なぜアカウント構成を変更したのか
AWSでは組織や環境毎にAWSアカウントを分けて管理するマルチアカウント構成が推奨されています。*1
複数のAWSアカウントを用途や環境(本番、開発、検証など)ごとに分離することで、
セキュリティ境界やアクセス制御を明確にし、設定ミスやセキュリティリスクを低減できるメリットがあります。
以下の問題点を解決するため、今回はステージング環境と本番環境を分けたマルチアカウント構成としました。
- ステージング環境と本番環境を同一のアカウントで作成してしまうと、検証の際に誤って本番用のサービスを触ってしまうなどのリスクがある
- ステージング環境と本番環境を同一のアカウントで作成してしまうと、構成も複雑化し運用・管理の面においても煩雑化する恐れがある
しかし、この構成では、AWSアカウントが複数発行されることによる以下の問題があります。
- マネジメントコンソールのログインやアカウントの切り替えが煩雑になる
- 一人が管理するユーザーアカウントが増え、IAMユーザーの管理が複雑になってしまう恐れがある
- 退職者や異動者が出た場合、それぞれのアカウントでユーザーの削除をする必要がある
上記の問題を解決するためにIAMユーザーの管理を一元化できるスイッチロールという機能を利用しました。
スイッチロールの利用により、IAMユーザーの管理をログイン用の単一AWSアカウントに集約し、運用を簡素化できました。
変更後のアカウント構成
変更後のアカウント構成は以下の図の通りです。
- ログイン用AWSアカウント、ステージング用AWSアカウント、本番用AWSアカウントをそれぞれ作成
- ログイン用AWSアカウントを管理アカウントとして、ログイン用AWSアカウントにステージング用AWSアカウント、本番用AWSアカウントを紐づける
- ログイン用AWSアカウントにIAMユーザーを作成し、ログイン用AWSアカウントからスイッチロールして、IAMユーザーが各アカウントへ移動する

AWS Organizationsとは
AWS Organizations*2は、複数のAWSアカウントをひとつの“組織”としてまとめて一元管理できるサービスです。
AWS Organizationsを使うことで、複数のアカウントの作成・グループ化・リソース割り当て・ガバナンス(ポリシーによる管理)をまとめて行えます。
たとえば、部署やプロジェクトごとにAWSアカウントを分けて管理し、ひとつの支払い方法で一括請求したり、セキュリティルールなどを組織全体に適用できます。
アカウント統一化の方法
- ログイン用、ステージング用、本番用のAWSアカウントをそれぞれ作成し、ログイン用AWSアカウントにログインしAWS Organizations を有効化します。
- AWS Organizationsの「招待」機能でステージング用AWSアカウントおよび本番用AWSアカウントをログイン用AWSアカウントのOrganizationsに加えます。
- それぞれのアカウントをログイン用AWSアカウントのOrganizationsに加えると、ログイン用AWSアカウントで一元管理の対象とすることができます。
※事前に既存アカウントを作成していない場合でも、アカウントを招待する際に新規アカウントを作成し紐づけることも可能です。

アカウント統一化による利点
アカウントを統一化したことにより個々で管理する際に比べ以下のメリットがありました。
- 複数アカウントの設定や運用を一括で管理できるため、個別対応の手間やミスが大幅に減る
- サービスの利用制限やセキュリティポリシーを、サービスコントロールポリシー(SCP)を用いて、全てのアカウントへ簡単に適用できる
- 一括請求機能により、複数アカウントの利用料をまとめて一括請求でき、全体コストの把握や個別アカウントの明細把握が効率化できる
1回の設定ですべてのアカウントにポリシーが適用でき、コストについてもまとめて管理できることで、アカウントを個々で管理するよりも負担が軽減されます。
スイッチロールについて
マルチアカウント構成では、各アカウントでユーザーを個別に管理する必要があるため、アカウント数の増加に伴ってID・パスワードの管理負荷が増大します。
社員の異動や退職時には、各アカウントごとに設定変更や無効化が必要となり、運用・管理が煩雑になりがちです。
さらに、作業のたびにログイン/ログアウトを繰り返してアカウントを切り替える必要があり、業務効率が低下します。
IAMのスイッチロールを活用することで、各アカウントごとにIAMユーザーを作成する必要がなくなり効率的にIAMユーザーの管理をすることができます。
ログインアカウントのみにIAMユーザーを作成することでユーザー管理はログインアカウントのみで実施し、
スイッチロール機能を使いそれぞれのアカウントへシームレスに移動し作業できるようになりました。
スイッチロールの手順
- スイッチ先アカウント(ステージング用AWSアカウントおよび本番用AWSアカウント)でIAMロールを作成する。
- 必要な権限ポリシーを付与する。
- ログイン用AWSアカウントで作成したスイッチロール用のIAMグループ(開発者グループ)のIAMユーザーのみスイッチできるように開発者グループに所属しているユーザーをPrincipalに指定する。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<スイッチ元AccountID>:user/ユーザー1" }, "Action": "sts:AssumeRole" } ] } - スイッチ元アカウント(ログイン用AWSアカウント)で以下のインラインポリシーを開発者グループにアタッチする。
※インラインポリシー*3とは、特定のIAMユーザー、グループ、またはロールに「直接埋め込む」ポリシーで、 1つのユーザーやロールごとに作成し、そのIDにだけ適用されるポリシー。 特定のIAMユーザーやロール以外に割り当てられることがないため、誤って他へ付与されるリスクがない。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::<スイッチ先アカウントID>:role/<スイッチ先ロール名>" } ] } - コンソールでのスイッチロール操作する。AWSマネジメントコンソールの右上のユーザー名メニューで「ロールの切り替え」をクリックする。
- ロールの切り替え画面に遷移後、「アカウント」にスイッチ先アカウントID、「ロール名」に先ほど作成したIAMロール名を入力する。
- 任意で表示カラー・表示名を設定し「ロールの切り替え」を押し、右上ユーザー表示が「スイッチしたロール名@アカウントID」となれば切替完了。
- 以降はユーザー名メニューのロール履歴から表示名(任意で設定した表示名)を押下するだけで移動ができる。

アカウント一元管理に伴うリスクと対策
スイッチロールを用いて簡単にアカウント間を移動できるようになりました。
1つのボタンでアカウントを移動できる便利な反面、注意していないと作業するアカウントを誤ってしまう恐れがあります。
この対策として、背景色、アカウント色を分けることで視覚的に気付けるようにしました。
※ログイン用AWSアカウントおよびステージング用AWSアカウントは背景色はライト、アカウント色はグレーとし、
本番用AWSアカウントは背景色はダーク、アカウント色は赤としました。


さいごに
今回はセキュアなAWSのアカウント構成について紹介させていただきました。
私自身もはじめてAWSでシステム構築をするため、調査しながら最善策を模索しました。
AWSの機能を組み合わせて使うことで、比較的容易に普段のアカウント管理の手間が減り、安全に運用できることがわかりました。
これから、AWSでシステム構築をされる方は効率的かつ安全なアカウント管理・運用の一つの方法として参考にしていただければ幸いです。
*1:https://docs.aws.amazon.com/ja_jp/organizations/latest/userguide/orgs_best-practices.html#orgs_best-practices-organization-structure
*2:https://docs.aws.amazon.com/ja_jp/organizations/latest/userguide/orgs_introduction.html
*3:https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies_managed-vs-inline.html