Organizations環境でSecurityHubを全アカウントで有効化する方法(2025年版)
お疲れさまです。とーちです。
先日、AWS Organizations環境でSecurityHubを全アカウントで有効化する必要があったのですが、2025年現在ではどのような方法が最も効率的なのか調べてみました。
全体の流れと各手順の役割
まず、全体の流れを整理しておきましょう。SecurityHubの組織全体での有効化は以下の4つの手順で行います。なお、今回は中央管理設定を使用してセッティングを行います。
手順 | 実行場所 | 主な変更内容 | 目的 |
---|---|---|---|
1 | 管理アカウント | 委任管理者の指定、信頼されたアクセスの有効化 | SecurityHubの組織管理権限を委任管理アカウントに移譲 |
2 | 委任管理アカウント | ホームリージョンとリンクリージョンの設定 | 検出結果を集約するリージョンを決定 |
3 | 委任管理アカウント | 中央管理設定の有効化 | 組織全体の一元管理を開始 |
4 | 委任管理アカウント | 中央設定ポリシーの作成・適用 | 全アカウントでSecurityHubを有効化 |
それでは、各手順を詳しく見ていきましょう。
前提条件
前提として以下の状況からSecurityHubをセットアップしていくものとします。
- AWS Organizationsは作成済み
- AWS Organizations における Security Hub の信頼されたアクセス設定は無効状態
- 管理アカウント及びメンバーアカウントの全リージョンでSecurityHubは無効状態
- AWS Control Towerのリージョン拒否コントロールを有効化し、必要のないリージョンはService Control Policy(SCP)で拒否済み
- AWS Configは管理アカウント、メンバーアカウント(拒否リージョン以外)ともに有効化済み
なお、AWS Configの設定状況については以下のコマンドで確認できます。
for region in $(aws ec2 describe-regions --query 'Regions[].RegionName' --output text); do
recorder_info=$(aws configservice describe-configuration-recorders \
--region $region \
--query 'ConfigurationRecorders[0].{Name:name,AllSupported:recordingGroup.allSupported}' \
--output text 2>/dev/null)
recording_status=$(aws configservice get-configuration-recorder-status \
--region $region \
--query 'ConfigurationRecordersStatus[0].recording' \
--output text 2>/dev/null)
if [ "$recorder_info" != "None" ] && [ "$recorder_info" != "" ]; then
echo "$region | $recorder_info | $recording_status"
else
echo "$region | Not Configured | Not Configured | False"
fi
done
手順1: 委任管理者の指定
手順1の目的と実行内容
この手順では、管理アカウントからSecurityHubの組織管理権限を特定のアカウント(委任管理アカウント)に移譲します。
実行場所: 管理アカウント
実行コマンド:
aws securityhub enable-organization-admin-account --admin-account-id 123456789012
手順1による変更内容
このコマンドは委任管理アカウントの指定だけでなく以下のような複数の変更が行われます。
変更1: 信頼されたアクセスの有効化
AWS Organizationsにおける、SecurityHubの信頼されたアクセス設定が有効になります。
変更2: 委任管理者の設定
指定したアカウントが委任管理者として設定されます。設定状況は以下のコマンドで確認できます。
aws securityhub list-organization-admin-accounts
実行結果:
{
"AdminAccounts": [
{
"AccountId": "123456789012",
"Status": "ENABLED"
}
]
}
変更3: 委任管理アカウントでのSecurityHub有効化
コマンドを実行したリージョンにおいて、委任管理アカウント上のSecurityHubが自動的に有効化されます。
確認コマンド(委任管理アカウントで実施):
aws securityhub describe-hub --output yaml
実行結果:
AutoEnableControls: true
ControlFindingGenerator: STANDARD_CONTROL
HubArn: arn:aws:securityhub:ap-northeast-1:123456789012:hub/default
SubscribedAt: '2025-06-05T06:20:24.326Z'
手順2: ホームリージョンの設定(リージョン集約設定)
手順2の目的と実行内容
この手順では、SecurityHubの検出結果を集約するホームリージョンと、SecurityHubを有効化する対象リージョンを設定します。
ここで設定したホームリージョンと集約対象としたリージョンが中央設定の管理対象となります。
実行場所: 委任管理アカウントのマネジメントコンソール
実行方法: マネジメントコンソールでの設定(公式ドキュメントを見る限りでは、この作業はAWS CLIでは実行できなさそう)
手順2の実行手順
委任管理アカウントのマネジメントコンソールでSecurityHubの画面を開き、「設定」→「リージョン」から設定を行います。
設定項目1: ホームリージョンの選択
検出結果を集約する中心となるリージョンを選択します。今回はap-northeast-1を選択しました。
設定項目2: 利用可能なリージョンの選択
SecurityHubを有効化する対象リージョンを選択します。今回はリージョン拒否コントロールの対象となっていないリージョンのみを選択しました。
設定項目3: 将来のリージョンをリンク
新しいリージョンが追加された際に自動でSecurityHubを有効化するかを設定します。今回はリージョン拒否コントロールを使用しているため、「将来のリージョンをリンク」は無効としました。
手順2による変更内容
設定が完了すると、「リージョン集約が正常に設定されました」というメッセージが表示されます。
この設定により、委任管理アカウント上で以下が決定されます
- ホームリージョン: ap-northeast-1(SecurityHub有効化対象)
- リンクされたリージョン: 選択したリージョン群(SecurityHub有効化対象)
手順3: 中央管理設定の有効化
手順3の目的と実行内容
この手順では、SecurityHubの中央管理機能を有効化し、組織全体の一元管理を開始します。
実行場所: 委任管理アカウント(必ずホームリージョンで実行)
実行コマンド:
aws securityhub --region <ホームリージョンを指定> update-organization-configuration \
--no-auto-enable \
--organization-configuration '{"ConfigurationType": "CENTRAL"}'
手順3による変更内容
このコマンドを実行すると、以下の変更が自動的に行われます。
変更1: 中央管理設定の有効化
組織全体でのSecurityHub中央管理が有効になります。
確認コマンド:
aws securityhub describe-organization-configuration --region ap-northeast-1
実行結果:
{
"AutoEnable": false,
"MemberAccountLimitReached": false,
"AutoEnableStandards": "NONE",
"OrganizationConfiguration": {
"ConfigurationType": "CENTRAL",
"Status": "ENABLED",
"StatusMessage": "Central configuration has been enabled successfully."
}
}
変更2: 全リンクリージョンでのSecurityHub有効化
リンクされたすべてのリージョンで、委任管理アカウントのSecurityHubが自動的に有効化されます。なお、この時点では、メンバーアカウントのSecurityHubはまだ有効化されません。メンバーアカウントの有効化は次の手順で行います。
確認コマンド:
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
echo "##### check hub in ${region}"
aws --region ${region} securityhub describe-hub --output yaml
done
手順4: 中央設定ポリシーの設定
手順4の目的と実行内容
この手順では、中央設定ポリシーを作成・適用し、組織内の全アカウントでSecurityHubを有効化します。
実行場所: 委任管理アカウント
実行方法: マネジメントコンソール(CLIでも可能)
この作業はCLIでも実行可能ですが、手早く設定する場合はマネジメントコンソールから行うのが便利です。ただし、今後の運用を考えると中央設定ポリシーについてはIaCで管理したいので、手動での作業は上記の「手順3: 中央管理設定の有効化」の有効化までに留めておくのが良いかなと思います。
なお、CLIで中央設定ポリシーを作成する場合は、以下の記事が参考になります。
Security HubのCentral Configuration(中央設定)をAWS CLIでやってみた #AWSreInvent | DevelopersIO
手順4の実行手順(マネジメントコンソール)
ステップ1: ポリシー作成の開始
委任管理アカウントで「設定」から「ポリシーを作成」を選択します。
ステップ2: ポリシー設定の確認
設定タイプについては、今回は「組織全体でAWSが推奨するSecurity Hub の設定を使用」を選択しました。
設定についてレビューする画面が出るので、「have reviewed this policy overview.」にチェックをつけ「ポリシーを作成して適用」を押します。
これで設定は完了です。
手順4による変更内容
上記の操作により、以下の内容の中央設定ポリシーが作成・適用されます。
変更1: SecurityHubの有効化設定
内容:
- ポリシー適用対象アカウント(組織内全アカウント)のホームリージョン及びリンクされたリージョンのSecurityHubが有効化される
- 今後追加されるアカウントでも同様にSecurityHubが有効化
変更2: セキュリティ標準の自動有効化
内容:
AWS Foundational Security Best Practices v1.0.0
が全アカウントで自動的に有効化される
変更3: コントロール設定の適用
内容:
- 中央設定ポリシーでは「特定のコントロールを無効化」が設定される
- デフォルトでは無効にするコントロールは選択されていないため、設定時点での全てのコントロールが有効化される
変更4: 適用範囲の設定
変更内容:
- 組織全体にポリシーが適用される
- 委任管理アカウント、メンバーアカウントのほか、管理アカウントも対象となる
まとめ
2025年現在、AWS Organizations環境でSecurityHubを全アカウントで有効化する方法はとして、中央管理設定を使用することがオススメです。
また本格的に運用する際は中央設定ポリシーをIaCで管理することをおすすめします。
各手順の変更内容を理解することで、トラブルシューティング時にも「どの段階で何が設定されるべきか」を把握できるので、トラブル時にも対処しやすくなるのではないでしょうか。
以上、とーちでした。