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

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

Clock Icon2024.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つは作っておきたいですね。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.