組織のConfigアグリゲータをAWS CLIで作成する
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つは作っておきたいですね。