AWS Control Tower のコントロール一覧をCSV化してみる【AWS CLI】
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
以下アップデートにより、API から 「Control Tower の各コントロールの内容」を参照できるようになりました。
早速 この API を使って Control Tower のコントロール一覧を作ってみます。
※ちなみに、AWS公式ドキュメントでは Controls Reference Guide というものが提供されており、 そこから各種情報も閲覧できます。
コントロール一覧(CSV)
controlcatalog list-controls および controlcatalog get-control を使って情報を取得しました。 以下 Gist に結果を載せています。
CSVは以下項目をまとめたものです。
- コントロール名
 - コントロールの動作(Behavior)
 - コントロールのスコープ(Scope)
 - 東京リージョンでのサポート有無 (※ Scope = REGIONAL の場合)
 - 大阪リージョンでのサポート有無 (※ Scope = REGIONAL の場合)
 - バージニア北部リージョンでのサポート有無 (※ Scope = REGIONAL の場合)
 
適宜スプレッドシートなどで加工、フィルタください。

内容を見てみる
コントロール数
全部で 513のコントロールがあります。 動作ごとの内訳は以下のとおり。
| コントロール数 | |
|---|---|
| 検出 | 229 | 
| プロアクティブ | 235 | 
| 予防 | 49 | 
| 合計 | 513 | 
リージョンごとの対応
検出/プロアクティブコントロールのスコープは全て REGIONAL です。 リージョンごとに対応/非対応があります。 なお、予防コントロールは全て GLOBAL です。
以下、リージョンごとのコントロール対応数です。
| 東京 | 大阪 | バージニア北部 | |
|---|---|---|---|
| 検出(全229) | 229 | 117 | 226 | 
| プロアクティブ(全235) | 235 | 235 | 235 | 
プロアクティブコントロールは東京、大阪、バージニア北部の全てで対応していました。
大阪では検出コントロールが他に比べて少なめです。
基本的に東京、バージニア北部では全コントロールがサポートされています。 ただし、なぜかバージニア北部にて以下3つが未サポートでした。

実際にマネコンでも「デプロイ不可」でした。

対象のAWSサービス
荒い調査ですが「コントロール名に含まれるAWSサービス」ランキングを調べました。
▼ 含まれるAWSサービス名TOP10(全コントロール)
| AWSサービス | このサービス名を含む コントロール数  | 
|---|---|
| RDS | 55 | 
| EC2 | 54 | 
| S3 | 45 | 
| IAM | 26 | 
| VPC | 21 | 
| CloudWatch | 21 | 
| ECS | 19 | 
| Redshift | 18 | 
| EBS | 15 | 
| CloudTrail | 15 | 
▼ 含まれるAWSサービス名TOP10(検出コントロール)
| AWSサービス | このサービス名を含む コントロール数  | 
|---|---|
| RDS | 25 | 
| EC2 | 21 | 
| S3 | 18 | 
| IAM | 15 | 
| VPC | 13 | 
| Redshift | 9 | 
| Neptune | 8 | 
| ECS | 7 | 
| EBS | 7 | 
| CloudTrail | 7 | 
▼ 含まれるAWSサービス名TOP10(プロアクティブコントロール)
| AWSサービス | このサービス名を含む コントロール数  | 
|---|---|
| RDS | 30 | 
| EC2 | 29 | 
| S3 | 17 | 
| CloudWatch | 13 | 
| ECS | 12 | 
| CloudFront | 11 | 
| Redshift | 9 | 
| IAM | 9 | 
| EC2 Auto Scaling | 9 | 
| Auto Scaling | 9 | 
▼ 含まれるAWSサービス名TOP10(予防コントロール)
| AWSサービス | このサービス名を含む コントロール数  | 
|---|---|
| Control Tower | 13 | 
| S3 | 10 | 
| Config | 9 | 
| EC2 | 4 | 
| EBS | 4 | 
| CloudTrail | 4 | 
| Lambda | 3 | 
| CloudWatch | 3 | 
| IAM | 2 | 
| CloudFormation | 2 | 
おわりに
Control Tower のコントロール一覧をCSVにしてみました。
ちなみにマネジメントコンソールからコントロール一覧を見たほうが情報量が多いです。

今回のコントロール一覧をざっと見て、気になるものがあれば マネジメントコンソールで詳細を確認するのが良いでしょう。
以上、参考になれば幸いです。
参考
補足
CSV生成のスクリプト
output_file="./ct-all-controls.csv"
echo '"Name","Behavior","Scope","ap-northeast-1","ap-northeast-3","us-east-1"' > $output_file
aws controlcatalog list-controls --output text \
  --query "Controls[].[Arn]" \
| while read arn; do
    control=$(aws controlcatalog get-control --control-arn $arn --output json)
    # コントロール名 ( ["] は [""] にエスケープ )
    c_name=$(echo "$control" | jq -r '.Name' | sed -r 's/\"/""/g')
    # 挙動
    c_behavior=$(echo "$control" | jq -r '.Behavior')
    # スコープ
    c_scope=$(echo "$control" | jq -r '.RegionConfiguration.Scope')
    # リージョン情報取得
    regions="-"
    if [[ "$c_scope" = "REGIONAL" ]] ; then
      regions=$(echo "$control" | jq -r '.RegionConfiguration.DeployableRegions | join("\t")')
    fi
    # 東京リージョン対応しているか
    apn1="-"
    if [[ "$regions" == *ap-northeast-1* ]] ; then
      apn1="supported"
    fi
    # 大阪リージョン対応しているか
    apn3="-"
    if [[ "$regions" == *ap-northeast-3* ]] ; then
      apn3="supported"
    fi
    # バージニア北部リージョン対応しているか
    use1="-"
    if [[ "$regions" == *us-east-1* ]] ; then
      use1="supported"
    fi
    # 出力
    echo "\"${c_name}\",\"${c_behavior}\",\"${c_scope}\",\"${apn1}\",\"${apn3}\",\"${use1}\"" >> $output_file
  done








