claude-skills/

Anthropic公式スキル・プラグインの日本語ディレクトリ

last sync 22h ago
スキルOfficialdevelopment

🔐diff-scanning-with-aws-security-agent

説明

指定したgit refからの変更コードのみを対象に、AWS Security Agentによる高速な差分スキャンを実行します。 次のような場合に使用: - 変更箇所をスキャンしたい - 差分スキャンを実行したい - セキュリティ上の問題について変更内容を確認したい - コミット前にスキャンしたい - PR前にスキャンしたい - その他、pre-commit / pre-pushのセキュリティチェックを行いたい

原文を表示

Run a fast AWS Security Agent diff scan on only the changed code since a git ref. Use when the user asks to scan changes, run a diff scan, check what changed for security issues, scan before committing, scan before PR, or any pre-commit/pre-push security check.

ユースケース

  • 変更箇所をスキャンしたい
  • 差分スキャンを実行したい
  • セキュリティ上の問題を確認したい
  • コミット前にスキャンしたい
  • PR前にスキャンしたい

本文(日本語訳)

AWS Security Agent — Diff スキャン

gitのrefから変更されたコードのみをスキャンします。フルスキャンより高速で、差分に絞って検出結果を提示します。事前のフルスキャンは不要です。

ローカル状態

.security-agent/config.json から agent_space_idregion を読み込みます。 ファイルが存在しない場合は、先に setup-security-agent ワークフローをインラインで実行してください。

スキャン履歴は .security-agent/scans.json に記録します。

必要な値の解決方法

プレースホルダー 解決方法
<id> (agent space) config.agent_space_id
<region> config.region(デフォルト: us-east-1
<account> aws sts get-caller-identity --query Account --output text
<role-arn> arn:aws:iam::<account>:role/SecurityAgentScanRole
<bucket> security-agent-scans-<account>-<region>
<WORKSPACE_ID> printf '%s' "$(pwd)" | md5sum | cut -c1-12

ワークフロー

  1. スキャン前チェック。 フルスキャンと同様 — configを読み込み、agent spaceを確認し、必要な値を解決してワークスペースIDを生成します。

  2. スキャン対象の基点を確認:

    • 未コミットの変更 → BASE_REF=HEAD(デフォルト)
    • ブランチ vs main → BASE_REF=main
    • カスタムref → ユーザーが指定
  3. 差分を生成(差分が空の場合は即終了):

    cd <absolute-workspace-path>
    if [ "$BASE_REF" = "HEAD" ]; then
      git diff HEAD > /tmp/diff.patch
    else
      git diff "$BASE_REF..HEAD" > /tmp/diff.patch
    fi
    [ -s /tmp/diff.patch ] || { echo "No changes vs $BASE_REF"; exit 1; }
    
  4. ワークスペースをzip圧縮(フルスキャンと同じ除外設定、上限2 GB):

    cd <absolute-workspace-path>
    zip -r /tmp/source.zip . \
      -x ".git/*" -x ".security-agent/*" -x "node_modules/*" \
      -x "__pycache__/*" -x ".venv/*" -x "venv/*" \
      -x "dist/*" -x "build/*" -x "target/*" \
      -x ".mypy_cache/*" -x ".pytest_cache/*" -x ".tox/*" \
      -x ".next/*" -x "cdk.out/*" -x ".DS_Store" -x "*.pyc"
    
  5. ソースzipと差分パッチの両方をアップロード:

    SCAN_ID="diff-$(date +%s)-$(openssl rand -hex 3)"
    aws s3 cp /tmp/source.zip s3://<bucket>/security-scans/source/<WORKSPACE_ID>/source.zip
    aws s3 cp /tmp/diff.patch s3://<bucket>/security-scans/diffs/${SCAN_ID}/diff.patch
    
  6. ワークスペース単位のCodeReviewを取得または作成 (フルスキャンと同じロジック — config.json → code_reviews[<abs_path>] を参照し、存在しなければ作成):

    aws securityagent create-code-review --agent-space-id <id> --title <title> \
      --service-role <role-arn> \
      --assets sourceCode=[{s3Location=s3://<bucket>/security-scans/source/<WORKSPACE_ID>/source.zip}]
    
  7. diffジョブを開始:

    aws securityagent start-code-review-job --agent-space-id <id> --code-review-id <cr-id> \
      --diff-source s3Uri=s3://<bucket>/security-scans/diffs/${SCAN_ID}/diff.patch
    

    ResourceNotFoundException が発生した場合: CodeReviewを再作成してリトライします。

  8. codeReviewJobId を取得し、scan_type: "DIFF" および base_ref とともに scans.json に保存します。

  9. ユーザーへ通知: 「Diffスキャンを開始しました。完了まで数分かかります。2分ごとに確認します — 「stop polling」と入力するとポーリングを停止できます。」

  10. 2分ごとにポーリング:

    aws securityagent batch-get-code-review-jobs --agent-space-id <id> --code-review-job-ids <job_id>
    

    ステータスが変化したときのみ応答します。COMPLETED になったら検出結果を取得します。

  11. 検出結果: フルスキャンと同じ形式で表示 — 重大度ごとにグループ化し、レポートを .security-agent/findings-{scan_id}.md に書き出します。


ルール

  • Diffスキャンは単独で完結します — 事前のフルスキャンは不要です
  • ポーリングは2分ごと、それより短い間隔は不可
  • ユーザーが指定しない場合は BASE_REF=HEAD をデフォルトとします
  • タイトル形式: diff-<git-branch>-<timestamp>(スペース不可)
  • 差分が空の場合はユーザーに通知して停止 — スキャンは開始しません
原文(English)を表示

AWS Security Agent — Diff Scan

Scan only the code that changed since a git ref. Faster than a full scan — focuses findings on the diff. No prior full scan needed.

Local state

Read .security-agent/config.json for agent_space_id and region. If missing, run the setup-security-agent workflow inline first.

Track scans in .security-agent/scans.json.

Resolving the values you need

Placeholder How to resolve
<id> (agent space) config.agent_space_id
<region> config.region (default us-east-1)
<account> aws sts get-caller-identity --query Account --output text
<role-arn> arn:aws:iam::<account>:role/SecurityAgentScanRole
<bucket> security-agent-scans-<account>-<region>
<WORKSPACE_ID> printf '%s' "$(pwd)" | md5sum | cut -c1-12

Workflow

  1. Pre-scan checks. Same as full scan — read config, verify agent space, resolve values, generate workspace ID.

  2. Ask what to scan against:

    • Uncommitted changes → BASE_REF=HEAD (default)
    • Branch vs main → BASE_REF=main
    • Custom ref → user provides
  3. Generate diff (fail fast if empty):

    cd <absolute-workspace-path>
    if [ "$BASE_REF" = "HEAD" ]; then
      git diff HEAD > /tmp/diff.patch
    else
      git diff "$BASE_REF..HEAD" > /tmp/diff.patch
    fi
    [ -s /tmp/diff.patch ] || { echo "No changes vs $BASE_REF"; exit 1; }
    
  4. Zip the workspace (same exclusions as full scan, 2 GB limit):

    cd <absolute-workspace-path>
    zip -r /tmp/source.zip . \
      -x ".git/*" -x ".security-agent/*" -x "node_modules/*" \
      -x "__pycache__/*" -x ".venv/*" -x "venv/*" \
      -x "dist/*" -x "build/*" -x "target/*" \
      -x ".mypy_cache/*" -x ".pytest_cache/*" -x ".tox/*" \
      -x ".next/*" -x "cdk.out/*" -x ".DS_Store" -x "*.pyc"
    
  5. Upload both source zip and diff patch:

    SCAN_ID="diff-$(date +%s)-$(openssl rand -hex 3)"
    aws s3 cp /tmp/source.zip s3://<bucket>/security-scans/source/<WORKSPACE_ID>/source.zip
    aws s3 cp /tmp/diff.patch s3://<bucket>/security-scans/diffs/${SCAN_ID}/diff.patch
    
  6. Get or create per-workspace CodeReview (same logic as full scan — lookup config.json → code_reviews[<abs_path>], create if absent):

    aws securityagent create-code-review --agent-space-id <id> --title <title> \
      --service-role <role-arn> \
      --assets sourceCode=[{s3Location=s3://<bucket>/security-scans/source/<WORKSPACE_ID>/source.zip}]
    
  7. Start the diff job:

    aws securityagent start-code-review-job --agent-space-id <id> --code-review-id <cr-id> \
      --diff-source s3Uri=s3://<bucket>/security-scans/diffs/${SCAN_ID}/diff.patch
    

    If ResourceNotFoundException: recreate CodeReview and retry.

  8. Capture codeReviewJobId. Persist to scans.json with scan_type: "DIFF" and base_ref.

  9. Tell user: "Diff scan started. Takes a few minutes. I'll check every 2 minutes — say 'stop polling' to opt out."

  10. Poll every 2 minutes:

    aws securityagent batch-get-code-review-jobs --agent-space-id <id> --code-review-job-ids <job_id>
    

    Only respond when status changes. On COMPLETED → fetch findings.

  11. Findings: same presentation as full scan — grouped by severity, report written to .security-agent/findings-{scan_id}.md.


Rules

  • Diff scans are standalone — no prior full scan needed
  • Poll every 2 minutes, not faster
  • Default to BASE_REF=HEAD if user doesn't specify
  • Title: diff-<git-branch>-<timestamp> (no spaces)
  • If diff is empty, tell user and stop — don't start a scan

原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。