リージョン制限を適用したマルチアカウント環境でAWS Resource Explorerを活用し、横断的にリソース検索を実現してみた
はじめに
各OUでリージョン制限を適用したマルチアカウント環境において、対象リージョンのみをAWS Resource Explorerで横断的にリソース検索できるようにしてみました。
AWS Resource Explorer はリソースを検索するサービスです。リージョンやアカウントを横断して検索することも可能です。
以下の記事では、Organizations内の全アカウントの全リージョンでリソースを検索する方法が紹介されています。
ただし、以下の構成のように、SCP(Service Control Policy)でリージョン制限を適用したOU配下にメンバーアカウントが存在する場合、全リージョンではなく、検索対象のリージョンを制限する必要があります。
上記の構成例では、以下のリージョン制限がなされています。
- 管理アカウントは、リージョン制限なし
- 子1-OUは、東京リージョンとバージニアリージョンと大阪リージョンのみ利用可能
- 子2-OUは、東京リージョンとバージニアリージョンとシンガポールリージョンのみ利用可能
今回は、上記の構成を例に、リソースを横断的に検索できるようにします。
Resource Explorerの2つのインデックス
AWS Resource Explorerは、専用のインデックスを使用してリソース検索機能を提供します。このサービスは、AWSアカウント内のさまざまなデータソースからリソース情報を収集し、検索可能な形でインデックスに保存します。
インデックスには「ローカルインデックス」と「アグリゲータインデックス」の2種類があります。
- ローカルインデックス
- 各リージョンごとに作成可能で、そのリージョン内のリソース情報のみを管理します。リージョン単位での検索に使用されます。
- アグリゲータインデックス
- 単一のリージョンのローカルインデックスを昇格させて作成されます。このインデックスは、Resource Explorerが有効化された全リージョンの情報を統合し、クロスリージョン検索を可能にします。
クロスリージョン検索は、アグリゲータインデックスが存在するリージョンでのみ実行可能で、そのリージョンのビューから全リージョンの検索結果を取得できます。
また、マルチアカウント環境では、複数アカウントを横断して検索することも可能です。
なお、ローカルインデックスが作成されていないリージョンのリソースは、アグリゲータインデックスの検索結果に含まれません。
このように、アグリゲータインデックスは複数リージョンのリソース情報を一元的に管理し、効率的な横断検索を実現する重要な役割を果たします。
以下はAWSドキュメントに掲載されている設定例です。
上記の画像では、us-east-1、us-west-2、eu-west-1の3つのリージョンでResource Explorerを有効化し、それぞれにローカルインデックスを作成しています。その中で、us-west-2のローカルインデックスをアグリゲータインデックスに昇格させることで、us-west-2から3つのリージョンのリソースを横断的に検索できるようにしています。
一方、sa-east-1ではResource Explorerを有効化していないため、このリージョンのリソースは検索結果に含まれず、このリージョンでの検索も実行できません。
信頼されたアクセスを有効にする
管理アカウントから、[Resource Explorerをオンにする]を選択します。
[マルチアカウント設定]を選択します。
[信頼されたアクセスを有効にする]の2つのチェック項目を選択し、[確認]をクリックします。
今回は、Resource Explorerでアカウントを横断的に検索して閲覧するアカウントを管理アカウントのみに限定し、別アカウントへの委任は行いません。
各メンバーアカウントにインデックスを作成
組織内のアカウントに対してインデックスを作成する場合、AWS Systems Manager Quick SetupとAWS CloudFormation StackSetsの2つの方法があります。
AWS Systems Manager Quick Setupの方が簡単ですが、大阪リージョンではQuick Setupが未対応のため利用できません。
そのため、CloudFormation StackSetsを利用してアグリゲータインデックスとローカルインデックスを作成します。
[CloudFormationで設定を作成]をクリックすると、以下のAWSドキュメントに遷移します。
アグリゲータインデックス作成用のテンプレートとローカルインデックス作成用テンプレートの2種類が用意されています。
Description: >-
CFN Stack setting up ResourceExplorer with an Aggregator Index, and a new Default View.
Resources:
Index:
Type: 'AWS::ResourceExplorer2::Index'
Properties:
Type: AGGREGATOR
Tags:
Purpose: ResourceExplorer CFN Stack
View:
Type: 'AWS::ResourceExplorer2::View'
Properties:
ViewName: DefaultView
IncludedProperties:
- Name: tags
Tags:
Purpose: ResourceExplorer CFN Stack
DependsOn: Index
DefaultViewAssociation:
Type: 'AWS::ResourceExplorer2::DefaultViewAssociation'
Properties:
ViewArn: !Ref View
Description: >-
CFN Stack setting up ResourceExplorer with a Local Index, and a new Default View.
Resources:
Index:
Type: 'AWS::ResourceExplorer2::Index'
Properties:
Type: LOCAL
Tags:
Purpose: ResourceExplorer CFN Stack
View:
Type: 'AWS::ResourceExplorer2::View'
Properties:
ViewName: DefaultView
IncludedProperties:
- Name: tags
Tags:
Purpose: ResourceExplorer CFN Stack
DependsOn: Index
DefaultViewAssociation:
Type: 'AWS::ResourceExplorer2::DefaultViewAssociation'
Properties:
ViewArn: !Ref View
今回アグリゲータインデックスは、東京リージョンにします。
アグリゲータインデックスは、CloudFormation StackSetsを使用して親OU(子1-OUと子2-OU配下のアカウント)に対し、東京リージョンにデプロイします。
ローカルインデックスは、CloudFormation StackSetsで以下の2パターンでデプロイします。
- 子-1-OU:バージニアリージョンと大阪リージョン
- 子-2-OU:バージニアリージョンとシンガポールリージョン
アグリゲータインデックスを作成
管理アカウントから、CloudFormation StackSetsで親OU配下アカウントの東京リージョンにアグリゲータインデックスを作成します。
CloudFormation StackSetsは以下の設定です。他はデフォルトです。
- アクセス許可モデル:サービスマネージドアクセス許可(SERVICE_MANAGED)
- テンプレート:アグリゲータインデックス用
- StackSet 名:resource-explorer-stacksets-aggregate-index-in-tokyo
- デプロイターゲット:親OU
- 自動デプロイオプション
- 自動デプロイ:アクティブ化
- アカウント削除動作:スタックを削除
- リージョンの指定:東京リージョン
ちなみに、アグリゲータインデックスを削除すると、再作成までに24時間待つ必要があるため、注意ください。
これで、親OU配下の全アカウントで東京リージョンにアグリゲータインデックスが作成されました。
ローカルインデックスを作成
続いてローカルインデックスを作成していきます
管理アカウントから、CloudFormation StackSetsを使用して子1-OU配下のアカウントに対し、バージニアリージョンと大阪リージョンにローカルインデックスを作成します。
CloudFormation StackSetsの設定は以下の通りです。他の設定はデフォルトのままです。
- アクセス許可モデル:サービスマネージドアクセス許可(SERVICE_MANAGED)
- テンプレート:ローカルインデックス用
- StackSet 名:resource-explorer-stacksets-local-index-child1
- デプロイターゲット:子1-OU
- 自動デプロイオプション
- 自動デプロイ:アクティブ化
- アカウント削除動作:スタックを削除
- リージョンの指定:バージニアリージョンと大阪リージョン
続いて、CloudFormation StackSetsを使用して子2-OU配下のアカウントに対し、バージニアリージョンとシンガポールリージョンにローカルインデックスを作成します。
CloudFormation StackSetsは以下の設定です。他はデフォルトです。
- アクセス許可モデル:サービスマネージドアクセス許可(SERVICE_MANAGED)
- テンプレート:アグリゲータインデックス用
- StackSet 名:resource-explorer-stacksets-local-index-child2
- デプロイターゲット:子2-OU
- 自動デプロイオプション
- 自動デプロイ:アクティブ化
- アカウント削除動作:スタックを削除
- リージョンの指定:バージニアリージョンとシンガポールリージョン
これで各OU配下のアカウントに対して、適切なリージョンにローカルインデックスが作成されました。
マルチアカウントリソースビュー作成
マルチアカウントリソースビューを作成します。
[組織全体のリソースの可視化]を選択します。この時点では、管理アカウントは、Resource Explorerが無効になっています。
リージョンは、各アカウントでアグリゲータインデックスを作成した東京リージョンを指定します。
これで、管理アカウントを除く全メンバーアカウントに対してアグリゲータインデックスとローカルインデックスが作成され、ビューから検索できるようになりました。
管理アカウントにインデックスを作成
最後に、管理アカウントで東京リージョンにアグリゲータインデックスを作成し、東京を除く全リージョンにローカルインデックスを作成します。また、先ほど作成したビューをデフォルトビューに設定します。
手順は、以下の記事の「追加作業1」と「追加作業2」をご参照ください。
マルチアカウントリソースビューを確認してみる
管理アカウントから、マルチアカウントリソースビューを確認できます。筆者の場合、ビューを作成して数時間後に別アカウントのリソースも確認できました。
最後に
今回の手順では、各OUでリージョン制限を適用したマルチアカウント環境において、AWS Resource Explorerを活用し、対象リージョンのみを横断的にリソース検索できるように設定する方法を解説しました。
この設定により、組織全体のリソース管理が効率化され、必要なリソースを迅速に検索できるようになります。特に、SCPでリージョン制限を適用している環境では、許可されていないリージョンのリソースが誤って操作されるリスクを防ぎつつ、必要なリソースを効率的に検索できるようになります。
参考