AWS Control Tower のコントロール一覧をCSV化してみる【AWS CLI】
以下アップデートにより、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