Control Tower のコントロール(実装先:SCP)をすべて有効にしてみた

2023.10.25

アノテーション 構築チームのいたくらです。
Control Tower のコントロール(実装先:SCP)をすべて有効にしたときの SCP について調べてみました。

はじめに

以下、Control Tower 有効化済みの管理アカウントで操作しています。
また、ここに記載している画面キャプチャや情報は 2023/10/20 時点のものです。

前提知識

例えば、以下の設定で Control Tower を有効化すると、

基礎となる OU(SecurityOU)と 追加の OU(SandboxOU)が作成されます。

知りたいこと

SecurityOU や SandboxOU には、Control Tower によって SCP( aws-guardrails- で始まる SCP)が 2 つ付与されていました。

以下のスクリーンショットは SandboxOU に付与されている SCP 一覧です。

SandboxOU に付与された 2 つの SCP の内容を確認すると、 ガイダンス=必須、実装= Service control policy (SCP) でフィルタしたコントロールのうち、下記 15 個のコントロールを実現する SCP が記述されていました。

  • [AWS-GR_LOG_GROUP_POLICY] AWS Control Tower によって設定された Amazon CloudWatch Logs ロググループの変更を許可しない
  • [AWS-GR_CLOUDWATCH_EVENTS_CHANGE_PROHIBITED] AWS Control Tower によって設定された Amazon CloudWatch の変更を許可しない
  • [AWS-GR_SNS_CHANGE_PROHIBITED] AWS Control Tower によって設定された Amazon SNS への変更を不許可にします
  • [AWS-GR_SNS_SUBSCRIPTION_CHANGE_PROHIBITED] AWS Control Tower によって設定された Amazon SNS のサブスクリプションへの変更を不許可にします
  • [AWS-GR_CLOUDTRAIL_CHANGE_PROHIBITED] CloudTrail への設定変更を不許可にします
  • [AWS-GR_CLOUDTRAIL_CLOUDWATCH_LOGS_ENABLED] CloudTrail イベントと CloudWatch logs を統合する
  • [AWS-GR_CLOUDTRAIL_ENABLED] 利用可能なすべてのリージョンで CloudTrail を有効にする
  • [AWS-GR_CLOUDTRAIL_VALIDATION_ENABLED] CloudTrail ログファイルの整合性検証を有効にする
  • [AWS-GR_CONFIG_AGGREGATION_AUTHORIZATION_POLICY] AWS Control Tower によって作成された AWS Config アグリゲーション認可の削除を許可しない
  • [AWS-GR_CONFIG_AGGREGATION_CHANGE_PROHIBITED] AWS Control Tower で AWS Config リソースに付けたタグの変更を許可しない
  • [AWS-GR_CONFIG_CHANGE_PROHIBITED] AWS Config への設定変更を不許可にします
  • [AWS-GR_CONFIG_ENABLED] 利用可能なすべてのリージョンで AWS Config を有効にする
  • [AWS-GR_CONFIG_RULE_CHANGE_PROHIBITED] AWS Control Tower によって設定された AWS Config ルールへの変更を不許可にします
  • [AWS-GR_IAM_ROLE_CHANGE_PROHIBITED] AWS Control Tower と AWS CloudFormation によって設定された AWS IAM ロールの変更を許可しない
  • [AWS-GR_LAMBDA_CHANGE_PROHIBITED] AWS Control Tower によって設定された AWS Lambda 関数の変更を許可しない

では、現時点で Control Tower から有効にできる 実装= Service control policy (SCP) のコントロールをすべて有効にした場合、この 2 つの SCP に収まるのだろうか? と気になったので、調べてみました。

先に結論

2023/10/20 時点では Control Tower から有効にできる 実装= Service control policy (SCP) のコントロールをすべて有効にした場合、前述の 2 つの SCP に収まります。

調べてみた

コントロールを有効にする

試しに ガイダンス=強く推奨、実装= Service control policy (SCP) でフィルタしたコントロールのうちの 1 つ を有効にします。
まず有効にしたいコントロールをクリックし、右上の「コントロールを有効にする」をクリックします。

どの OU に対してコントロールを有効にするか選択する画面が表示されるので、今回は SandboxOU を選択し、「OU のコントロールを有効にする」をクリックします。

少し待ってから「OU は有効です」タブをクリックすると、SandboxOU に対してコントロールが有効になったことが確認できます。

SCP を確認する

コントロールを有効化前に取得した SCP を aws-guardrails-xxxxxx_before.json(左側) 、コントロール有効化後に取得した SCP を aws-guardrails-xxxxxx_after.json(右側)という名前で保存して、差分比較した結果がこちらです。

有効化したコントロールを実現する SCP が追加されていることが分かります。

すべてのコントロールを有効にして SCP を確認する

今回の目的は「現時点で Control Tower から有効にできる 実装= Service control policy (SCP) のコントロールをすべて有効にした場合、この 2 つの SCP に収まるかを確認すること」なので、同様の手順ですべてのコントロールを有効にします。
有効にしたコントロールは、必須(デフォルトで有効の 15 個)+強く推奨(2 個)+選択的(10 個)=合計 27 個 です。
すべてのコントロールを有効にして、それぞれの SCP の文字数をカウントした結果がこちらです。

$ wc aws-guardrails-xxxxxx_after5.txt -m
4995 aws-guardrails-xxxxxx_after5.txt
$ wc aws-guardrails-yyyyyy_after8.txt -m
4022 aws-guardrails-yyyyyy_after8.txt

AWS 公式ドキュメントに、SCP の最大サイズは 5120 文字と記載があるので、それぞれの SCP の空きは以下の通り。

  • aws-guardrails-xxxxxx:125 文字
  • aws-guardrails-yyyyyy:1098 文字

SCP:aws-guardrails-xxxxxx は結構ギリギリまで記述された状態、SCP:aws-guardrails-yyyyyy は、まだ 1000 文字以上記述できる余裕があるという結果になりました。

補足

SCP ドキュメントの文字数カウント

前述の「SCP を確認する」で、コントロール有効化後に取得した SCP を aws-guardrails-xxxxxx_after.json という名前で保存したとき、このファイルの文字数を確認したら、以下の結果でした。

$ wc aws-guardrails-xxxxxx_after.json -m
7969 aws-guardrails-xxxxxx_after.json

5120 文字を超えている!? というかこの文字数からして、コントロールを 1 つ追加で有効にする前から 5120 文字を超えていたのでは?
と混乱し、AWS 公式ドキュメントを見直すと下記の記載がありました。

注意: AWS Management Console を使用してポリシーを保存した場合、JSON 要素間で引用符の外側にある余分な空白 (スペースや改行など) は削除され、カウントされません。SDK オペレーションまたは AWS CLI を使用してポリシーを保存した場合、ポリシーは指定したとおりに保存され、文字の自動削除は行われません。

出典:AWS Organizations のクォータ - AWS Organizations

今回はマネジメントコンソールを使用して Control Tower のサービスページからコントロールの有効化をしているので、前者に当てはまりそうです。
スペースや改行などを削除して文字数を再確認したら、以下の結果でした。

$ wc aws-guardrails-xxxxxx_after.txt -m
4249 aws-guardrails-xxxxxx_after.txt

5120 文字以内に収まっていました、ですよね。
※もしかしたら本来カウントすべきスペースとかも削除してしまっているかもしれないので、本ブログに記載している文字数は大体の目安として参考にしていただければ幸いです。

ポリシーの保存方法によって SCP ドキュメントの文字数カウント方法が若干違うようなので、お気を付けください。

コントロールを無効にしたときの SCP の変化

Control Tower からコントロールを無効にすると、無効にしたコントロールに該当する SCP が削除されました。
(左側:無効化前、右側:無効化後)

あとがき

Control Tower のコントロール(実装先:SCP)をすべて有効にしたときの SCP について調べてみました。
OU 設計をする際に、「1 つの OU に付与できる SCP は 5 つまで」がポイントになってきますが、SecurityOU と SandboxOU には Control Tower を有効化した際に SCP が 2 つずつ付与されるので、ユーザ側で自由に記述して付与できる SCP は 3 つであることに注意が必要です。
実現したいポリシーが Control Tower のコントロールにあれば、Control Tower から有効にした方が SCP を無駄なく記述できる可能性があるので、要件や環境に合わせて検討いただければと思います。

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。
「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。
現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。