← 試験の目次へ

Developer Foundations ドメイン7: セキュリティと安全性(8.1%)

この章で学ぶこと: AI アプリのセキュリティ(プライバシー、プロンプトインジェクション、jailbreak、信頼できない入力、データ漏えい、個人情報、認証・認可・機密性・完全性)、ガードレールと安全な配備(コンテンツポリシー、何重もの守り、セキュア・バイ・デザイン、最小権限)、破壊的な操作を止めるフック、ID・秘密情報・鍵の管理。

スキル 配点 この章の節
AI アプリのセキュリティ(AI Application Security) 3.2% 第1節
ガードレールと安全な配備(Guardrails and Safe Deployment) 2.3% 第2節
Claude のフック(Claude Hooks) 1.0% 第3節
ID・秘密情報・鍵の管理(Identity, Secrets, and Key Management) 1.6% 第4節

本番の53問のうち約4問が出ます。

前の章とつながる部分:


1. AI アプリのセキュリティ(3.2%)

1.1 脅威の整理

脅威 中身 主な対策
jailbreak・直接のプロンプトインジェクション 利用者自身が、ガードレールを破る入力を作る 害のない入力かを先に調べる、入力の確認、断り方をシステムプロンプトに書く、くり返す人への制限(ドメイン6)
間接のプロンプトインジェクション 第三者がメール、Web ページ、ファイル、ツールの結果に指示を仕込む 第三者の内容は tool_result で渡す、出どころを示す、方針を書く(ドメイン6)
モデルの間違い 悪意がなくても、意図しない操作をする 最小権限、承認、フック、何重もの守り(第2節)
データの漏えい 秘密の情報が出力や外部への送信で漏れる 渡す情報を最小にする、出力を確かめる、ネットワークを絞る
プロンプトの漏えい システムプロンプトの中身を聞き出される 第1.3節

公式の Agent SDK の「安全な配備」のページの考え方: エージェントは、プロンプトインジェクション(処理する内容に仕込まれた指示)やモデルの間違いで、意図しない操作をすることがあります。Claude のモデルはこれに強くなるよう作られていますが、何重もの守りは今でも良い実践です。例えば、悪意のあるファイルが「顧客データを外部のサーバーに送れ」と指示しても、ネットワークの制限があれば送信そのものを止められます。

1.2 信頼できない入力の扱い

1.3 プロンプトの漏えいを減らす

公式の「Reduce prompt leak」のページより:

いちばん確実なのは「秘密をプロンプトに入れない」ことです。API キーやパスワードはプロンプトに書きません(第4節)。

1.4 プライバシーと個人情報(PII)

ポイント 内容
渡す情報を最小にする 仕事に必要な個人情報だけを渡す。不要な氏名や番号は、渡す前に消すか匿名にする(一般的な実践)
Anthropic のデータの扱い 保存されたデータは、明示の許可なくモデルの学習に使われない。会話の中身は、一部のモデルを除き初期設定では保存されない
ZDR(ゼロデータ保持) 組織ごとに営業チームに申し込む。API の応答を返した後、プロンプトと応答を保存しない。ZDR の組織はブラウザから API を直接呼べない(自分のバックエンドから呼ぶ)
機能ごとの対象 ZDR や HIPAA の対象かは機能ごとに違う。例: Managed Agents は状態を保存するので対象外(ドメイン1)、Files API はファイルを消すまで保存する
クラウド経由 Amazon Bedrock や Google Cloud(Google 管理)では、クラウド事業者がデータの処理者になる

1.5 認証・認可・機密性・完全性

性質 意味 Claude アプリでの例
認証(authentication) 相手がだれかを確かめる 自分のアプリの利用者のログイン。API には API キーか短期のアクセストークン
認可(authorization) その相手に何を許すかを決める 利用者ごとに見てよいデータだけをツールで返す。エージェントに必要なツールだけを渡す
機密性(confidentiality) 見てはいけない人に見せない 秘密情報をプロンプトや出力に入れない、ログに残す中身を絞る
完全性(integrity) 勝手に書き換えられない 書き込みや削除の前に承認、フックでの検証、読み取り専用のマウント

大事な考え方(一般的な実践): 認可はモデルに任せず、ツールやサーバーの側で強制します。「この利用者は管理者ではないので削除しないで」とプロンプトに書くのではなく、そもそも削除のツールを渡さない、またはツールの中で権限を確かめます。


2. ガードレールと安全な配備(2.3%)

2.1 コンテンツポリシー

2.2 何重もの守り(defense in depth)

公式の「安全な配備」のページは、守りを重ねる選択肢として次を挙げています。

層 例
入力 害のない入力かを軽いモデルで先に調べる、入力の確認(ドメイン6)
プロンプト 方針と断り方、信頼できない内容の扱い
権限 許可・確認・拒否のルール、承認
フック 決まったルールを確実に強制(第3節)
実行環境 コンテナ、サンドボックス、仮想マシン
ネットワーク プロキシで決まった宛先だけに絞る
ファイル 必要なディレクトリだけを、なるべく読み取り専用でマウントする
出力 後処理で漏えいや不正な内容を探す

どれか1つが破られても、ほかの層で止められるようにします。組み合わせは脅威の想定と運用の要件で決めます。

2.3 セキュア・バイ・デザインと最小権限

最小権限: エージェントには、その仕事に必要な能力だけを与えます。公式の表:

資源 絞り方
ファイル 必要なディレクトリだけをマウントし、なるべく読み取り専用
ネットワーク プロキシで決まった宛先だけ
認証情報 直接見せず、プロキシで差し込む(第4.2節)
システムの機能 コンテナで Linux の権限(capabilities)を落とす

セキュリティの境界: 信頼の度合いが違う部品の間に境界を置きます。大事なもの(認証情報など)を、エージェントがいる境界の外に置けば、エージェントの環境で何かが起きても守れます。

Claude Code の組み込みの守り(公式):

守り 内容
権限のしくみ ルールで、ツールの呼び出しを実行・拒否・確認待ちにする。管理者は管理設定でルールを強制できる
重要なパスの削除 default モードでは、作業ディレクトリなど重要なパスを消す rm / rmdir は、許可ルールがあっても承認が必要
サンドボックス Bash のコマンドを、ファイルとネットワークを絞った環境で実行できる
信頼の確認 信頼していないフォルダーで起動すると確認画面が出る。.mcp.json のサーバーにも別の承認がある(-p では出ない)
解析できないコマンド Manual モードでは、十分に解析できない Bash コマンドは確認を求める
一致しないものは止める Manual モードでは、ルールに一致しないコマンドは承認が必要(fail-closed)
認証情報の保管 macOS ではキーチェーン、Linux では権限 0600 のファイル

チームでの公式のベストプラクティス: 管理設定で組織の基準を強制する、承認済みの権限設定をバージョン管理で共有する、/permissions で権限設定を定期的に確かめる。

秘密のファイルを読ませない: 権限の deny に Read(./.env) や Read(./secrets/**) のような Read ルールを書きます。.claudeignore は効かないので、その中身は Read の拒否ルールに移します。


3. Claude のフック(1.0%)

Agent SDK のフック(Python の関数)はドメイン1 第2.5節で学びました。ここでは Claude Code の設定ファイルに書くフックです。

公式の例: Bash の rm を含むコマンドを止める PreToolUse フック。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "if": "Bash(rm *)",
            "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/block-rm.sh"
          }
        ]
      }
    ]
  }
}
#!/bin/bash
# .claude/hooks/block-rm.sh
COMMAND=$(jq -r '.tool_input.command')
if echo "$COMMAND" | grep -q 'rm -rf'; then
  jq -n '{
    hookSpecificOutput: {
      hookEventName: "PreToolUse",
      permissionDecision: "deny",
      permissionDecisionReason: "Destructive command blocked by hook"
    }
  }'
else
  exit 0  # 判断なし。ふつうの権限の流れに任せる
fi

ポイント:

ポイント 内容
入力 フックは標準入力で JSON を受け取る。PreToolUse では tool_input にツールの入力(Bash なら command)が入る
絞り込み matcher でツール名(例: Bash、Edit\|Write、mcp__.*)、if でさらに細かい条件
止め方1 permissionDecision: "deny" を含む JSON を出す
止め方2 終了コード 2 で終わる。PreToolUse ならツールの呼び出しが止まり、stderr の内容が理由として伝わる
何もしない 終了コード 0 で判断を出さなければ、ふつうの権限の流れに進む
置き場所 チームで共有するなら .claude/settings.json(コミットする)。組織で強制するなら管理設定

なぜフックか: プロンプトの「消さないで」は確率でしか守られません。フックはモデルの外で動くので、ルールを確実に強制できます。権限の deny ルールと組み合わせると、さらに守りが固くなります。


4. ID・秘密情報・鍵の管理(1.6%)

4.1 Claude API の認証

方法 内容
API キー Console の API keys のページで作る。x-api-key ヘッダー、または Authorization: Bearer で送る
短期のアクセストークン Workload Identity Federation のルールを設定し、POST /v1/oauth/token で取る短い期間だけ使えるトークン。Authorization: Bearer で送る
ワークスペース キーはワークスペースに結びつけられる。ワークスペースごとに分けると、アクセスの範囲を分けられる(Files API のファイルもワークスペース単位でアクセスできる、ドメイン2)
期限切れ・無効化 キーが壊れている、無効にされた、期限が切れたときは 401 authentication_error

4.2 秘密情報の扱い

やること 理由・方法
キーをコードやプロンプトに書かない 公式 SDK は環境変数 ANTHROPIC_API_KEY を読む。リポジトリにコミットしない(一般的な実践)
共有の MCP 設定に秘密を書かない .mcp.json では ${VAR} の環境変数展開を使い、トークンそのものはコミットしない(ドメイン8)
エージェントにキーを見せない(プロキシのパターン) 公式の「安全な配備」: エージェントの環境の外でプロキシを動かし、プロキシがリクエストにキーを差し込む。エージェントは API を呼べるが、キーそのものは見えない。複数の利用者がいる配備や、信頼できない内容を扱うときに役立つ
Managed Agents MCP サーバーの認証情報は、セッションごとに vault を参照して渡す。秘密がエージェントの定義に入らない
開発と本番を分ける 環境ごとに別のキーやワークスペースを使い、本番のキーを開発で使わない(一般的な実践)
漏れたら すぐにキーを無効にして作り直す(一般的な実践)

4.3 アクセスの承認と監視


5. 試験に向けたまとめ

問われ方 考え方
Web ページの中の隠し命令 信頼できない入力として分け、機密の操作はガードレールやフックで守る
プロンプトを聞き出されたくない 秘密をプロンプトに入れない。後処理で探す。複雑にしすぎない
利用者ごとに見てよいデータが違う 認可はツールやサーバーの側で強制する。プロンプトに任せない
エージェントの権限 最小権限。不要なツールは渡さない、読み取り専用、宛先を絞る
何を重ねるか 入力の確認、プロンプト、権限、フック、サンドボックス、ネットワーク、出力の確認
rm -rf を必ず止めたい PreToolUse フック(deny か終了コード 2)と deny ルール
.env を読ませたくない Read(./.env) の拒否ルール
エージェントに API キーを見せたくない プロキシでキーを差し込む
共有設定のトークン ${VAR} の環境変数展開。コミットしない
長く使えるキーを避けたい Workload Identity Federation の短期トークン

6. 用語集

用語 意味
jailbreak モデルの決まりを破らせようとする入力
間接のプロンプトインジェクション 第三者の内容に仕込まれた指示
PII 個人を特定できる情報
ZDR ゼロデータ保持。応答の後にプロンプトと応答を保存しない取り決め
最小権限 必要な権限だけを与えること
何重もの守り 1つが破られても止められるよう、守りを重ねること
プロキシのパターン エージェントの外で認証情報を差し込み、エージェントに見せない方法
Workload Identity Federation 長く使えるキーの代わりに、短期のトークンを発行するしくみ

出典

第1.4節の「渡す情報を最小にする」、第1.5節の「認可はツールやサーバーの側で」、第4.2節の一部(コミットしない、開発と本番を分ける、漏れたら無効にする)、第4.3節は、一般的な実践のまとめで、公式ドキュメントからの直接の要約ではありません。内容は上の出典を要約・言い換えたものです(ライセンスに配慮して書き直しています)。