AWS セキュリティエージェント(攻撃対策を専門とするAWSのサービス)を使用して、実際に稼働しているウェブアプリケーションに対するペネトレーションテスト(セキュリティの脆弱性を見つけるための模擬攻撃)を実行します。対象ドメインの登録と確認を行い、管理対象のセキュリティエージェントサービスで指定されたエンドポイント(接続点)を検査し、確認済みの実行時脆弱性を報告します。 次のような場合に使用: ユーザーが、ペネトレーションテストの実行、アプリケーションの攻撃対象面(セキュリティリスクになる可能性のある箇所)の診断、実行時脆弱性の発見、対象ドメインの登録・確認、またはテスト状況・結果の確認をリクエストする。
Run an AWS Security Agent penetration test against a live web application — registers and verifies the target domain, exercises the supplied endpoints with the managed Security Agent service, and returns verified runtime findings. Use when the user asks to pentest, run a penetration test, test their app's attack surface, find runtime vulnerabilities, register or verify a target domain, or check pentest status / findings.
このスキルは、ペネトレーションテスト(pentest)のセットアップ・実行・結果確認を担当します。
セキュリティエージェントの初期セットアップ(agentスペース、ロール、バケット)は setup-security-agent スキルが担当します。
.security-agent/config.json が存在しない場合、pentestワークフローはセットアップを自動的にインラインで先に実行します。
Pentestは時間がかかり(1〜24時間)、実際に稼働中のアプリに対してアクティブに探査を行います。 開始前に、必ずユーザーがテスト対象を検査する権限を持っていることを確認してください。
以下のCLI例ではプレースホルダーを使用しています。 各pentestの開始時に次の方法で解決してください:
| プレースホルダー | 解決方法 |
|---|---|
<id>(agentスペース) |
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 |
<td-id> |
create-target-domain が返す targetDomainId(config.target_domains[<domain>] にキャッシュする) |
<pentest-id> |
create-pentest が返す pentestId |
<pj-id> |
start-pentest-job が返す pentestJobId |
.security-agent/config.json を読み込む。
ファイルが存在しない場合 → ユーザーに一行で伝える — "このワークスペースでの初回pentest — 先にセットアップを実行します。" — その後、setup-security-agent ワークフローをインラインで実行してから続行する。
Agentスペースがまだ存在するか確認する:
aws securityagent batch-get-agent-spaces --agent-space-ids <id>
存在しない場合は config.json から agent_space_id を削除し、setup-security-agent を再実行する。
アカウントとロールARNを上記の表から解決する。
認可チェック: コンテキストから明らかでない場合は、ユーザーに「<target> に対してペネトレーションテストを行う権限(所有権または明示的な許可)はありますか?」と確認する。
確認が取れない限り、処理を進めない。
aws securityagent create-target-domain --agent-space-id <id> \
--target-domain-name <domain> --verification-method HTTP_ROUTE
レスポンスに検証トークン・ルートが含まれます。
ユーザーのサーバーに配置すべき内容(通常は .well-known/... ファイル、またはトークンを返すHTTPルート)をユーザーに伝え、次を実行します:
aws securityagent verify-target-domain --agent-space-id <id> --target-domain-id <td-id>
検証済みの target_domain_id を .security-agent/config.json の target_domains: { "<domain>": "<td-id>" } に保存し、将来のpentestで再利用できるようにします。
ユーザーに以下を確認します:
pentest-<タイムスタンプ>)aws securityagent create-pentest --agent-space-id <id> --title <title> \
--service-role <role-arn> \
--assets endpoints=[{uri=https://example.com/api/login},{uri=https://example.com/api/upload}]
pentestId を取得・保持します。
aws securityagent start-pentest-job --agent-space-id <id> --pentest-id <pentest-id>
pentestJobId を取得・保持します。
.security-agent/pentests.json に追記します(存在しない場合は [] として新規作成 — ディレクトリ自体はセットアップ時に作成済み):
{
"pentest_id": "p-...",
"pentest_job_id": "pj-...",
"agent_space_id": "as-...",
"title": "pentest-...",
"endpoints": ["https://..."],
"started_at": "2026-06-01T20:00:00Z",
"status": "IN_PROGRESS"
}
ユーザーへの通知:「Pentestを開始しました({pentest_job_id})。 Pentestはスコープによって通常1〜24時間かかります。 15分ごとに状況を確認します — 「ポーリング停止」と言えばオプトアウトできます。」
チェックの間は sleep 900(15分)待機する。それより速くポーリングしない。
ステータス確認:
aws securityagent batch-get-pentest-jobs --agent-space-id <id> --pentest-job-ids <pj-id>
status が変化したとき、または終了状態(COMPLETED、FAILED、STOPPED)になったときのみ応答する。
COMPLETED になった場合 → Findingsワークフローを実行する。
aws securityagent list-findings --agent-space-id <id> --pentest-job-id <pj-id>
nextToken が返された場合は、空になるまで --next-token <token> を付けて繰り返し呼び出します。
aws securityagent batch-get-findings --agent-space-id <id> --finding-ids <id1> <id2> ...
チャットでは重要度ごとにグループ化して表示します(コードスキャンと同じアイコン・フォーマット):
🟣 CRITICAL: {name}
Endpoint: {endpoint}
{description}
.security-agent/pentest-{pentest_job_id}.md に、返されたすべてのフィールド(findingId、name、description、riskLevel、riskType、confidence、status、endpoint、request/responseサンプル(存在する場合)、remediationCode(存在する場合))を含む完全なレポートを書き出します。
ユーザーへの通知:「詳細を .security-agent/pentest-{pentest_job_id}.md に書き出しました。」
aws securityagent stop-pentest-job --agent-space-id <id> --pentest-job-id <pj-id>
create-pentest が失敗するconfig.json に保存された検証済みの target_domain_id を再利用し、再検証を避けるverify-target-domain での ValidationException →
検証ルートがまだ正しく応答していません。ユーザーにルートが稼働しており、期待されるトークンを返しているか確認するよう促してください。
target domain not verified →
verify-target-domain(ステップ1)を再実行してください。
Pentestが IN_PROGRESS のまま24時間以上経過 →
バックエンドの問題か、ターゲットに到達できない可能性があります。停止して状況を確認してください。
サービスロールで AccessDenied →
サービスロールに、pentestが必要とするネットワーク・ランタイム権限がありません。
デフォルトの SecurityAgentScanRole はコードスキャン専用です — AWSリソースへのpentestではより広い権限が必要になる場合があります。
AWSセキュリティエージェントコンソールでpentest専用ロールを設定するようユーザーを案内してください。
This skill handles pentest setup, execution, and findings. Initial Security Agent setup (agent space, role, bucket) is handled by the setup-security-agent skill — if .security-agent/config.json is missing, the pentest workflow auto-runs setup inline first.
Pentests are slow (1-24 hours) and active — they probe a real running app. Always confirm the user is authorized to test the target before starting.
The CLI examples below use placeholders. Resolve them at the start of every pentest:
| 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 |
<td-id> |
targetDomainId returned by create-target-domain (cache under config.target_domains[<domain>]) |
<pentest-id> |
pentestId returned by create-pentest |
<pj-id> |
pentestJobId returned by start-pentest-job |
Read .security-agent/config.json. If missing → tell the user one line — "First pentest in this workspace — running setup first." — and run the setup-security-agent workflow inline before continuing.
Verify agent space still exists:
aws securityagent batch-get-agent-spaces --agent-space-ids <id>
If missing, clear agent_space_id from config.json and run setup-security-agent again.
Resolve account and role ARN from the table above.
Authorization check: ask the user "Do you own or have explicit permission to pentest <target>?" if it's not obvious from context. Do not proceed without confirmation.
aws securityagent create-target-domain --agent-space-id <id> \
--target-domain-name <domain> --verification-method HTTP_ROUTE
The response includes a verification token / route. Tell the user what to put on their server (typically a .well-known/... file or HTTP route returning a token), then:
aws securityagent verify-target-domain --agent-space-id <id> --target-domain-id <td-id>
Persist the verified target_domain_id in .security-agent/config.json under target_domains: { "<domain>": "<td-id>" } so future pentests can reuse it.
Ask the user for:
pentest-<timestamp>)aws securityagent create-pentest --agent-space-id <id> --title <title> \
--service-role <role-arn> \
--assets endpoints=[{uri=https://example.com/api/login},{uri=https://example.com/api/upload}]
Capture pentestId.
aws securityagent start-pentest-job --agent-space-id <id> --pentest-id <pentest-id>
Capture pentestJobId. Append to .security-agent/pentests.json (create as [] if it doesn't exist yet — the directory itself is already created by setup):
{
"pentest_id": "p-...",
"pentest_job_id": "pj-...",
"agent_space_id": "as-...",
"title": "pentest-...",
"endpoints": ["https://..."],
"started_at": "2026-06-01T20:00:00Z",
"status": "IN_PROGRESS"
}
Tell user: "Pentest started ({pentest_job_id}). Pentests typically run 1-24 hours depending on scope. I'll check every 15 minutes — say 'stop polling' to opt out."
sleep 900 (15 minutes) between checks. Do not poll faster.
Status:
aws securityagent batch-get-pentest-jobs --agent-space-id <id> --pentest-job-ids <pj-id>
Only respond when status changes or on terminal state (COMPLETED, FAILED, STOPPED).
On COMPLETED → run the Findings workflow.
aws securityagent list-findings --agent-space-id <id> --pentest-job-id <pj-id>
If nextToken is returned, call again with --next-token <token> until empty.
aws securityagent batch-get-findings --agent-space-id <id> --finding-ids <id1> <id2> ...
Present in chat grouped by severity (same icons + format as code scans):
🟣 CRITICAL: {name}
Endpoint: {endpoint}
{description}
Write a full report to .security-agent/pentest-{pentest_job_id}.md with every field returned (findingId, name, description, riskLevel, riskType, confidence, status, endpoint, request/response samples if present, and remediationCode if present).
Tell user: "Full details written to .security-agent/pentest-{pentest_job_id}.md"
aws securityagent stop-pentest-job --agent-space-id <id> --pentest-job-id <pj-id>
create-pentest will fail otherwisetarget_domain_id from config.json instead of re-verifyingValidationException on verify-target-domain → the verification route isn't responding correctly yet. Ask user to confirm the route is live and serving the expected token.target domain not verified → run verify-target-domain (step 1) again.IN_PROGRESS for >24 hours → likely a backend issue or the target is unreachable. Stop and inspect.AccessDenied on the service role → the service role doesn't have the network/runtime permissions a pentest needs. The default SecurityAgentScanRole is for code scans only — pentests against AWS resources may need broader permissions. Direct user to the AWS Security Agent console to configure a pentest-specific role.原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。