全体の流れ
① 管理アカウントでSecurityHubを有効化する
↓
② SecurityHUBの管理権限を、管理アカウントから監査(Audit)アカウントに委任する
=監査アカウントにて、ControlTower全体のSecurityHub(設定したセキュリティ基準を満たせているか)を確認できるようにするための準備を行う。
→この時点では管理アカウントと監査アカウントでのみSecurityHubが有効化されている!
↓
③ 中央設定を行う
=監査アカウントにて、ControlTower全体のSecurityHub(設定したセキュリティ基準を満たせているか)を確認できるようにするための実際の設定を行う。
→ここでControlTowerに所属しているアカウントやOUはSecurityHubを有効化され、結果が監査アカウントに集約される。
中央設定とは
https://docs.aws.amazon.com/ja_jp/securityhub/latest/userguide/central-configuration-intro.html (←公式ドキュメント)
中央設定とは、ControlTowerに所属している全アカウント・全リージョンに対し、一括でSecurityHubを有効化できるものです。
(たくさんポチポチしなくてラッキーな反面、色々困ったこともありました。)
SecurityHubを設定しよう
まず、管理アカウントでSecurityHubを有効化するためのベースを作成します。
Organizationsのサービス画面から、「SecurityHub」を探します。
見つけたらサービス名のリンクを押下します。
するとポップアップが表示されるので、チェック&入力を行い、「信頼されたアクセスを有効にする」を押下します。
画面上部に「SecurityHubに対する信頼され他アクセスを正常に有効にしました」を表示されます。
これで組織全体で有効化するためのベースが出来ました!
次に管理アカウントでSecurityHubを有効化します。
「SecurityHubに移動」を押下します。
ここでは有効にしたいセキュリティ基準を選択します。
今回は「AWS基礎セキュリティのベストプラクティスv1.0.0(FSBP)」を設定します。
一番下の「委任された管理者」項目で、委任したいアカウント(今回はAudit)のアカウントIDを入力します。
入力後、【委任】を押下すると以下のような画面になります。
ここで委任先が間違っていないことを確認したら、【SecurityHubの有効化】を押下します。
「管理者が正常に委任されました」を表示されたら成功です。
実際に、下の画面でもFSBPのみ有効化されていることが分かりますね。
管理アカウントから見て、委任が完了していることが確認できます。
ここまでで、管理アカウント→Auditへの委任設定は完了しました。
ここからが本番
まずAuditアカウントから見て、委任が完了していることが確認できます。
組織全体でSecurityHubを有効化するために、左のメニューバーから設定の中の【設定】をクリック。
(以下の画面を見ると、この時点ではFSBPと設定していないCISが有効になっている素振りが感じられますが、後で解消するので今は放っておいて問題ないです)
設定ページに飛んだあと、初期は概要項目がローカル設定になっていると思います。それを確認しつつ、編集を押下します。
するとポップアップが表示されるので、【中央設定】を選択し、【中央設定を開始】を押下してください。
→中央設定を開始するでも、編集を押すでも、同じ画面同じ手順になります
すると中央設定の起動画面に移るので、以下の通り設定を行っていきます。
まずリージョンです。ControlTowerを有効化した際に設定した、ランディングゾーンで有効化しているリージョンを選択してください。
(「利用可能なすべてのリージョンのリンクを設定」のチェックを外すと、個別にリージョンが選択できるようになります↓)
【確認して続行】を押下します。
【ポイント】
・「利用可能なすべてのリージョンのリンクを設定」について。「なんとなく全部包括していた方がよくない?特段何もないなら無理に狭めなくてよくない?」と思いがちなのですが、これで失敗しました・・・。
「利用可能なすべてのリージョンのリンクを設定」を選択して最後まで設定を行うと、こんな感じのエラーが出るようになります↓
<エラー文>Policy association failed because standards could not be enabled in Regions ap-northeast-1, us-west-2 and 3 other(s). Check if AWS Config is enabled and properly configured and retry.
これが全然解消しないんですね。Configあるけど!有効化されてるけど!の繰り返しで、サポートに問い合わせても「Config有効化してね」と言われるだけで困ったものでした。
原因としては、「すべてのリージョンを有効化してしまうことにより、こちらが想定していない範囲(ランディングゾーンで有効化していないリージョン)の設定もAWSが見に行ってしまい、Configが設定されていない(当たり前)と怒られていた」という感じのようです。ControlTowerで統制を有効にしたリージョンにしたいのであれば、ここはリージョンを一個一個設定するのがベスト、ということのようです。以下ドキュメントです。
>設定ポリシーは、ホームリージョンとリンクされたすべてのリージョンで有効になります。
https://docs.aws.amazon.com/ja_jp/securityhub/latest/userguide/central-configuration-intro.html
・「将来のリージョンのリンクを設定」について。このチェックをつけておくと、将来リージョンが追加された時にAWS側で自動的にリージョンを追加してくれます。
【組織を首尾よく一元化しました。最初の構成ポリシーを作成します】という緑の帯が画面上部に出てきたら、次のステップに進みます。
画面をスクロールして、今回はFSBPのみを設定したいので、「SecurityHUBの設定をカスタマイズ」を選択します。
カスタムポリシーではFSBPを選択。
上記で設定したルールセット以外は現状必要がないため、「すべてのコントロールを有効」を選択します。(ここ日本語わかりにくいので注意です)
スクロールし、適用するアカウントは「すべてのアカウント」を選択。
ポリシーの詳細を決定します。ポリシー名、ポリシーの説明、タグ付与が可能です。
【次へ】を押下します。
【ポイント】
・カスタムポリシー(コントロール)について。躓きました。
まず、個々の設定は以下の通りです。
すべてのコントロールを有効→直前のセキュリティ基準で選択したルールが有効化される。
特定のコントロールを有効化→基本全部無効化。その下で「有効にするコントロール」を選択できるので、ここで有効化したコントロールのみが適用される。
特定のコントロールを無効化→上記の有効化バージョン。
つまり、「特定のコントロールを有効化」を選択してしまうと、直前でFSBPを選んでいても無効化されます。
日本語が解読できませんでした。気づいたのは、何故か設定したはずのSecurityHubが0%になっていたからでした・・・。
しかしここで注意です!一度「特定のコントロールを有効化」(つまり完全無効化)の方で今回のポリシーを有効化した後に、同じポリシーを変更して「すべてのコントロールを有効化」しようとすると、無効化と有効化の設定がバッティングしてエラーが起きます。
<エラー文>Cannnot configure both Enabled and Disabled security controls in the policy
この時はポリシー単位の設定で大丈夫ですが、一度SecurityHubを無効化する必要があります。そうすればバッティングせず直ります。
日本語との勝負です。
・「有効化するアカウント」について。ここで一部アカウントを選択しても、何故か最後の確認の時点で「すべてのアカウントを有効化する」となります。恐らく組織という単位で設定が行われるのではないか・・・という推測ですが、要注意です。
後々中央設定から一部アカウントを除外することはできるので、ここは我慢です。一旦すべてのアカウントに対して設定を行います。
最後に確認画面です。内容を確認しつつスクロールして、【ポリシーを作成して適用】を押下します。
(ステップ3にて、コントロールが「すべて無効」となっていますが、本来は「すべて有効」となっています。)
ここまでで、中央設定自体は完了です。
設定画面に遷移し、上部に「ポリシーが正常に作成されました」と表示され、ポリシーができていることを確認します。
次に、同じく設定の組織タブから各アカウントにこのポリシーが適用されているのかを確認します。
ページに飛んですぐはポリシーのステータスが保留中になっていますが、これが成功/失敗になっていきます。少し時間はかかりますが、長くてもだいたい10分くらいで結果が表示されると思います。
rootOUと管理アカウントが「失敗」と表示されるのはデフォルトのため、気にしないでください。
【ポイント】
あまりにも長すぎるとき(1hくらい・・・)はほとんど失敗です・・・
待てなさすぎる場合はOUやアカウントのラジオボタンをクリックすると、何故か最速で結果が切り替わったりします。お試しあれ。
【ポイント2】
基本的には管理アカウントとrootOU以外が成功になるはずです。
なんで管理アカウントはならないの?おかしくないか?と思いがちですが、管理アカウントはデフォルトでConfigを有効化していないので、失敗になります。(SecurituHub自体、Configの上に階層を作って検知しているようなものなので)管理アカウントはデフォルトだとCloudTrailしか有効化されていません。
そのため、管理アカウントとrootOUが失敗(rootOUは配下のアカウント・OUがすべて成功にならないと成功にならないため、管理アカウントが失敗である限りrootOUも失敗となる)が一つの成功例になります。
あとはControlTowerに所属していないがOrganizationsに所属している、というアカウントもこの中央設定ではポリシーを適用されそうになります。ですが、必ず「失敗」になるのでご安心ください。
とはいっても、失敗があるとなんか気になりますよね。
なので今回は管理アカウントを中央設定から除外して、すべて成功にしたいと思います。
設定したいアカウントのラジオボタンを押下して、【編集】を押下します。
管理タイプにて「セルフマネージド」を選択し、【次へ】を押下します。
確認して、【適用】を押下します。
他のOUやアカウントと同様に、管理アカウントとrootOUがポリシーのステータス成功となることを確認します。
上記同様の手順で中央設定から除外することができるので、管理アカウント以外にも適用できます。
ここまで来たら、最後にLogArchiveアカウントからSecurityHUBを確認し、設定の中に設定タブがないことを確認します。
=中央設定など、SecurityHUBの設定を変更する権限がないことを示しています。また、画面上部にどのアカウントで管理されているかも表示されます。(伏せているところはアカウントIDが表示されます)
ここまでで、SecurityHUBの設定については以上です!
今後新しくアカウントをControlTowerに追加する際、中央設定をしておくことで自動的にポリシーが適用され、ポリシーステータスが成功になります!