• Projects
  • Service
  • About
  • branding.bz
  • Podcast
  • Tips
  • FAQ
  • Recruit
  • Download
  • Contact
  • branding.bz(ブランド構築SaaS)
  • DESIGN NOW(デザインメディア)
  • X
  • LinkedIn
  • Spotify
  • Facebook

213-0011 神奈川県川崎市高津区久本3-6-7-303

© 2026 ID INC. All rights reserved

claude-skills/スキル
SKILLOfficialdevelopment

scanning-with-aws-security-agent

プラグイン
aws-agents-for-devsecops
ソース
GitHub で見る ↗
説明

AWS Security Agent(AWS提供のセキュリティ検査サービス)によるスキャンをワークスペース上で実行します。ソースコードをAWSにアップロードし、マネージド型のセキュリティ検査サービスでスキャンしたうえで、検出された問題を重要度順にランク付けして返します。各問題の位置情報と修正方法も含めた検証済みの結果が得られます。 次のような場合に使用: ユーザーがコードのスキャン、脆弱性の検出、セキュリティ検査・レビューの実行、セキュリティ上の問題の確認、スキャン状態の確認、検出結果の表示、最近のスキャン履歴の一覧表示、またはスキャンの中止をリクエストした場合。

原文を表示

Run an AWS Security Agent scan on the workspace — uploads the source to AWS, scans it with the managed Security Agent service, and returns ranked, verified findings with code locations and remediations. Use when the user asks to scan code, find vulnerabilities, run a security scan or review, check security issues, check scan status, show findings, list recent scans, or stop a scan.

ユースケース
  • コードの脆弱性を検出したいとき
  • セキュリティレビューを実行するとき
  • 検出された問題を重要度順に確認するとき
  • スキャン結果の履歴を確認するとき
本文(日本語訳)

AWS Security Agent — コード スキャン

このスキルはリポジトリ全体のスキャンを実行します。セットアップ(エージェント スペース、ロール、バケット)は setup-security-agent スキルで処理されます。.security-agent/config.json がない場合、スキャン ワークフローが最初にセットアップを自動実行します。


アクション マッピング

ユーザーの意図 ワークフロー
直接スキャンをリクエスト(「コードをスキャンして」「脆弱性を見つけて」) フル スキャン
スキャンの状況確認(「スキャンの進み具合は」「進捗状況は」) ステータス ワークフロー
検出結果を表示(「何が見つかったの」「結果を表示して」) 検出結果 ワークフロー
スキャンを一覧表示(「最近のスキャン」「スキャン一覧」) .security-agent/scans.json を読み込み
スキャンを停止 aws securityagent stop-code-review-job

主動的な提案ルール

  • 実行前に常に確認する — スキャンを自動開始しない
  • 1行の提案にする — 長い説明文にしない
  • ユーザーが断った場合は、同じセッション内で再度持ち出さない

ローカル状態

.security-agent/config.json から agent_space_id と region を読み込みます。config.json がない場合は、ユーザーに1行だけ表示 — 「このワークスペースでの初回スキャン — セットアップを実行します。」 — その後 setup-security-agent ワークフローをインラインで実行してから続行します。初回スキャンは「そのまま動作」するはずです。

スキャンを .security-agent/scans.json に記録します(最新50件を保持)。ワークスペースごとの CodeReview ID は config.json → code_reviews[<abs_path>] に保存されるため、その後のスキャンで同じ CodeReview を再利用できます。

必要な値の解決

以下の CLI 例ではプレースホルダーを使用しています。スキャン開始時に各値を解決してください:

プレースホルダー 解決方法
<id>(エージェント スペース) 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>
<cr-id> code_review_id(config.json → code_reviews[<abs_path>])
<job_id> codeReviewJobId(start-code-review-job で返却)
<WORKSPACE_ID> printf '%s' "$(pwd)" | md5sum | cut -c1-12

これらは設定に保存されず、その都度導出されるため、実態とのズレが生じません。


スキャン前チェック

  1. config.json を読み込む。 不在の場合 → setup-security-agent ワークフローをインラインで最初に実行してから続行します。

  2. エージェント スペースがまだ存在するか確認:

    aws securityagent batch-get-agent-spaces --agent-space-ids <id>
    

    レスポンスで存在しないことが示された場合、config.json から agent_space_id をクリアしてから setup-security-agent を再度実行します。

  3. アカウント、ロール ARN、バケット名を解決します。上の表を参照してください。

  4. ワークスペース ID を生成:

    WORKSPACE_ID=$(printf '%s' "$(pwd)" | md5sum | cut -c1-12)
    

ワークフロー:フル スキャン(約45分)

変更されたコードのスキャンのみの場合、diff-scanning-with-aws-security-agent スキルを使用してください。脅威モデリング仕様の場合は、threat-modeling-with-aws-security-agent を使用します。

  1. 上記のスキャン前チェックを実行します。

  2. ワークスペースを ZIP 圧縮します。 よくあるビルド/キャッシュ ディレクトリは除外します。.gitignore を考慮します。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 "Thumbs.db" \
      -x "*.pyc" -x "*.pyo"
    ZIP_BYTES=$(stat -f%z /tmp/source.zip 2>/dev/null || stat -c%s /tmp/source.zip)
    if [ "$ZIP_BYTES" -gt 2147483648 ]; then echo "Zip too large (>2GB)"; exit 1; fi
    
  3. ワークスペース固有の安定キーにアップロードします(以前のアップロードを上書き):

    aws s3 cp /tmp/source.zip s3://<bucket>/security-scans/source/<WORKSPACE_ID>/source.zip --expected-bucket-owner <account>
    
  4. ワークスペースごとの CodeReview を取得または作成します。 config.json → code_reviews[<abs_path>] を確認します。

    • 存在する場合、その code_review_id を使用します。

    • 不在の場合、作成します:

      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}]
      

      codeReviewId をキャプチャして config.json → code_reviews[<abs_path>] に保存します。

    • タイトルのデフォルト:pre-cr-<git-branch>(git rev-parse --abbrev-ref HEAD を使用)。スペースをハイフンに置き換えます。

  5. ジョブを開始します:

    aws securityagent start-code-review-job --agent-space-id <id> --code-review-id <cr-id>
    
    • レスポンスが ResourceNotFoundException の場合:CodeReview が外部で削除されました。再作成して(ステップ 4)リトライします。
  6. codeReviewJobId をキャプチャします。scan-<8-hex> のようなローカル scan_id を生成します。scans.json に追加します:

    {
      "scan_id": "scan-...",
      "code_review_id": "cr-...",
      "job_id": "cj-...",
      "agent_space_id": "as-...",
      "scan_type": "FULL",
      "title": "pre-cr-main",
      "path": "/abs/path",
      "started_at": "2026-06-01T20:00:00Z",
      "status": "IN_PROGRESS"
    }
    
  7. ユーザーに通知:「フル スキャンを開始しました(scan_id: {id})。約45分かかります。5分ごとに確認します — 「ポーリング停止」と言えばスキップできます。」

  8. 以下の ポーリング ループ を sleep 300 で実行します。


ポーリング ループ

スキャン開始後:

  1. sleep 300(5分)。これより高速にポーリングしないでください。

  2. ステータスを呼び出します:

    aws securityagent batch-get-code-review-jobs --agent-space-id <id> --code-review-job-ids <job_id>
    
  3. 現在の status を前回見たステータスと比較します。ステータスが変化した場合(例:IN_PROGRESS → COMPLETED)またはターミナル状態(COMPLETED、FAILED、STOPPED)に到達した場合のみ、ユーザーに応答します。

  4. 「処理中」を何度も報告しない — それはノイズです。

  5. ユーザーが「ポーリング停止」または「後で確認」と言った場合 → ループを停止して通知:「いつでも『スキャンステータス』または『結果を表示』と言ってください。」

  6. COMPLETED の場合 → 検出結果 ワークフローを実行します。

  7. FAILED の場合 → ジョブのエラー情報を取得し(statusReason が存在する場合)、ユーザーに通知して、簡潔な失敗メモを .security-agent/findings-{scan_id}.md に記録します。


ワークフロー:ステータス確認(アド ホック)

ユーザーが「スキャン ステータス」「スキャンの進み具合は」と言います:

  1. ユーザーが scan_id を指定した場合はそれを使用。指定がない場合は scans.json の最新エントリを使用します。
  2. batch-get-code-review-jobs を1回呼び出します。
  3. scans.json のステータス フィールドを更新します。
  4. 報告:ステータス + 経過時間 + 現在のステップ(存在する場合)

ワークフロー:検出結果

スキャン完了後(またはユーザーがリクエストした場合):

1. 検出結果をフェッチします(ページネーション)

aws securityagent list-findings --agent-space-id <id> --code-review-job-id <job-id>

nextToken が返却された場合、--next-token <token> で再度呼び出し、尽きるまで繰り返します。

2. 完全な詳細情報で補強します

aws securityagent batch-get-findings --agent-space-id <id> --finding-ids <id1> <id2> ...

3. フィルタリング(オプション)

ユーザーが最小重要度を指定した場合(例:「重大と高」)、そのレベルでフィルタリングします:

  • 重要度順:CRITICAL > HIGH > MEDIUM > LOW > INFORMATIONAL

4. チャットでの簡潔な概要

重要度でグループ化。ファイル パスと行番号を表示:

🟣 CRITICAL: {name}
   ファイル: {filePath}:{lineStart}
   {description}

🔴 HIGH: {name}
   ファイル: {filePath}:{lineStart}
   {description}

🟡 MEDIUM: {name}
   ファイル: {filePath}:{lineStart}
   {description}

🟢 LOW: {name}
   ファイル: {filePath}:{lineStart}
   {description}

5. 詳細レポート ファイル

.security-agent/findings-{scan_id}.md に記録します。返却されたすべてのフィールドを含めます(findingId、name、description、riskLevel、riskType、confidence、status、codeLocations の filePath/lineStart/lineEnd、および remediationCode が存在する場合)。

# セキュリティ スキャン レポート — {scan_id}

**スキャン種類**: FULL
**タイトル**: {title}
**開始日時**: {started_at}
**検出結果合計**: {count}

## 概要
| 重要度 | 件数 |
|------|-----|
| CRITICAL | N |
| HIGH | N |
| MEDIUM | N |
| LOW | N |

## 検出結果

### 🟣 CRITICAL: {name}
- **ID**: {findingId}
- **リスク種類**: {riskType}
- **信頼度**: {confidence}
- **ステータス**: {status}
- **場所**: `{filePath}:{lineStart}-{lineEnd}`

**説明**: {description}

**修復方法**:
{remediationCode または説明から抽出した修復ガイダンス}

(すべての検出結果について繰り返す)

ユーザーに通知:「詳細は .security-agent/findings-{scan_id}.md に記録しました」

6. フォローアップ

次を尋ねます:

  • 「重大と高の検出結果から優先しますか?」
  • 「どの項目について詳しく説明しましょうか?」
  • 「これらの問題を修正しましょうか?」

修復の場合:検出結果の説明とコード場所を読み、その後、編集ツールで修復を合成・適用します。


ワークフロー:スキャンを停止

ユーザーが「スキャンを停止」と言います:

aws securityagent stop-code-review-job --agent-space-id <id> --
原文(English)を表示

AWS Security Agent — Code Scans

This skill handles full repository scans. Setup (agent space, role, bucket) is handled by the setup-security-agent skill — if .security-agent/config.json is missing, the scan workflow auto-runs setup inline first.


Action mapping

User intent Workflow
Direct scan request ("scan my code", "find vulnerabilities") Full Scan
Scan status check ("how's the scan", "progress") Status workflow
View findings ("what did it find", "show results") Findings workflow
List scans ("recent scans", "show my scans") Read .security-agent/scans.json
Stop a scan aws securityagent stop-code-review-job

Rules for proactive suggestions

  • Always ask before running — never auto-trigger scans
  • Single-line suggestions, not multi-paragraph pitches
  • If the user declines, do not bring it up again in the same session

Local state

Read .security-agent/config.json for agent_space_id and region. If config.json is missing, tell the user one line — "First scan in this workspace — running setup first." — and run the setup-security-agent workflow inline (steps from that skill's SKILL.md) before continuing. First-time scans should "just work."

Track scans in .security-agent/scans.json (keep last 50 entries). The per-workspace CodeReview ID is stored in config.json → code_reviews[<abs_path>] so subsequent scans reuse the same CodeReview.

Resolving the values you need

The CLI examples below use placeholders. Resolve them at the start of every scan:

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 (cache for the rest of the turn)
<role-arn> arn:aws:iam::<account>:role/SecurityAgentScanRole
<bucket> security-agent-scans-<account>-<region>
<cr-id> code_review_id from config.json → code_reviews[<abs_path>]
<job_id> codeReviewJobId returned by start-code-review-job
<WORKSPACE_ID> printf '%s' "$(pwd)" | md5sum | cut -c1-12

These are derived rather than stored in config so they can never drift out of sync with reality.


Pre-scan checks

  1. Read config.json. If missing → run the setup-security-agent workflow inline first, then continue.

  2. Verify agent space still exists:

    aws securityagent batch-get-agent-spaces --agent-space-ids <id>
    

    If response shows it doesn't exist, clear agent_space_id from config.json and run setup-security-agent again.

  3. Resolve account, role ARN, and bucket name from the table above.

  4. Generate workspace ID:

    WORKSPACE_ID=$(printf '%s' "$(pwd)" | md5sum | cut -c1-12)
    

Workflow: Full Scan (~45 min)

For scanning only changed code, use the diff-scanning-with-aws-security-agent skill instead. For threat modeling specs, use threat-modeling-with-aws-security-agent.

  1. Run pre-scan checks above.

  2. Zip the workspace. Exclude common build/cache directories. Honor .gitignore. Bail if 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 "Thumbs.db" \
      -x "*.pyc" -x "*.pyo"
    ZIP_BYTES=$(stat -f%z /tmp/source.zip 2>/dev/null || stat -c%s /tmp/source.zip)
    if [ "$ZIP_BYTES" -gt 2147483648 ]; then echo "Zip too large (>2GB)"; exit 1; fi
    
  3. Upload to the per-workspace stable key (overwrites any prior upload):

    aws s3 cp /tmp/source.zip s3://<bucket>/security-scans/source/<WORKSPACE_ID>/source.zip --expected-bucket-owner <account>
    
  4. Get or create the per-workspace CodeReview. Look up config.json → code_reviews[<abs_path>].

    • If present, use that code_review_id.

    • If absent, create:

      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}]
      

      Capture codeReviewId and persist to config.json → code_reviews[<abs_path>].

    • Title default: pre-cr-<git-branch> (use git rev-parse --abbrev-ref HEAD). Replace any spaces with hyphens.

  5. Start the job:

    aws securityagent start-code-review-job --agent-space-id <id> --code-review-id <cr-id>
    
    • If the response is ResourceNotFoundException: the CodeReview was deleted externally. Recreate it (step 4) and retry.
  6. Capture codeReviewJobId. Generate a local scan_id like scan-<8-hex>. Append to scans.json:

    {
      "scan_id": "scan-...",
      "code_review_id": "cr-...",
      "job_id": "cj-...",
      "agent_space_id": "as-...",
      "scan_type": "FULL",
      "title": "pre-cr-main",
      "path": "/abs/path",
      "started_at": "2026-06-01T20:00:00Z",
      "status": "IN_PROGRESS"
    }
    
  7. Tell user: "Full scan started (scan_id: {id}). Takes ~45 minutes. I'll check every 5 minutes — say 'stop polling' to opt out."

  8. Run the Polling Loop below with sleep 300 between checks.


Polling Loop

After starting a scan:

  1. sleep 300 (5 minutes). Do not poll faster than this.

  2. Call status:

    aws securityagent batch-get-code-review-jobs --agent-space-id <id> --code-review-job-ids <job_id>
    
  3. Compare status to last seen status. Only respond to the user when status CHANGES (e.g., IN_PROGRESS → COMPLETED) or on terminal state (COMPLETED, FAILED, STOPPED).

  4. Do not report "still in progress" multiple times — that's noise.

  5. If user says "stop polling" or "check later" → stop the loop and tell them: "Say 'scan status' or 'show findings' anytime."

  6. On COMPLETED → run the Findings workflow.

  7. On FAILED → fetch the job's error info (statusReason if present), tell the user, write a brief failure note to .security-agent/findings-{scan_id}.md.


Workflow: Status check (ad-hoc)

User says "scan status" / "how's the scan":

  1. If user names a scan_id, use it. Otherwise use the most recent entry in scans.json.
  2. Call batch-get-code-review-jobs once.
  3. Update scans.json status field.
  4. Report: status + elapsed time + current step (if any).

Workflow: Findings

After a scan completes (or on user request):

1. Fetch findings (paginate)

aws securityagent list-findings --agent-space-id <id> --code-review-job-id <job-id>

If nextToken is returned, call again with --next-token <token> until exhausted.

2. Enrich with full details

aws securityagent batch-get-findings --agent-space-id <id> --finding-ids <id1> <id2> ...

3. Filter (optional)

If the user asked for a minimum severity (e.g., "high and above"), filter to that level:

  • Severity order: CRITICAL > HIGH > MEDIUM > LOW > INFORMATIONAL.

4. Concise summary in chat

Group by severity. File path + line for each:

🟣 CRITICAL: {name}
   File: {filePath}:{lineStart}
   {description}

🔴 HIGH: {name}
   File: {filePath}:{lineStart}
   {description}

🟡 MEDIUM: {name}
   File: {filePath}:{lineStart}
   {description}

🟢 LOW: {name}
   File: {filePath}:{lineStart}
   {description}

5. Detailed report file

Write to .security-agent/findings-{scan_id}.md. Include EVERY field returned (findingId, name, description, riskLevel, riskType, confidence, status, codeLocations with filePath/lineStart/lineEnd, and remediationCode if present).

# Security Scan Report — {scan_id}

**Scan type**: FULL
**Title**: {title}
**Started**: {started_at}
**Total findings**: {count}

## Summary
| Severity | Count |
|----------|-------|
| CRITICAL | N |
| HIGH | N |
| MEDIUM | N |
| LOW | N |

## Findings

### 🟣 CRITICAL: {name}
- **ID**: {findingId}
- **Risk type**: {riskType}
- **Confidence**: {confidence}
- **Status**: {status}
- **Location**: `{filePath}:{lineStart}-{lineEnd}`

**Description**: {description}

**Remediation**:
{remediationCode or remediation guidance from description}

(repeat for every finding)

Tell user: "Full details written to .security-agent/findings-{scan_id}.md"

6. Follow-ups

Ask:

  • "Would you like to focus on the critical/high findings first?"
  • "Should I explain any of these in more detail?"
  • "Want me to fix these issues?"

For fixes: read the finding's description and code location, then synthesize and apply the fix via the Edit tool.


Workflow: Stop a scan

User says "stop the scan":

aws securityagent stop-code-review-job --agent-space-id <id> --code-review-job-id <job_id>

Update scans.json status to STOPPED.


Workflow: List recent scans

User asks "show my recent scans" / "list scans":

Read .security-agent/scans.json. Show in a compact table:

scan_id type title status started
scan-abc FULL pre-cr-main COMPLETED 2h ago
scan-def FULL pre-cr-feature-x FAILED 1d ago

Rules

  • Always run pre-scan checks (config exists + agent space verified) before any scan
  • Scan APIs return immediately — poll status every 5 minutes
  • Use the most recent scan in scans.json if the user doesn't name one
  • Title must not contain spaces — use hyphens. Default to git branch name.
  • Don't dump raw JSON — format with severity icons + file locations
  • On ResourceNotFoundException from start-code-review-job, recreate the CodeReview and retry once

Troubleshooting

  • "Not configured" / config.json missing → run setup-security-agent skill first
  • AccessDenied on s3 cp → bucket not registered on agent space, or trust policy wrong. Re-run setup.
  • 403 / ExpectedBucketOwner mismatch on s3 cp → the derived bucket is owned by a different account (bucket-squatting). The upload is rejected by design — do not retry without the guard. Re-run setup-security-agent, which aborts on foreign-owned buckets.
  • ResourceNotFoundException on agent space → it was deleted. Re-run setup.
  • Scan stuck in PREFLIGHT for >10 min → backend issue, not client. Show batch-get-code-review-jobs output and tell user to escalate.
  • Code too large (zip > 2 GB) → run on a subdirectory instead.

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