[小ネタ] AWS CloudShellから有効リージョン全てのSecurity Hubに対する一括操作コマンドの覚え書き

ほぼ自分用メモです
2023.04.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

たぬき( @tanuki_tzp )です。

AWS CLI を使用して、アカウントの有効リージョン全ての Security Hub に対する一括操作コマンドをこねこねすることがあったため、ブログとして残しておきます。

前提

操作したいアカウントの AWS CloudShell 上で実行するコマンドとなっています。

元ネタについて

川原さんの下記のブログの「2. 管理アカウントで Security Hub を有効化する」に記載されているコマンドが元ネタになります。
川原さんありがとうございます!

有効リージョンの Security Hub を一括有効するコマンド

上記ブログからの引用となります。
このコマンドを元に、いろいろ操作を変更していきます。

aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
  echo "##### enable security hub in ${region}"
  aws --region ${region} securityhub enable-security-hub --enable-default-standards 
done

Security Hub を有効化する際、コンソール上で有効にする時にはセキュリティ基準を選択できるようになっているのですが、AWS CLI から有効化すると、

  • AWS 基礎セキュリティのベストプラクティス v1.0.0
  • CIS AWS Foundations Benchmark v1.2.0

の両方が有効になります。
そのため、CIS AWS Foundations Benchmark v1.2.0 を無効化したい場合は、再度一括無効化コマンドを打ってあげる必要があります。

各種コマンド

特定のセキュリティ基準(CIS AWS Foundations Benchmark v1.2.0)を一括無効化するコマンド

AWS AccountID には実行するアカウント ID を置き換えてください。

aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
  echo "##### disabled standards rule in ${region}"
  aws --region ${region} securityhub batch-disable-standards --standards-subscription-arns "arn:aws:securityhub:${region}:1111222233334444(AWS AccountID):subscription/cis-aws-foundations-benchmark/v/1.2.0"
done

特定のコントロールを一括無効化するコマンド

特定のリソースが Security Hub で検知されてしまうが、リスク容認している、もしくは、別途対策済みのため検知自体を止めたいこともあるかと思います。

サンプルとして AWS基礎セキュリティ v1.0.0 の ACM.1 を無効化の対象としています。
AWS Foundational Security Best Practices コントロール - AWS Security Hub

AWS AccountID とコントロールルールを適宜置き換えてください。

aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
echo "##### disabled control in ${region}"
aws --region ${region} securityhub update-standards-control \
--standards-control-arn "arn:aws:securityhub:${region}:1111222233334444(AWS AccountID):control/aws-foundational-security-best-practices/v/1.0.0/ACM.1(無効化したいコントロールルール)" \
--control-status DISABLED \
--disabled-reason "無効化の理由"
done

※特定のリージョンでコントロールを無効化するコマンドも一応載せておきます(リージョン: us-west-1)。

aws securityhub update-standards-control \
--standards-control-arn "arn:aws:securityhub:us-west-1:1111222233334444(AWS AccountID):control/aws-foundational-security-best-practices/v/1.0.0/ACM.1(無効化したいコントロールルール)" \
--control-status "DISABLED" \
--disabled-reason "無効化の理由"

特定のコントロールを一括有効化するコマンド

無効化したら有効化したくなるのが人間なので、やっぱり有効化したくなったときのコマンドがこちらです。
AWS AccountID とコントロールルールを適宜置き換えてください。

aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
echo "##### enabled control in ${region}"
aws --region ${region} securityhub update-standards-control \
--standards-control-arn "arn:aws:securityhub:${region}:1111222233334444(AWS AccountID):control/aws-foundational-security-best-practices/v/1.0.0/ACM.1(有効化したいコントロールルール)" \
--control-status ENABLED
done

まとめ

8 割書き終わったときに気づいたのですが、quiverさんの記事と内容が似通ってました。すみません。
AWS Security Hubのセキュリティ基準・コントロールをAWS CLIから有効・無効化してみた | DevelopersIO

複数のコントロールを一括で操作したい、同じ操作を複数のアカウントに対して実行したい等の場合は、上記のブログで紹介されているスプリクトを採用すると横展開とコントロールの管理がしやすいかと思われます。
1 アカウントのみサクッと実行したいよの時は本ブログも思い出していただければと思います。