付録: dast_buildspec.yaml の詳細

CodeBuild がペネトレーションテストを自動実行するよう設定するにはどうしたらよいでしょうか?

flask-app フォルダの下の dast_buildspec.yaml という名前のファイルを確認すると、それを実行するために書かれた CodeBuild buildspec が表示されます。 dast-buildspec

DAST CodeBuild プロジェクトはこのファイルを探し、必要なコマンドを実行します。

version: 0.2

phases:
  pre_build:
    commands:
      - |
        echo "Deleting Alerts from last session"
        curl -s "$ZAP_API_URL/JSON/alert/action/deleteAllAlerts/?apikey=$ZAP_API_KEY"
        echo "Starting Active Scan for: $SCAN_URL"
        curl -s "$ZAP_API_URL/JSON/core/action/accessUrl/?apikey=$ZAP_API_KEY&url=$SCAN_URL&followRedirects=false" > /dev/null
        scanId=$(curl -s "$ZAP_API_URL/JSON/ascan/action/scan/?apikey=$ZAP_API_KEY&zapapiformat=JSON&formMethod=GET&url=$SCAN_URL&recurse=&inScopeOnly=false&scanPolicyName=&method=&postData=&contextId=" | jq -r '.scan')
        echo "Waiting for results. OWASP Scan ID: $scanId"

        while [ "$status" != "100" ];
        do
          status=$(curl -s "$ZAP_API_URL/JSON/ascan/view/status/?apikey=$ZAP_API_KEY&scanId=$scanId" | jq -r '.status')
          echo "Scan Progress at $status%..."
          sleep 3
        done
        echo "DONE!"
  build:
    commands:
      - |
        high_alerts=$(curl -s "$ZAP_API_URL/JSON/alert/view/alertsSummary/?apikey=$ZAP_API_KEY&baseurl=$SCAN_URL" | jq -r '.alertsSummary.High')
        medium_alerts=$(curl -s "$ZAP_API_URL/JSON/alert/view/alertsSummary/?apikey=$ZAP_API_KEY&baseurl=$SCAN_URL" | jq -r '.alertsSummary.Medium')
        
        if [ $high_alerts -gt 0 ] || [ $medium_alerts -gt 0 ];
        then
          echo "There are $high_alerts High and $medium_alerts Medium Alerts. Failing Build..."
          exit 1;
        fi
  post_build:
    commands:
      - |
        echo "Generating HTML report..."
        dt=$(date +%F-%H%M%S)
        curl -s "$ZAP_API_URL/OTHER/core/other/htmlreport/?apikey=$ZAP_API_KEY" > report_$dt.html
        echo "HTML report saved: report_$dt.html"
artifacts:
  files:
    - "*.html"

Buildspecs は、CodeBuild がビルドを実行するために使用するビルドコマンドと関連設定をまとめたものです。各セクションを順を追ってみましょう。

  • pre_build コマンドは、基本的にビルドの準備を実行します。今回の場合、CodeBuild に OWASP Zap Proxys REST API を使用してアクティブスキャンをトリガーするように指示し、スキャンが完了したかどうかを知るためにそのステータス API をポーリングします。
  • build コマンドは、アクティブスキャンの結果を照会して解析します。MEDIUMまたはHIGHリスクが見つかった場合は、ビルドを強制的に失敗させます。
  • post_build コマンドは、OWASP Zap に HTML レポートを生成するように要求し、ローカルの HTML ファイルに保存します。
  • artifacts セクションは、CodeBuild に対し、生成されたすべての HTML ファイルを出力として収集しアーティファクトとするように指定しています。

$ プレフィックスで示される環境変数がいくつかあります。これは、ビルドプロジェクトが実行されるたびに AWS CodeBuild によって定義および提供されます。これは、codebuild-docker-project の [ビルドの詳細] ページの 環境変数 セクションで確認できます。利用可能な CodeBuild の 組み込み環境変数 もあります。(例: $AWS_DEFAULT_REGION)。