Security Hub CSPM の Central Configuration なら IAM 系コントロールの「東京以外で無効化」を明示する必要はない

Security Hub CSPM の Central Configuration なら IAM 系コントロールの「東京以外で無効化」を明示する必要はない

2026.04.30

クラウド事業本部 コンサルティング部のいたくらです。

はじめに

Security Hub CSPM の Configuration Policy(中央設定)を設計するとき、「東京リージョンでのみ IAM 系コントロールを有効化したい(IAM はグローバルリソースなので、他リージョンで評価しても重複検知になってしまう)」という設計を考えませんか?

この設計を Configuration Policy 上で「コントロール × リージョン」のマトリクスとして頑張って落とし込みたくなるのですが、Central Configuration を使っているなら、その必要はありません。

実は Central Configuration には、グローバルリソースに関連するコントロールをホームリージョン以外で自動的に無効化してくれる仕組み が組み込まれています。本記事では、その仕様と、それを踏まえた Configuration Policy の設計について整理してみました。

三行まとめ

  • Central Configuration を使う場合、IAM や KMS などグローバルリソースに関するコントロールはホームリージョン以外で自動的に無効化されます
  • そのため、Configuration Policy には「全リージョンで無効化したいコントロール」だけを書けば十分です
  • 「東京以外で IAM 系を無効化」を Configuration Policy 内で明示する必要はなく、設計をシンプルに保てます

前提

  • Security Hub CSPM は Central Configuration モードで利用
    • 委任管理者アカウントから組織全体の Configuration Policy を一元管理する構成
  • ホームリージョン: 東京(ap-northeast-1)
  • 有効化リージョン: 東京 / 大阪 / バージニア北部 / オレゴン
  • 利用セキュリティ基準: AWS Foundational Security Best Practices(FSBP)
  • AWS Config レコーダー: ホームリージョン以外ではグローバルリソースの記録をオフにしている
    • 公式ドキュメントでも、findings をホームリージョンに集約するための前提として明記されています
    • (公式ドキュメントより引用)To limit findings for these controls to just one Region, you can update your AWS Config recorder settings and turn off global resource recording in all Regions except the home Region.
    • つまり、Security Hub CSPM 側の自動無効化と AWS Config 側の global resource recording 設定はセットで意味を持つ前提条件です

補足: AWS Config レコーダーの設定例

参考までに、私の検証環境の AWS Config レコーダー設定をご紹介します。includeGlobalResourceTypes という真偽フラグで IAM 系グローバルリソース(Users / Groups / Roles / Customer Managed Policies)の記録を一括オン/オフ する方法もありますが、現在の「カスタマイズ可能なレコーダー」では、リソースタイプごとに「記録から除外」をオーバーライド設定する のが推奨される設定方法です。

ホームリージョン(東京)

すべてのリソースタイプを記録対象としており、オーバーライド設定は 0 件です。IAM Policy / User / Role / Group などのグローバルリソースも、このリージョンで記録されます。

config-recorder-tokyo-1.png

ホームリージョン以外(バージニア北部の例)

IAM Policy / User / Role / Group の 4 つを「記録から除外」にオーバーライドしています。これにより、グローバルリソースが他リージョンの AWS Config に重複記録されるのを防げます。

config-recorder-virginia-1.png

この設定と Security Hub CSPM の自動無効化が組み合わさることで、グローバルリソース関連の findings が東京リージョンに集約される構成になります。

なぜ IAM 4 種だけ除外すれば十分なのか

「グローバルリソースって他にもあるのでは?」と気になった方もいるかもしれません。実は AWS Config におけるグローバルリソースは、ドキュメント上で 2 つに分類されています(Recording AWS Resources with AWS Config - AWS Config)。

  • 2022 年 2 月以前にオンボードされた IAM 系グローバルリソースAWS::IAM::Group / Policy / Role / User
    • 複数リージョンで重複記録される仕様のため、明示的に除外しないと重複 CI が発生
    • 今回の検証環境で除外している 4 つはこれに該当
  • 2022 年 2 月以降にオンボードされた Home Region Only のグローバルリソース(CloudFront / Route 53 / WAFv2 / Global Accelerator / ECR Public)
    • AWS Config 側で自動的にホームリージョンのみ記録される仕様のため、ユーザー側での除外設定は不要

そのため、AWS Config の重複記録を避けるという観点では IAM 4 種を除外しておけば必要十分です。なお、Aurora Global Cluster(AWS::RDS::GlobalCluster)だけは「1 リージョンで有効化すると全有効リージョンで記録される」という特殊な仕様なので、利用している場合は別途検討が必要です。

やってみた

1. 公式ドキュメントの記載を確認する

まずは公式ドキュメントの記述を見てみます。Suggested controls to disable in Security Hub CSPM には次のように書かれています。

If you use central configuration, Security Hub CSPM automatically disables controls that involve global resources in all Regions except the home Region.

ざっくり訳すと「Central Configuration を使用する場合、Security Hub CSPM はグローバルリソースに関連するコントロールを、ホームリージョン以外のすべてのリージョンで自動的に無効化します」ということです。

つまり、ホームリージョンを東京に設定していれば、IAM や KMS 系のコントロールは 東京でのみ評価され、大阪・バージニア北部・オレゴンでは自動で無効化される ということになります。

2. 自動無効化の対象コントロール

公式ドキュメントの Suggested controls to disable in Security Hub CSPM には、グローバルリソースを使うコントロールが網羅的に列挙されています(Account 系、CloudFront 系、IAM.1〜27、KMS.1 / KMS.2、Route53.2、WAF 系、GlobalAccelerator.1 など)。

ここでは FSBP の中から、IAM 系と KMS 系を抜粋して整理してみます

コントロール ID 内容 対象リソース
IAM.1 IAM ポリシーで完全な「*」管理権限を許可していないこと AWS::IAM::Policy
IAM.2 IAM ユーザーへの IAM ポリシーの直接アタッチを禁止 AWS::IAM::User
IAM.3 IAM ユーザーアクセスキーを 90 日以内にローテーション AWS::IAM::User
IAM.4 IAM ルートユーザーアクセスキーが存在しないこと AWS::::Account
IAM.5 コンソールパスワードを持つ IAM ユーザーへの MFA 必須 AWS::IAM::User
KMS.1 IAM カスタマー管理ポリシーで全 KMS キーの復号許可を禁止 AWS::IAM::Policy
KMS.2 IAM プリンシパルが全 KMS キー復号を許可するインラインポリシー禁止 AWS::IAM::Group/Role/User

これらは 東京(ホームリージョン)でのみ評価され、それ以外のリージョンでは自動的に無効化 されます。

3. Configuration Policy はどれくらいシンプルになるか

Before: 自動無効化を知らない場合

「東京でのみ IAM 系を有効化したい」要件を Configuration Policy で表現しようとすると、いくつか問題にぶつかります。

  • IAM.1 を東京で ENABLED、他リージョンで DISABLED にしたい
  • しかし、Configuration Policy には リージョン別にコントロールを ON/OFF するフィールドが存在しない
  • そのため、以下のいずれかを選ぶしかありません
    • 全リージョンで DISABLED にする → 東京でも評価されず、IAM 系の検出が効かない
    • 各メンバーアカウントを SELF_MANAGED_SECURITY_HUB に切り替えて、リージョンごとに update-security-control を呼ぶ → 運用負荷が一気に上がる

「どちらもベストとは言えない…」となる選択肢です。

After: 自動無効化を活用する場合

Central Configuration の自動無効化が効くことを知っていれば、Configuration Policy には 全リージョンで無効化したいコントロール だけを書けば済みます。

{
  "SecurityHub": {
    "ServiceEnabled": true,
    "EnabledStandardIdentifiers": [
      "arn:aws:securityhub:ap-northeast-1::standards/aws-foundational-security-best-practices/v/1.0.0"
    ],
    "SecurityControlsConfiguration": {
      "DisabledSecurityControlIdentifiers": [
        "Account.1",
        "IAM.6",
        "CloudTrail.5"
      ]
    }
  }
}

この設定で、以下のような状態になります。

  • IAM.1〜5、KMS.1、KMS.2 などのグローバル系コントロール: 東京でのみ有効、他リージョンでは自動無効化
  • Account.1 / IAM.6 / CloudTrail.5: 全リージョンで無効化(明示的に指定)

「東京以外で IAM 系を無効化」を Configuration Policy 上に書く必要がなくなり、設計もメンテナンスもかなり楽になります。

4. 自動無効化の状態を確認する

実際に自動無効化が効いているかは、batch-get-security-controls API で確認できます。

ホームリージョン(東京)で IAM.1 を確認すると、SecurityControlStatusENABLED になっていました。

aws securityhub batch-get-security-controls \
  --security-control-ids IAM.1 \
  --region ap-northeast-1
{
  "SecurityControls": [
    {
      "SecurityControlId": "IAM.1",
      "SecurityControlArn": "arn:aws:securityhub:ap-northeast-1:<アカウントID>:security-control/IAM.1",
      "Title": "IAM policies should not allow full \"*\" administrative privileges",
      "Description": "...(中略)...",
      "RemediationUrl": "https://docs.aws.amazon.com/console/securityhub/IAM.1/remediation",
      "SeverityRating": "HIGH",
      "SecurityControlStatus": "ENABLED",
      "UpdateStatus": "READY",
      "Parameters": {}
    }
  ]
}

一方、ホームリージョン以外(例としてバージニア北部)で同じコントロールを確認すると、SecurityControlStatusDISABLED になっています。

aws securityhub batch-get-security-controls \
  --security-control-ids IAM.1 \
  --region us-east-1
{
  "SecurityControls": [
    {
      "SecurityControlId": "IAM.1",
      "SecurityControlArn": "arn:aws:securityhub:us-east-1:<アカウントID>:security-control/IAM.1",
      "Title": "IAM policies should not allow full \"*\" administrative privileges",
      "Description": "...(中略)...",
      "RemediationUrl": "https://docs.aws.amazon.com/console/securityhub/IAM.1/remediation",
      "SeverityRating": "HIGH",
      "SecurityControlStatus": "DISABLED",
      "UpdateStatus": "READY",
      "Parameters": {}
    }
  ]
}

ホームリージョン(東京)では ENABLED、それ以外のリージョンでは DISABLED になっており、Central Configuration による自動無効化が想定通り動作していることが確認できました。

補足: リージョン別に細かく制御したい場合

「グローバル系以外のコントロールも、リージョンごとに ON/OFF を変えたい」というケースもあります。この場合は Central Configuration の Configuration Policy だけでは要件を満たせません。

  • Configuration Policy にはリージョン別の制御フィールドがないため、全リージョン一括設定が前提
  • 細かく制御したい場合は、対象アカウントを SELF_MANAGED_SECURITY_HUB に切り替えて、リージョンごとに update-security-control を呼ぶ必要がある

ただし、これをやると Central Configuration を採用したメリット(一元管理)が薄れてしまいます。自動無効化で対応できる範囲は素直に活用し、どうしても必要なところだけ Self-Managed に倒す、というバランスが現実的だと感じました。

まとめ

Central Configuration を使うなら、グローバルリソース関連コントロールはホームリージョン以外で自動的に無効化されます。Configuration Policy には「全リージョンで無効化したいコントロール」だけを書けば十分で、「東京以外で IAM 系を無効化」を明示する設計は不要です。リージョン別にきめ細かく制御したい場合のみ Self-Managed への切り替えを検討する、というスタンスが良さそうです。

Configuration Policy で「IAM 系のリージョン制御どうしよう…」と悩むのは、Central Configuration を使っているなら不要だった、というのが今回の気付きでした。

参考ドキュメント

さいごに

Security Hub CSPM の Central Configuration には、「グローバルリソース関連コントロールの自動無効化」という仕様が組み込まれていました。

知っていれば設計がシンプルになる一方、知らずに Self-Managed で頑張ってしまうと、運用が複雑になりがちなポイントだと思います。同じように Configuration Policy の設計で悩んでいる方の参考になれば嬉しいです。

この記事がどなたかのお役に立てれば幸いです。
以上、クラウド事業本部 コンサルティング部のいたくら(@itkr2305)でした!

この記事をシェアする

関連記事