Configアグリゲータは AWS Config の1機能です。 リソースの構成情報やコンプライアンスデータを集約します。 マルチアカウント、マルチリージョンで集約可能です。
Configアグリゲータは AWS Organizations と連携可能です。 連携することで「組織のアグリゲータ」を作成できます。 これにより「組織内にある全AWSアカウントのConfig情報」を 1つのAWSアカウントへ集約できます。
今回は委任させたAWSアカウント上に 「組織のアグリゲータ」を作成してみます。 作成にはAWS CLIを使いました。
なお、アグリゲータ自体には料金がかかりません。 Configにてコストが掛かるのは、 集約元のConfig記録やConfigルールのみです。
「組織のアグリゲータ」を作成する
以下手順で作成を進めます。 CLIを実行するAWSアカウントに注意してください。
- [管理アカウント] Config の Organizations 連携を有効にする
- [管理アカウント] メンバーアカウントへConfgを委任する
- [委任先メンバーアカウント] Configアグリゲータ用のIAMロールを作成する
- [委任先メンバーアカウント] Configアグリゲータを作成する
Config の Organizations 連携を有効にする
※実施アカウント: 組織の管理アカウント
organizations list-aws-service-access-for-organization を実行して、 Organizations 連携が有効になっている AWSサービスを確認します。
aws organizations list-aws-service-access-for-organization --output table
# ----------------------------------------------------------------------
# | ListAWSServiceAccessForOrganization |
# +--------------------------------------------------------------------+
# || EnabledServicePrincipals ||
# |+-----------------------------------+------------------------------+|
# || DateEnabled | ServicePrincipal ||
# |+-----------------------------------+------------------------------+|
# || 2023-10-13T17:39:58.228000+09:00 | cloudtrail.amazonaws.com ||
# || 2023-10-13T17:47:54.301000+09:00 | config.amazonaws.com ||
# || 2023-10-13T17:39:56.799000+09:00 | controltower.amazonaws.com ||
# ... (略) ...
# || 2023-10-13T17:40:40.601000+09:00 | sso.amazonaws.com |
# |+-----------------------------------+------------------------------+|
組織のConfigアグリゲータを作成するには、 config.amazonaws.com
および config-multiaccountsetup.amazonaws.com
が存在する必要があります。
それぞれ無い場合は、 organizations enable-aws-service-access を実行します。
# config.amazonaws.com が有効化になっていない場合は、以下を実行する
aws organizations enable-aws-service-access \
--service-principal=config.amazonaws.com
# config-multiaccountsetup.config.amazonaws.com が有効化になっていない場合は、以下を実行する
aws organizations enable-aws-service-access \
--service-principal=config-multiaccountsetup.amazonaws.com
メンバーアカウントへConfgを委任する
※実施アカウント: 組織の管理アカウント
事前に「委任先のメンバーアカウント」アカウントIDをメモしておきます。 アカウントIDは organizations list-accounts で確認できます。
aws organizations list-accounts --output table \
--query "Accounts[].[Name, Id]"
# ----------------------------------
# | ListAccounts |
# +---------------+----------------+
# | Member01 | 111111111111 |
# | Infra01 | 222222222222 |
# | Payer-XXX | 333333333333 |
# | ...(略)
# | Audit | 999999999999 |
# +---------------+----------------+
organizations register-delegated-administrator を実行して、委任させます。
MemberAccountID=${委任先メンバーアカウントのアカウントID}
# config-multiaccountsetup.amazonaws.com 分
aws organizations register-delegated-administrator \
--service-principal=config-multiaccountsetup.amazonaws.com \
--account-id "${MemberAccountID}"
# config.amazonaws.com 分
aws organizations register-delegated-administrator \
--service-principal=config.amazonaws.com \
--account-id "${MemberAccountID}"
実行後、 organizations list-delegated-services-for-account を使って確認します。
aws organizations list-delegated-services-for-account --output yaml \
--account-id "${MemberAccountID}" --query "DelegatedServices[].ServicePrincipal"
# - config-multiaccountsetup.amazonaws.com
# - config.amazonaws.com
Configアグリゲータ用のIAMロールを作成する
※実施アカウント: 委任したメンバーアカウント
Configアグリゲータで使用するIAMロールを 事前に作成します。
以下コマンドでIAMロール OrgConfigRole
を作成します。
aws iam create-role --output yaml --role-name OrgConfigRole \
--assume-role-policy-document "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"config.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}" \
--description "Role for organizational AWS Config aggregator"
# Role:
# Arn: arn:aws:iam::999999999999:role/OrgConfigRole
# AssumeRolePolicyDocument:
# Statement:
# - Action: sts:AssumeRole
# Effect: Allow
# Principal:
# Service: config.amazonaws.com
# Sid: ''
# Version: '2012-10-17'
# CreateDate: '2024-03-10T06:41:28+00:00'
# Path: /
# RoleId: AROAEXAMPLE
# RoleName: OrgConfigRole
OrgConfigRole に対して必要な権限(AWSConfigRoleForOrganizations)をアタッチします。
aws iam attach-role-policy \
--role-name OrgConfigRole \
--policy-arn "arn:aws:iam::aws:policy/service-role/AWSConfigRoleForOrganizations"
以下ポリシーアタッチ状況の確認コマンドです。
aws iam list-attached-role-policies --output yaml \
--role-name OrgConfigRole
# AttachedPolicies:
# - PolicyArn: arn:aws:iam::aws:policy/service-role/AWSConfigRoleForOrganizations
# PolicyName: AWSConfigRoleForOrganizations
Configアグリゲータを作成する
※実施アカウント: 委任したメンバーアカウント
aws configservice put-configuration-aggregator を使って 組織のConfigアグリゲータを作成します。
# OrgConfigRole の ARNを取得する
org_config_role_arn=$(aws iam get-role --output text \
--role-name OrgConfigRole --query "Role.Arn")
# Configアグリゲータを作成する
aws configservice put-configuration-aggregator --output yaml \
--configuration-aggregator-name OrgAggregator \
--organization-aggregation-source "{\"RoleArn\": \"${org_config_role_arn}\",\"AllAwsRegions\": true}"
# ConfigurationAggregator:
# ConfigurationAggregatorArn: arn:aws:config:ap-northeast-1:999999999999:config-aggregator/config-aggregator-dolgd1uw
# ConfigurationAggregatorName: OrgAggregator
# CreationTime: '2024-03-10T15:51:13.184000+09:00'
# LastUpdatedTime: '2024-03-10T15:51:13.184000+09:00'
# OrganizationAggregationSource:
# AllAwsRegions: true
# RoleArn: arn:aws:iam::999999999999:role/OrgConfigRole
以上で作成は完了です。
確認する
委任先メンバーアカウントの AWS Config コンソールにて、 作成したアグリゲータ (OrgAggregator
)があることを確認できました。
アグリゲータの作成直後はデータ収集ができておらず、 データが表示されない可能性があります。 その場合は数分待ちましょう。
一時的な問題により、データの集約ができない可能性があります。 :
データの集約には遅延が発生する可能性があります。数分待ちます。
しばらく待って、以下のように全てOKになっていれば完了です。
[アグリゲータ > リソース] にて マルチアカウント・マルチリージョンでConfig情報を集約できていることを確認できました。
おわりに
以上、組織のConfigアグリゲータを作成してみました。
アグリゲータを使うと、 組織内にあるAWSリソースのメタデータや Configルールの評価結果を簡単に集中管理できます。
どのアカウントにどのようなリソースがあるのか、 どのようなコンプライアンスステータスかを把握するためにも、 組織内に1つは作っておきたいですね。