Gateway
1Password
OpenClaw は、2 つの独立した方法で 1Password と連携します。
- 設定シークレット:
openclaw.json内の任意の SecretRef フィールドは、実行時にopCLI を通じて解決できるため、API キーが設定ファイル内に保存されることはありません。 - エージェントワークフロー: バンドルされている
1passwordskill により、エージェントは自身のタスク用にサインインし、opでシークレットを読み取ったり注入したりできます。
要件
- 1Password CLI(
op)が Gateway ホストにインストールされていること(macOS ではbrew install 1password-cli)。 opの認証モード:- サービスアカウント(ヘッドレス Gateway に推奨): Gateway サービス環境で
OP_SERVICE_ACCOUNT_TOKENをエクスポートします。デスクトップアプリも対話的なサインインも不要です。 - デスクトップアプリ統合: CLI 統合を有効にした 1Password アプリを同じマシンで実行します。最初の呼び出し時に Touch ID またはシステム認証が要求される場合があります。
- スタンドアロンサインイン:
op signinがセッションごとに入力を求めます。skill を介したエージェントでの利用は可能ですが、ヘッドレス Gateway での設定シークレット解決には適していません。
- サービスアカウント(ヘッドレス Gateway に推奨): Gateway サービス環境で
op を使用した設定シークレットの解決
op://vault/item/field 参照を指定して op read を実行する exec シークレットプロバイダーを宣言し、SecretRef 対応フィールドから参照します。
{ secrets: { providers: { onepassword_openai: { source: "exec", command: "/opt/homebrew/bin/op", allowSymlinkCommand: true, // Homebrew のシンボリックリンクされたバイナリには必須 trustedDirs: ["/opt/homebrew"], args: ["read", "op://Personal/OpenClaw QA API Key/password"], passEnv: ["HOME"], jsonOnly: false, }, }, }, models: { providers: { openai: { baseUrl: "https://api.openai.com/v1", models: [{ id: "gpt-5", name: "gpt-5" }], apiKey: { source: "exec", provider: "onepassword_openai", id: "value" }, }, }, },}各要素の関係は次のとおりです。
commandは絶対パスである必要があります。trustedDirsはそのディレクトリを信頼済みとして指定し、Homebrew はopをシンボリックリンクとしてインストールするため、allowSymlinkCommandが必要です。argsはop://vault/item/field参照をそのまま渡します。OpenClaw 自体はop://スキームを解析せず、opバイナリが解決します。passEnvは、一覧に指定された変数を Gateway 環境から転送します。デスクトップアプリ統合にはHOMEが必要です。サービスアカウントでは、Gateway サービス環境にOP_SERVICE_ACCOUNT_TOKENも存在する必要があります(passEnvに追加するか、トークンが設定ファイルから読み取り可能になることを許容する場合に限り、envで設定します)。- 単一値の出力では
id: "value"を維持します。jsonOnly: trueと JSON ペイロードを使用する場合は、代わりに JSON ポインター ID でフィールドを指定します。 - シークレットごとにプロバイダーエントリを 1 つ作成すると、参照を監査しやすくなります。プロバイダーには利用元にちなんだ名前を付けます(
onepassword_openai、onepassword_telegram)。
解決順序、キャッシュ、失敗時の動作については Gateway シークレット を、SecretRef を受け入れるすべてのフィールドについては SecretRef 認証情報サーフェス を参照してください。
ヘッドレス Gateway 向けサービスアカウントのセットアップ
- 1Password アカウントでサービスアカウントを作成し、Gateway が必要とする保管庫アイテムのみに対する読み取りアクセス権を付与します。
OP_SERVICE_ACCOUNT_TOKENを Gateway サービス(launchd plist、systemd ユニット、またはコンテナ環境)に渡します。"OP_SERVICE_ACCOUNT_TOKEN"をプロバイダーのpassEnvリストに追加します。- Gateway ホスト環境から確認します。
op whoamiは入力を求めずにサービスアカウントを表示する必要があります。
サービスアカウントによる読み取りでは、op:// 参照内に保管庫名を明示する必要があります。アカウントのスコープは厳密に限定してください。これはベアラー認証情報です。
エージェント向け 1password skill
OpenClaw には、エージェントを熟練した op オペレーターにする 1password skill がバンドルされています。この skill は、利用可能な認証モード(サービスアカウント、デスクトップアプリ統合、スタンドアロンサインイン)を検出し、何かを読み取る前に op whoami でアクセスを確認します。また、シークレット値をディスクへ書き込むよりも op run / op inject の使用を優先します。この skill には op バイナリが必要で、存在しない場合は Homebrew によるインストールを案内します。
エージェントは、タスクの途中でデプロイトークンを読み取ったり、コマンドに環境変数を注入したりするなど、自身のワークフローにこの skill を使用します。これは設定シークレットの解決とは独立しています。Gateway は skill を一切介さずに SecretRef を解決します。
セキュリティ上の注意
- exec プロバイダーを通じて解決されたシークレット値は Gateway のメモリ内に保持されます。設定スナップショットと
config.getの応答では、SecretRef フィールドがマスキングされます。 - シークレット値を
openclaw.json、ログ、またはチャットに決して記載しないでください。設定にはアイテム名を、1Password には値を保持します。 - 1Password の監査証跡にはサービスアカウントによるすべての読み取りが記録されるため、キーのローテーションとインシデントレビューを実施しやすくなります。
トラブルシューティング
command not foundまたは生成エラー:opの絶対パスを使用し、そのディレクトリをtrustedDirsに含めます。opは解決されるものの、シンボリックリンクエラーにより読み取りが失敗する場合: Homebrew インストールではallowSymlinkCommand: trueを設定します。account is not signed in: サービスアカウントでは、OP_SERVICE_ACCOUNT_TOKENが Gateway サービスに渡され、passEnvに含まれていることを確認します。デスクトップ統合では、アプリが実行中でロック解除されていることを確認します。- 最初の読み取りが遅い場合: プロバイダーの
timeoutMsを増やします。負荷の高いホストでは、opのコールドスタートが厳しいタイムアウトを超えることがあります。
Was this useful?