Contents
はじめに
AI アシスタントにコード生成や API 呼び出しを任せる際、認証情報が漏洩すると重大なセキュリティインシデントにつながります。本記事では 1Password の公式 CLI(op)と Node.js SDK を使って、シークレットの取得・スコープ限定トークンによる安全な渡し方を実装する手順を解説します。さらに、リアルタイムでアクセスを取り消す仕組みや、組織全体で統一できるポリシー例も併せて紹介しますので、開発チームだけでなく運用・監査担当者にも有益です。
1Password のリアルタイムアクセス取り消し機能
機能概要
1Password は スコープ限定トークン と 即時無効化 API を提供しており、取得したシークレットへのアクセスを必要に応じて瞬時に失効させることができます。公式ドキュメント(1Password Connect API リファレンス)では、トークンの有効期限や手動での削除がサポートされている旨が記載されています。
取り消しフローの概要
スコープ限定トークン → 有効期限または手動削除 → ログに自動記録
- 取得 –
op token createで必要最小権限と有効期間を設定したトークンを生成。 - 利用 – AI エージェントやスクリプトがトークンを使用してシークレットへアクセス。
- 失効 – 有効期限が切れたタイミング、または管理者が Connect API の
DELETE /tokens/{id}エンドポイントを呼び出すことで即座に無効化され、同時に監査ログが生成されます。
このプロセスは CLI だけで完結できるため、外部システムへの追加実装が不要です。
CLI と Node.js SDK のインストール・環境構築
op CLI のインストール手順
各 OS に合わせた公式バイナリを取得し、PATH に登録します。
macOS(Homebrew)
|
1 2 |
brew install --cask 1password-cli # Homebrew が最新の公式ビルドを自動取得 |
Linux(公式スクリプト)
|
1 2 3 4 5 6 |
# 最新版を直接ダウンロードし、ユーザー領域に展開 curl -sSfL https://downloads.1password.com/linux/static/latest/op_linux_amd64.zip -o /tmp/op.zip unzip -d $HOME/.local/bin /tmp/op.zip chmod +x $HOME/.local/bin/op export PATH=$HOME/.local/bin:$PATH # 必要に応じてシェル設定ファイルへ追記 |
Windows
公式サイトの Download ページから op.exe を取得し、環境変数 PATH に追加してください。
バージョン管理のポイント
- インストール後は必ずop --versionで実行中のバージョンを確認。
- CI/CD パイプラインでも同様にバージョンチェックを組み込むことで、予期せぬ古い CLI の使用を防止できます。
Node.js SDK の導入手順
@1password/op-sdkは 1Password Connect と直接通信できる公式パッケージです。
|
1 2 |
npm install @1password/op-sdk # Yarn を使う場合は yarn add @1password/op-sdk |
基本的な初期化コード(TypeScript 推奨)
|
1 2 3 4 5 6 7 8 9 10 11 12 |
import { OpSdk } from '@1password/op-sdk'; import dotenv from 'dotenv'; dotenv.config(); // .env ファイルから環境変数をロード const op = new OpSdk({ host: process.env.OP_CONNECT_HOST!, // 例: https://my-1password-connect.example.com token: process.env.OP_CONNECT_TOKEN! // Connect API 用トークン }); export default op; |
注意点
-OP_CONNECT_HOSTとOP_CONNECT_TOKENは必ず安全な場所(例:GitHub Secrets、Azure Key Vault)に保存し、コードリポジトリには書き込まないでください。
スコープ限定トークンの作成と安全な渡し方
トークン生成のベストプラクティス
必要最小限の権限と期限を設定したトークンを、使用直前に取得します。
|
1 2 3 4 5 6 7 8 |
# 例: 5 分間有効な read‑only トークンを AWS クレデンシャル用アイテムに付与 op token create \ --vault=AI-Agents \ --item=aws-prod \ --scope=read \ --expire-in=5m \ --output=json # 出力例: {"token":"op-token-xxxxxxxx"} |
取得したトークンは 環境変数(例:OP_AGENT_TOKEN)に格納し、プロセス外へ平文で流出しないようにします。
AI エージェントへの渡し方(Claude / Anthropic など)
環境変数経由でトークンを提供することで、シークレットがログや履歴に残るリスクを低減できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#!/usr/bin/env bash # トークン取得 → 環境変数設定 → エージェント呼び出し の一連フロー TOKEN_JSON=$(op token create \ --vault=AI-Agents \ --item=aws-prod \ --scope=read \ --expire-in=10m \ --output=json) export OP_AGENT_TOKEN=$(echo "$TOKEN_JSON" | jq -r .token) # Claude API に対してリクエストを送信(例:curl) curl -X POST https://api.anthropic.com/v1/complete \ -H "Authorization: Bearer $OP_AGENT_TOKEN" \ -H "Content-Type: application/json" \ -d '{"prompt":"Deploy the latest version to AWS using the provided credentials."}' |
トークンは有効期限が切れるか、管理者が Connect API の DELETE /tokens/{id} エンドポイントで削除するまで使用可能です。
ベストプラクティスとリスク回避策
最小権限の原則と承認フロー
シークレット取得前にユーザーから明示的な許可を得ることで、ヒューマンエラーによる漏洩リスクを低減します。
- 承認要求 –
op run --require-approvalを使うと、実行前に Slack や Teams へ通知が送られ、管理者の承認ボタンがクリックされなければ処理は開始しません。 - 最小権限設定 – トークン作成時に
--scope=readや--expire-inを必ず指定し、書き込み権限や長時間有効化は避けます。
|
1 2 3 4 |
op run --require-approval \ --env=OP_CONNECT_HOST \ --command="node deploy.js" |
平文共有の危険性と対策
環境変数やコードに認証情報をハードコーディングすると、CI のログやバックアップに残りやすくなります。
- NG パターン(絶対に書かない)
js
const apiKey = "AKIAxxxxxxxxxxxx"; // 平文でハードコードは NG - 推奨パターン –
op run --expire-inを併用し、一時的なトークンだけをプロセスに渡す。
|
1 2 3 |
# 5 分間だけ有効なトークンでスクリプト実行 op run --expire-in=5m "node script.js" |
実装例:一時的 API キー取得から自動失効までのシェルスクリプト
以下のテンプレートは社内標準として共有しやすく、どんな AI 連携でも流用可能です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/usr/bin/env bash set -euo pipefail # 1. スコープ限定トークン取得(5 分有効) TOKEN=$(op token create \ --vault=AI-Agents \ --item=my-api-key \ --scope=read \ --expire-in=5m \ --output=json | jq -r .token) export TEMP_API_KEY=$TOKEN # 2. 任意の作業を実行(例:外部 API 呼び出し) curl -H "Authorization: Bearer $TEMP_API_KEY" https://api.example.com/do-something # 3. スクリプト終了時に自動的にトークンが失効 echo "作業完了。トークンは有効期限により自動失効します。" |
組織全体でのポリシー設定例と監査機能
ポリシーテンプレート(Vault・トークン管理)
| 項目 | 推奨設定 |
|---|---|
| Vault 名称 | AI-Agents |
| アイテム命名規則 | <サービス>-<環境>-key (例:aws-prod-key) |
| トークン有効期間 | デフォルト 10 分、必要に応じて管理者承認で最大 30 分 |
| 承認フロー | Slack/Teams Webhook → op run --require-approval |
| ログ保存場所 | 1Password Business の監査ログを SIEM(例:Splunk)へ転送 |
このテンプレートは 1Password Business の「Vault テンプレート」機能で事前に作成し、プロジェクト開始時にコピーして使用できます。
監査・レポーティングの活用方法
1Password Business/Enterprise は リアルタイム監査ログ を JSON 形式で提供します。op events list コマンドや Connect API の GET /events エンドポイントから取得可能です。
|
1 2 3 |
# AI-Agents Vault に対するすべてのアクセスイベントを取得 op events list --filter "vault=AI-Agents" --output json > ai_agents_events.json |
取得したログは以下の情報を含みます:
|
1 2 3 4 5 6 7 8 |
{ "event": "item.read", "actor": "service-account-ai", "vault": "AI-Agents", "item_id": "abc123", "timestamp": "2026-05-19T08:12:34Z" } |
活用例
- 月次レポート:自動スクリプトで「過去30日間に取得されたシークレット一覧」や「失効したトークン数」を集計し、セキュリティチームへ報告。
- 異常検知:同一トークンが短時間に多数の読み取りを行った場合は SIEM 側でアラートを発火させ、即座に失効手続きを実施。
まとめ
- 1Password のスコープ限定トークンと即時無効化 API を組み合わせることで、AI エージェントが誤って取得したシークレットも短時間で遮断できます。
opCLI と公式 Node.js SDK のインストールは数分で完了し、バージョン管理を徹底すれば常に最新機能を利用可能です。- トークンは 最小権限・期限付 で生成し、環境変数経由で AI エージェントへ渡すだけのシンプルなフローが安全です。
op run --require-approvalや--expire-inオプションを活用すれば、平文共有や永続的キーのリスクを実務レベルで防げます。- 組織全体では Vault テンプレートとトークン有効期間ポリシーを統一し、1Password Business の監査ログを SIEM に連携することで継続的な可視化・改善が可能です。
これらの手順と方針を導入すれば、中小企業から大規模エンタープライズまで、AI ツールとの安全な認証情報連携が実現し、認証情報漏洩リスクを最小限に抑えることができます。