目次
はじめに
弊社では長らく、社内サービスを 単一の AWS アカウント に集約して運用してきました。サービス数自体は多くないものの、運用メンバーが増えるにつれて権限の境界が曖昧 となり、「誰がどこまで操作できるのか」を把握しづらい状況に陥っていました。
この課題を解決するため、AWS Organizations を活用した マルチアカウント戦略 を導入し、環境・責務ごとにアカウントを分離する取り組みを開始。本記事では、その背景と具体的なアプローチ、そして得られたメリットを紹介します。
現状の課題
- 管理アカウント に ALB と 5 台の EC2 が混在
- 管理アカウントに IAM ユーザーが集中しており、各メンバーに必要以上の権限が与えられている状況が多く、最小権限の原則を実践しにくい
- 単一アカウントではコストの内訳が分かりにくい
- コスト配分タグを使ってある程度の集計は行っていましたが、集計や可視化の観点ではやや見づらく、タグ運用も属人化しやすい課題がありました。
マルチアカウント構成とは
AWS Organizations を用いて 環境(開発・本番)や目的(ネットワーク・共有サービス)ごとにアカウントを分割 し、ガバナンスを効かせつつスケーラブルに拡張していく方法です。アカウントはそれぞれがセキュリティ境界となり、権限・課金・ログなどを独立して管理できます。
期待するメリット
1. 環境ごとの権限分離
アカウント単位で IAM ロールを限定できるため、操作ミスなどにより特定のサービスが停止するリスクを軽減できます。サービスごとにアカウントを分けることで、影響範囲を明確に分離し、安定した運用が可能になります。
2. コストの可視化と予算管理
コスト配分タグでもある程度の可視化は可能でしたが、マルチアカウント構成によりアカウントごとの使用量が分けて見られるようになり、より直感的かつ明確にサービスごとのコストを把握できるようになります。請求自体は管理アカウントに集約されるものの、各アカウントの使用状況が明確になることで、予算アラートの設定や異常検知にも役立ちます。
対応: ネットワークアカウントとサービスアカウントを分離
ルーティングを担うALB をネットワークアカウントに配置し、そこから別アカウントに移行した EC2 インスタンスへトラフィックを転送する構成とします。
本記事では、実際にHPインスタンスを別アカウントに移行したのでその手順を記載します。
大まかな移行ステップ
- 新規AWSアカウント作成、作成したAWSアカウントでVPC作成(この記事では割愛)
- ネットワーク接続
- 管理アカウントの VPC ↔ 移行先 VPC を VPC ピアリングで接続。
- RAMを使用してセキュリティグループを共有し、ALB からのトラフィックを許可。
- AMIを使用し、EC2を移行
- AMI化し、構成を変更せずそのまま移行する想定
- 共有機能で別アカウントで使用できるようにする
- ※ 本構成のEC2は、MySQL をインスタンス内に直接構築しているため、AMI により構成をそのまま保持した移行が可能でした。
- ルーティング調整
- 新EC2へ接続するターゲットグループを作成。
- 別アカウントのEC2は参照できないため、IPアドレスでターゲットグループを設置する
- ALBのターゲットグループを差し替える。
- 新EC2へ接続するターゲットグループを作成。
ネットワーク接続
VPC ピアリングの手順
1. 移行元アカウントでVPC > ピアリング接続からピアリング接続を作成をクリック
2. VPC ID(リクエスト元)は接続元VPCのID、VPC ID(アクセプタ)は接続先VPCのIDをそれぞれ入力
今回のケースでは、アクセプタ側が別アカウントのため、アカウントID(アクセプタ)には接続先のアカウントIDを、VPC ID(アクセプタ)には移行先VPCのIDを入力
3. 移行先アカウントでVPC > ピアリング接続を表示するとリソースができているので、「リクエストを承諾」をクリック
4. それぞれのVPCでルーティングできるよう、ルートテーブルに設定を追加
RAMを使用し、移行先のアカウントにセキュリティグループを参照できるようにする
1. ALBが存在するアカウントで
2. ALBのセキュリティグループを共有する
AMIを使用し、EC2を移行
1. EC2のコンソール > インスタンスの状態 > イメージとテンプレート >イメージを作成から、AMIを作成する
2.イメージ名を入力し、「イメージを作成」を選択する
※本番稼働しているインスタンスの場合、「インスタンスを再起動」には要注意。チェックを入れていると、インスタンスが再起動されてしまいます。
3. EC2 > AMIから、作成したAMIを移行先のアカウントへ共有
4. 移行先のアカウントでEC2 > AMIから、「AMIからインスタンスを起動」をクリックで起動
5. EC2のセキュリティグループ > インバウンドルールは、RAMで共有したALBのセキュリティグループを紐づける
※この時、カスタムルール内のプルダウン内にはALBのセキュリティグループは存在しないと思うので、セキュリティグループIDで直接入力する
ルーティング調整
1. EC2 > ターゲットグループから、ターゲットグループの作成をクリック
2. 他アカウントのEC2は直接参照できないので、グループの詳細の指定は「IPアドレス」を選択
3. 「その他のプライベートアドレス」を選択し、移行先のEC2インスタンスのプライベートIPアドレスを入力し、ターゲットグループを作成
4. ALBのターゲットグループを差し替えて、画面が表示されれば完了
終わりに
単一アカウント運用からマルチアカウント構成への移行は、セキュリティや運用の観点から重要な一歩でした。特に、IAMの権限分離やコストの明確化といった課題は、アカウントを分割することでシンプルかつ直感的に解決できることが実感できました。
今回のように、ALBをネットワークアカウントに残したまま、EC2をサービスアカウントへ移行することで、既存構成を大きく変更せずにスムーズな切り出しが可能です。
今後も、サービス単位や環境単位でのアカウント分離をさらに進めることで、よりガバナンスが効いた、安全かつスケーラブルなクラウド環境を構築していきたいと考えています。
本記事が、同様の課題を抱える方々の参考になれば幸いです。今後も運用で得られた知見を積極的に共有していきますので、ご期待ください。