LoginSignup
0
0

Security Hub におけるセキュリティ基準のコントロール一覧を一回で全部出力するスクリプトを作った

Last updated at Posted at 2023-11-26

背景

AWS Security Hub が AWS CloudFormation を使用した管理機能の強化を発表」で以下のような update(Jun. 2023) がありました。

また、新しい AWS::SecurityHub::Standard リソースを使用することで、NIST 800-53 や PCI DSS など、特定のセキュリティ基準を有効にして、そこに含まれる個別のコントロールを管理することもできます。

コントロール毎の有効化/無効化の設定をするために、Security Hub のコントロール情報を AWS CLI で出力したくなった人が急増(?)しているのではないでしょうか。

以下のように aws securityhub describe-standards-controls コマンドでセキュリティ基準の ARN を指定することで、該当のコントロール一覧を出力することができます。

# AWS Foundational Security Best Practices (FSBP) 標準のコントロール出力コマンド例

aws securityhub describe-standards-controls \
--max-results 100 \
--standards-subscription-arn arn:aws:securityhub:<region>:<account-id>:subscription/aws-foundational-security-best-practices/v/1.0.0

(参考: AWS CLI Command Reference)

課題

が!しかし、このコマンドは出力数が多くなると、途中までしか出力してくれません。上限は、上記の例のように --max-results で変更できますが、これも 100 までです。(なお、AWS FSBP のコントロールの数は、2023年11月時点で221個・・・)

出力が途中で途切れた場合は、下記のように "NextToken" という識別子が最後に出力されます。

    "NextToken": "U2FsdGVkX18tJIExN ~省略~"

これを上記のコマンドに "--next-token" という引数のパラメータに指定することで、残りのコントロールを出力することができます。

aws securityhub describe-standards-controls \
--next-token "U2FsdGVkX18tJIExN ~省略~" \
--max-results 100 \
--standards-subscription-arn arn:aws:securityhub:<region>:<account-id>:subscription/aws-foundational-security-best-practices/v/1.0.0

いかがでしたでしょうか?簡単ですね。

・・・え?「面倒くさい。こんなの毎回やりたくない。」ですか?はい!私もそう思いました!

Bash のスクリプトを使って解決

そうするとスクリプトや、プログラムを作って、効率化できそうですよね。ということで、コントロールの量が多くても一撃で一覧を出力できる Bash スクリプト作りました。

#!/bin/bash

export script=$0
export standardsArn=$1
export maxResults=100
export nextToken=""
export outputFile="outputFile.json"

while true ; do

    aws securityhub describe-standards-controls --next-token "${nextToken}" --max-results "${maxResults}" --standards-subscription-arn "${standardsArn}" > ${outputFile}
    
    cat ${outputFile} # 結果出力箇所、なおここで jq コマンドにパイプするなどして、出力形式をカスタマイズすることも可能

    export nextToken=$( cat ${outputFile} | jq -r ".NextToken" ) 

    if [ $nextToken = "null"  ]; then # .NextToken がnullなら終了
        exit 0
    fi
done

実行はスクリプト(例: describe-standards-controls_loop.bash)とセキュリティ基準の ARN を指定することで出力が可能です。

bash describe-standards-controls_loop.bash arn:aws:securityhub:<region>:<account-id>:subscription/aws-foundational-security-best-practices/v/1.0.0

このサンプルで、誰かがちょっとでも楽になっていただければ幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0