組織のConfigアグリゲータをAWS CLIで作成する

2024.03.13

Configアグリゲータは AWS Config の1機能です。 リソースの構成情報やコンプライアンスデータを集約します。 マルチアカウント、マルチリージョンで集約可能です。

Configアグリゲータは AWS Organizations と連携可能です。 連携することで「組織のアグリゲータ」を作成できます。 これにより「組織内にある全AWSアカウントのConfig情報」を 1つのAWSアカウントへ集約できます。

img

今回は委任させたAWSアカウント上に 「組織のアグリゲータ」を作成してみます。 作成にはAWS CLIを使いました。

なお、アグリゲータ自体には料金がかかりません。 Configにてコストが掛かるのは、 集約元のConfig記録やConfigルールのみです。

「組織のアグリゲータ」を作成する

以下手順で作成を進めます。 CLIを実行するAWSアカウントに注意してください。

  1. [管理アカウント] Config の Organizations 連携を有効にする
  2. [管理アカウント] メンバーアカウントへConfgを委任する
  3. [委任先メンバーアカウント] Configアグリゲータ用のIAMロールを作成する
  4. [委任先メンバーアカウント] 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)があることを確認できました。

img

アグリゲータの作成直後はデータ収集ができておらず、 データが表示されない可能性があります。 その場合は数分待ちましょう。

一時的な問題により、データの集約ができない可能性があります。 :

データの集約には遅延が発生する可能性があります。数分待ちます。

マルチアカウントマルチリージョンのデータ集約のトラブルシューティング - AWS Config

しばらく待って、以下のように全てOKになっていれば完了です。

img

[アグリゲータ > リソース] にて マルチアカウント・マルチリージョンでConfig情報を集約できていることを確認できました。

img

おわりに

以上、組織のConfigアグリゲータを作成してみました。

アグリゲータを使うと、 組織内にあるAWSリソースのメタデータや Configルールの評価結果を簡単に集中管理できます。

どのアカウントにどのようなリソースがあるのか、 どのようなコンプライアンスステータスかを把握するためにも、 組織内に1つは作っておきたいですね。

参考