🔐 技術調査 - 1Password CLI
目次

🔐 技術調査 - 1Password CLI

概要

1Password CLI(op コマンド)は、1Password のシークレット管理機能をターミナル・スクリプト・CI/CD パイプラインから利用するための公式コマンドラインツールです。

この記事では、1Password CLI の全体像を構造・データ・認証・構築・利用・運用の各観点から整理します。導入検討から実運用まで、必要な箇所を参照してください。

解決する課題

課題 解決方法
コード・設定ファイルへの平文シークレット埋め込み シークレット参照構文(op://)による実行時注入
複数 CLI ツールの API キー管理 Shell Plugins による生体認証統合
CI/CD パイプラインへのシークレット配布 サービスアカウントと op run による安全な環境変数注入
SSH 秘密鍵の手動管理 SSH エージェント統合による 1Password 内での鍵管理

対象ユーザー

ユーザー 用途
開発者 ローカル開発環境でのシークレット管理・CLI 認証
DevOps / 運用者 チームメンバーのプロビジョニング・権限管理の自動化
CI/CD パイプライン サービスアカウントを利用した無人環境でのシークレット取得

バージョン情報

項目 内容
現行バージョン CLI 2.x 系(2024年の CLI 2.0 リリース以降)
最新バージョン 2.32.1(2026年2月5日リリース)
主な変更点(CLI 2.x) noun-verb 形式のコマンド体系、JSON 出力の拡充、標準入力のパイプ処理の改善

特徴

1Password CLI の主要機能を以下にまとめます。

機能 概要
シークレット参照構文 op:// URI でシークレットを参照し、平文の埋め込みを排除
op run 環境変数にシークレットを注入してプロセスを起動
生体認証連携 Touch ID / Face ID / Windows Hello でパスワードレス認証
Shell Plugins 70 以上の外部 CLI ツールの認証を 1Password で一元管理
サービスアカウント CI/CD 向けトークンベース認証。最小権限の原則を実現
SSH エージェント統合 SSH 秘密鍵を 1Password 内で管理し、鍵ファイルの外部保存を排除
op inject テンプレートファイルにシークレットを注入して設定ファイルを生成
ゼロナレッジ暗号化 クライアント側で暗号化鍵を導出。サーバーは復号不可

以降、各機能の詳細を説明します。

シークレット参照構文(Secret References)

op:// スキームを用いてシークレットを URI で参照します。実行時に 1Password から値を取得するため、ソースコードや設定ファイルに平文シークレットが残りません。

op://<vault>/<item>/[section/]<field>

op run によるシークレット注入

環境変数にシークレット参照を設定し、op run でコマンドを実行すると、サブプロセスの環境変数に解決済みシークレットが注入されます。

export DB_PASSWORD="op://app-dev/db/password"
op run -- node app.js

生体認証連携

Touch ID・Face ID など OS の生体認証機能と統合しています。パスワード入力なしで 1Password のボルトにアクセスできます。

Shell Plugins

AWS CLI・GitHub CLI など対応する外部 CLI ツールの API キーを 1Password に保存し、実行時に生体認証で自動注入します。平文の認証情報をシェル設定ファイルに記述する必要がなくなります。

サービスアカウント(Service Accounts)

CI/CD 環境など対話操作のない環境向けに、トークンベースの認証を提供します。アクセス可能なボルトを限定できるため、最小権限の原則を実現できます。

SSH エージェント統合

1Password を SSH エージェントとして動作させます。SSH 秘密鍵は 1Password 外に保存されず、SSH・Git クライアントの認証に利用できます。

op inject による設定ファイルへの注入

テンプレート形式の設定ファイル内のシークレット参照を解決し、シークレット入りファイルを生成します。Kubernetes の Secret マニフェストや .env ファイルの生成に利用できます。

アイテム・ボルト管理

スクリプトからアイテムの作成・取得・更新・削除、ボルトの管理、ユーザー・グループの権限操作が可能です。チームメンバーのプロビジョニング自動化に活用できます。

複数アカウント対応

複数の 1Password アカウント(個人・チーム・Business など)を切り替えながら操作できます。

シェル補完

Bash・Zsh・fish・PowerShell 向けのシェル補完をサポートしています。

ゼロナレッジ暗号化

1Password はゼロナレッジアーキテクチャを採用しています。アカウントパスワードとシークレットキーからクライアント側で暗号化鍵を導出し、データは AES-GCM-256 で暗号化されます。1Password サーバーには暗号化済みデータのみが保存されるため、1Password 社がユーザーデータを復号することはできません。

構造

システムコンテキスト図

開発者 CI/CD パイプライン IT 管理者 1Password CLI 1Password サービス 1Password デスクトップアプリ OS 生体認証 SSH クライアント サードパーティ CLI 対象プロセス
要素名 説明
開発者 CLI を対話的に操作してシークレットを取得・注入するユーザー
CI/CD パイプライン サービスアカウントや Connect 経由でシークレットを自動取得する自動化環境
IT 管理者 ユーザー・グループ・Vault の管理操作を実行するユーザー
1Password CLI シークレット管理・認証・管理操作を提供するコマンドラインツール
1Password サービス Vault・アイテムデータを保持するクラウドバックエンド
1Password デスクトップアプリ 生体認証を仲介する常駐デスクトップアプリ
OS 生体認証 Touch ID / Windows Hello / PolKit などのプラットフォーム認証機構
SSH クライアント SSH エージェントソケット経由で鍵操作を要求する SSH・Git クライアント
サードパーティ CLI Shell Plugins が認証を肩代わりする外部 CLI ツール
対象プロセス op run がシークレットを環境変数として渡して起動するサブプロセス

コンテナ図

1Password CLI 1Password デスクトップアプリ 1Password サービス SSH クライアント サードパーティ CLI CLI コア 認証エンジン シークレットエンジン Shell Plugins SSH エージェント 管理エンジン デーモン - キャッシュ層
要素名 説明
CLI コア コマンドパース・ルーティング・フラグ処理を担うエントリポイント
認証エンジン デスクトップアプリ IPC・サービスアカウント・セッションキー管理を担う認証基盤
シークレットエンジン シークレット参照の解決・環境変数注入・テンプレート注入を提供
Shell Plugins サードパーティ CLI へのクレデンシャル自動プロビジョニングを担当
SSH エージェント UNIX ソケット経由で SSH 鍵操作リクエストに応答するエージェント
管理エンジン Vault・アイテム・ユーザー・グループの CRUD 操作を提供
デーモン - キャッシュ層 セッション中のアイテム・Vault 情報をメモリ上に暗号化キャッシュする常駐プロセス
1Password デスクトップアプリ 生体認証プロンプトを提示し CLI に認可を返す
1Password サービス Vault データを保持するクラウド API
SSH クライアント エージェントソケットに接続して鍵署名を要求するクライアント
サードパーティ CLI Shell Plugins 経由でクレデンシャルを受け取る外部ツール

コンポーネント図

認証エンジン シークレットエンジン Shell Plugins SSH エージェント デーモン - キャッシュ層 XPC - macOS Unix ソケット - Linux 名前付きパイプ - Windows OP_SERVICE_ACCOUNT_TOKEN 環境変数 Connect サーバー TTY セッションキー 1Password サービス 1Password Vault - SSH Key アイテム IPC ブリッジ サービスアカウント認証 セッションマネージャー シークレット参照リゾルバー op run - 環境変数注入 op inject - テンプレート注入 op read - 標準出力取得 プラグインレジストリ プロビジョナー インポーター プラグインスキーマ エージェントソケット 鍵セレクター 認可ゲート メモリキャッシュ 暗号化レイヤー
要素名 説明
IPC ブリッジ プラットフォームごとの IPC 方式でデスクトップアプリと通信
XPC - macOS macOS の NSXPCConnection API を使った IPC チャネル
Unix ソケット - Linux onepassword-cli グループ GID 検証付き Unix ソケット
名前付きパイプ - Windows Authenticode 署名検証付き Windows 名前付きパイプ
サービスアカウント認証 OP_SERVICE_ACCOUNT_TOKEN または Connect サーバー経由で認証
セッションマネージャー TTY と起動時刻に基づく一意のセッションキーを管理し 10 分で失効させる
Connect サーバー 自己ホスト型 REST API サーバー。シークレットをローカルキャッシュして返す
シークレット参照リゾルバー op://vault/item/field URI を解析して実際のシークレット値に変換
op run - 環境変数注入 環境変数内のシークレット参照を解決し、サブプロセスに渡して起動
op inject - テンプレート注入 テンプレートファイルにシークレットを埋め込む
op read - 標準出力取得 シークレット参照を解決して標準出力またはファイルに書き出す
プラグインレジストリ 50 以上のサードパーティ CLI プラグインを自動検出・動的ロード
プロビジョナー 環境変数・設定ファイル・コマンド引数経由でクレデンシャルを注入
インポーター 既存のシステム設定や環境変数からクレデンシャルを発見して取り込む
プラグインスキーマ schema.Plugin / schema.CredentialType / schema.Executable で構成される定義仕様
エージェントソケット ~/.1password/agent.sock で待ち受ける SSH エージェント UNIX ソケット
鍵セレクター Ed25519 / RSA 形式の SSH Key アイテムを対象 Vault から選択
認可ゲート 明示的に許可された SSH クライアントのみ鍵署名を許可
1Password Vault - SSH Key アイテム SSH 秘密鍵を保持する Vault 内アイテム。鍵はアプリ外に出ない
メモリキャッシュ セッション中のアイテム・Vault 情報を保持するインメモリストア
暗号化レイヤー 1Password.com と同方式でキャッシュデータを暗号化

セキュリティアーキテクチャ

暗号化の階層構造

アカウントパスワード シークレットキー - 128 bit PBKDF2-HMAC-SHA256 による鍵導出 暗号化鍵 ボルトデータ - AES-GCM-256 で暗号化 1Password サーバー 暗号化されたデータのみ保存
要素名 説明
アカウントパスワード ユーザーが設定するマスターパスワード
シークレットキー - 128 bit デバイスごとに保持される 128 bit の秘密鍵
PBKDF2-HMAC-SHA256 による鍵導出 パスワードとシークレットキーから暗号化鍵を導出する鍵導出関数
暗号化鍵 Vault データの暗号化・復号に使用する鍵
ボルトデータ - AES-GCM-256 で暗号化 AES-GCM-256 で暗号化された Vault の実データ
1Password サーバー 暗号化されたデータを保管するクラウドサーバー
暗号化されたデータのみ保存 サーバーには暗号化済みデータのみが保存され、1Password 社は復号不可

使用されている暗号アルゴリズム

用途 アルゴリズム
データ暗号化 AES-GCM-256
鍵導出 PBKDF2-HMAC-SHA256
認証プロトコル SRP(Secure Remote Password)
通信路暗号化 TLS

SRP プロトコルの概要

SRP(Secure Remote Password)は、パスワードをネットワーク上に送信せずに認証を行う暗号プロトコルです。

特徴 説明
パスワード非送信 アカウントパスワードもシークレットキーもネットワーク越しに送信されない
相互認証 クライアントはサーバーの正当性を検証でき、中間者攻撃を防止
セッション固有の暗号化 セッションごとに異なる暗号化鍵が生成され、リプレイ攻撃を防止

デスクトップアプリ連携の場合はデスクトップアプリが SRP を処理し、手動サインイン(op signin)の場合は CLI が直接 SRP を使用します。サービスアカウントはトークンベースの認証であり、SRP とは異なる仕組みを使用します。

データ

概念モデル

Account Users AccessControl Vaults Vault Item op://vault/item/section/field has access to has access to has access to has access to belongs to SecretReference User Group ServiceAccount ConnectServer Section Field Tag
要素名 説明
Account 1Password の組織単位。Users、Vaults、AccessControl を保持
User 人間の操作者。Group に所属し、Vault へのアクセス権を持つ
Group User の集合。まとめて Vault へのアクセス権を付与する単位
ServiceAccount 自動化処理向けの非対話型認証エンティティ。トークンで認証
ConnectServer 自社インフラにデプロイする自己ホスト型 REST API サーバ
Vault Item を格納するアクセス制御の単位
Item 1 件のシークレット情報。Category で種別が決まる
Section Item 内のフィールドをグループ化する論理的な区画
Field Item が保持する個別の値。型と目的を持つ
Tag Item に付与する文字列ラベル。階層タグ対応
SecretReference op://vault/item/[section/]field 形式の URI。Field の値を参照

情報モデル

Account + id: string + name: string + domain: string User + id: string + name: string + email: string + state: string + type: string Group + id: string + name: string + description: string + type: string + state: string ServiceAccount + id: string + name: string + state: string + token: string + created_at: dateTime + expires_at: dateTime ConnectServer + id: string + name: string + token: string Vault + id: string + name: string + description: string + type: string + contentVersion: integer + createdAt: dateTime + updatedAt: dateTime Item + id: string + title: string + category: string + favorite: boolean + tags: string[] + version: integer + createdAt: dateTime + updatedAt: dateTime Section + id: string + label: string Field + id: string + label: string + type: string + purpose: string + value: string + entropy: number SecretReference + uri: string 1 many 1 many 1 many 1 many 1 many many many many many many many many many many many 1 many 1 many 1 many 1 many
要素名 説明
Account.id アカウントの一意識別子
Account.domain 1Password のサブドメイン(例: company.1password.com)
User.state ACTIVE / SUSPENDED / TRANSFER_PENDING
User.type MEMBER / ADMIN / OWNER / GUEST
Group.type USER_DEFINED / RECOVERY / ADMINISTRATORS / OWNERS
ServiceAccount.token 発行時のみ取得可能な認証トークン文字列
Vault.type EVERYONE / PERSONAL / USER_CREATED
Item.category LOGIN / PASSWORD / API_CREDENTIAL / SERVER / DATABASE / CREDIT_CARD / SECURE_NOTE / SSH_KEY 等 20 種
Field.type STRING / CONCEALED / EMAIL / URL / OTP / DATE / MONTH_YEAR / MENU
Field.purpose USERNAME / PASSWORD / NOTES(ビルトインフィールドの役割識別子)
Field.entropy パスワード強度を示すエントロピー値(bit)
SecretReference.uri op://vault/item/[section/]field 形式の URI。?attribute=otp 等のクエリパラメータ付加可能

認証方式の選択

認証方式の選択フローチャート

Yes No No Yes Yes No Yes No 認証方式を選択する 自動化・非対話処理か 追加インフラを展開できるか 組織で SSO を採用しているか デスクトップアプリが利用可能か サービスアカウント Connect サーバー SSO / SAML デスクトップアプリ連携 手動サインイン

認証方式の判断基準

認証方式 主な用途 前提条件 設定方法
デスクトップアプリ連携 開発者の日常利用 1Password デスクトップアプリのインストール Settings > Developer > Integrate with 1Password CLI を有効化
手動サインイン デスクトップアプリ非利用環境 1Password アカウント eval $(op signin --account acme.1password.com)
サービスアカウント CI/CD・自動化スクリプト 1Password CLI 2.18.0 以降 OP_SERVICE_ACCOUNT_TOKEN 環境変数を設定
Connect サーバー 本番環境・高スループット処理 Connect サーバーのデプロイ OP_CONNECT_HOSTOP_CONNECT_TOKEN を設定
SSO / SAML 企業での統合認証 1Password Unlock with SSO の有効化 デスクトップアプリ連携後に op signin で SSO アカウントを選択

各方式の特性比較

認証方式 対話操作 レート制限 キャッシュ ネットワーク依存
デスクトップアプリ連携 生体認証で最小化 なし アプリが担保 初回認証時のみ
手動サインイン セッションごとに必要 なし セッショントークンを保持 必要
サービスアカウント 不要 1 時間・1 日単位の制限あり なし 必要
Connect サーバー 不要 実質なし(自前インフラ) インフラ内にキャッシュ ローカル完結可能
SSO / SAML IdP 認証が必要 なし アプリが担保 IdP に依存

Connect サーバーとサービスアカウントの使い分け

サービスアカウントは追加インフラなしで利用できますが、厳格なレート制限があります。Connect サーバーはインフラの展開が必要ですが、データをインフラ内にキャッシュするためレート制限を事実上回避できます。テスト環境ではサービスアカウント、本番環境では Connect サーバーを使い分けることが推奨されています。

構築方法

macOS へのインストール

Homebrew を使ったインストールを推奨します。

brew install 1password-cli
op --version

手動インストールの場合、公式サイトから op.pkg または op.zip をダウンロードして /usr/local/bin に配置します。

動作要件: macOS Big Sur 11.0.0 以降、1Password for Mac アプリ

Linux へのインストール

Debian / Ubuntu 系は APT リポジトリを追加します。

curl -sS https://downloads.1password.com/linux/keys/1password.asc \
  | sudo gpg --dearmor --output /usr/share/keyrings/1password-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/1password-archive-keyring.gpg] \
  https://downloads.1password.com/linux/debian $(lsb_release -cs) main" \
  | sudo tee /etc/apt/sources.list.d/1password.list
sudo apt update && sudo apt install 1password-cli

RPM 系(RHEL / CentOS / Fedora)は YUM を使います。

sudo rpm --import https://downloads.1password.com/linux/keys/1password.asc
sudo yum install 1password-cli

動作要件: 1Password for Linux アプリ、PolKit、認証エージェント

Windows へのインストール

winget を使ったインストールを推奨します。

winget install 1Password.1PasswordCLI

手動インストールの場合、op.exe をダウンロードして任意のフォルダ(例: C:\Program Files\1Password CLI)に配置し、システム PATH に追加します。

動作要件: 1Password for Windows アプリ、PowerShell

デスクトップアプリとの連携設定

OS 手順
macOS 1Password アプリを開く → 環境設定 → Developer → "Integrate with 1Password CLI" を有効化
Windows 1Password アプリを開く → 設定 → Developer → "Integrate with 1Password CLI" を有効化
Linux 1Password アプリを開く → 設定 → セキュリティ → "システム認証でロック解除" を有効化 → Developer 連携を有効化

生体認証の有効化

OS 設定方法
macOS デスクトップアプリ連携を有効化すると Touch ID / Apple Watch が利用可能
Windows Windows Hello を有効化した状態でデスクトップアプリ連携を設定
Linux システム認証(polkit)を通じて生体認証を利用

設定後、初回コマンド実行時(例: op vault list)に認証プロンプトが表示されます。

サービスアカウントの設定

サービスアカウントは CI/CD や自動化スクリプト向けの非対話型認証手段です。対応バージョンは 1Password CLI 2.18.0 以降です。

Web UI での作成手順:

  1. 1password.com にサインインします
  2. Developer > Directory > Other(Infrastructure Secrets Management)に移動します
  3. ウィザードでサービスアカウント名、Vault アクセス権限、Environment を設定します
  4. "Create Account" を選択するとトークンが表示されます
  5. トークンは 一度だけ表示される ため、直ちに 1Password へ保存します

CLI での作成:

op service-account create "ci-bot" \
  --vaults "app-prod:read_items,write_items"

環境変数として設定:

export OP_SERVICE_ACCOUNT_TOKEN="ops_eyJz..."
op vault list

初回サインイン

デスクトップアプリ連携を設定した場合、op vault list などのコマンド実行時に自動的に認証プロンプトが起動します。

複数アカウントを管理する場合は op signin を使います。

op signin
# アカウント URL、メールアドレス、Secret Key を入力してサインイン

利用方法

コマンド体系の全体マップ

1Password CLI は op <noun> <verb> [flags] という noun-verb 構造を採用しています。noun はトピック(管理対象)、verb はそのトピックに対する操作を表します。

管理系コマンド

Noun Verb 一覧 概要
account get, list, forget ローカルに設定されたアカウントの管理
vault create, get, list, edit, delete ボルトの CRUD 操作と権限管理
item create, get, list, edit, delete, move, share アイテムの CRUD 操作
document create, get, list, edit, delete ドキュメントアイテムの CRUD 操作
user get, list, invite, confirm, edit, suspend, reactivate, delete アカウントユーザーの管理
group create, get, list, edit, delete グループの管理とメンバー・ボルトの権限制御
connect server create/get/list/edit/delete, token create/list/edit/delete Connect サーバーとトークンの管理
events-api create, get, list Events API 連携の管理
plugin init, list, run, inspect, clear Shell Plugins の管理
service-account create, list, ratelimit, revoke サービスアカウントの管理

ユーティリティコマンド

コマンド 概要
op read <secret-reference> シークレット参照から値を読み取り
op run -- <command> シークレットを環境変数として展開しながらコマンドを実行
op inject テンプレートファイルにシークレットを注入して出力
op signin 1Password アカウントにサインイン
op signout サインインセッションを終了
op whoami 現在サインインしているアカウント情報を表示
op update CLI のアップデートを確認してダウンロード
op completion シェル補完スクリプトを生成

シークレット参照構文

シークレット参照は op:// スキームで Vault / Item / Field を指定します。

op://<vault>/<item>/<field>
op://<vault>/<item>/<section>/<field>  # セクションを含む場合

例:

op://app-prod/db/password
op://prod/mysql/username
op://app-dev/api/credentials/token

op read: シークレットの取得

シークレット参照を標準出力へ展開します。

# 標準出力へ出力
op read "op://app-prod/db/password"

# ファイルへ書き出し
op read "op://app-prod/tls/cert" --out-file ./cert.pem

# JSON 形式で出力
op read "op://app-prod/db/password" --format json

op run: プロセスへのシークレット注入

環境変数に設定したシークレット参照を展開してプロセスを実行します。

# 環境変数にシークレット参照をセット
export DB_USER="op://app-dev/db/user"
export DB_PASSWORD="op://app-dev/db/password"

# op run 経由でアプリを起動
op run -- node app.js

# 単一コマンドでまとめて指定
op run --env-file=.env -- python server.py

デフォルトでシークレット値はマスクされます(<concealed by 1Password>)。--no-masking フラグで実際の値を表示できます。

op inject: テンプレートへのシークレット注入

テンプレートファイル内のシークレット参照をシークレットに置換します。

テンプレートファイル(config.yml.tpl):

database:
  host: http://localhost
  port: 5432
  username: {{ op://prod/mysql/username }}
  password: {{ op://prod/mysql/password }}

実行例:

# 標準入力から処理
echo "db_password: {{ op://app-prod/db/password }}" | op inject

# ファイル指定
op inject --in-file config.yml.tpl --out-file config.yml

# 環境変数で参照先を切り替え
echo "db_password: op://$env/db/password" | env=prod op inject

Item の CRUD 操作

作成(Create)

# 基本的な Login アイテムの作成
op item create \
  --category Login \
  --title "My App DB" \
  --vault "app-prod" \
  --url "https://db.example.com" \
  --generate-password \
  username=admin@example.com

# テンプレートから作成(機密値の直接指定を避ける場合)
op item template get Login > login_template.json
# login_template.json を編集後
op item create --template login_template.json

取得(Get)

# アイテム全体を取得
op item get "My App DB"

# 特定フィールドのみ取得
op item get "My App DB" --fields label=username,label=password

# JSON 形式で出力
op item get "My App DB" --format json

# Vault を指定して取得
op item get "My App DB" --vault "app-prod"

更新(Edit)

# フィールドの値を変更
op item edit "My App DB" username="newuser@example.com"

# パスワードを再生成
op item edit "My App DB" --generate-password

# タグを追加
op item edit "My App DB" --tags "production,database"

削除(Delete)

# アーカイブ(30 日間は復元可能)
op item delete "Old API Key" --archive

# 完全削除
op item delete "Old API Key"

一覧表示(List)

# Vault 内のアイテム一覧
op item list --vault "app-prod"

# カテゴリと JSON 形式を組み合わせ
op item list --category Login --format json

# タグでフィルタ
op item list --tags "production"

Vault の管理

# Vault 一覧
op vault list

# Vault の作成
op vault create "new-project"

# Vault の詳細確認
op vault get "app-prod"

# Vault の削除
op vault delete "old-project"

フォーマット指定

フラグ / 環境変数 説明
--format json JSON 形式で出力
--format human-readable 人が読みやすい形式で出力(デフォルト)
OP_FORMAT=json 環境変数でデフォルト形式を設定
# jq と組み合わせてフィールドを抽出
op item get "My App DB" --format json | jq '.fields[] | select(.label=="password") | .value'

# Vault 一覧を JSON で取得
op vault list --format json

Shell Plugins の基本的な使い方

Shell Plugins は第三者 CLI ツールの認証情報を 1Password で管理し、生体認証でサインインする機能です。

# 利用可能なプラグイン一覧を確認
op plugin list

# プラグインを初期化(例: GitHub CLI)
op plugin init gh

# プラグインを経由してコマンドを実行
op plugin run -- gh repo list

# Shell プロファイルへ登録(永続化)
# ~/.zshrc または ~/.bashrc に追加
source ~/.config/op/plugins.sh

op plugin init 実行時に既存の認証情報のインポートまたは 1Password への新規保存を選択できます。plugins.sh を source するとプラグインのエイリアスが有効になり、以降は通常のコマンドと同様に利用できます。

対応 Shell Plugins 一覧(主要カテゴリ)

2025 年 2 月時点で 70 以上の CLI ツールに対応しています。最新の対応状況は 公式 Shell Plugins ページ を参照してください。

カテゴリ 主要ツール
クラウドプロバイダー aws, cdk, doctl, hcloud, flyctl
DevOps・CI/CD circleci, argocd, terraform, pulumi
バージョン管理 gh, glab, tea, cargo, brew
データベース psql, mysql, mongocli, snowsql, influx
SaaS・API stripe, twilio, vercel, openai, heroku, wrangler, ngrok, snyk

カスタム Shell Plugin の作成

対応していないツールを自作プラグインとして追加できます。

# リポジトリをクローンしてスキャフォールドを生成
git clone https://github.com/1Password/shell-plugins
cd shell-plugins
make new-plugin

# plugin.go にプラットフォーム情報を定義
# credentials/ に認証情報スキーマとプロビジョナーを定義
# executables/ に実行ファイルと認証情報のマッピングを定義

# バリデーションとビルドを実行
make validate
make build

前提条件: Go 1.18 以降、Git、GNU Make

SSH エージェントの設定

Step 1: SSH エージェントの有効化

1Password デスクトップアプリの Settings > Developer > SSH Agent を有効化します。

Step 2: ~/.ssh/config の設定

macOS:

Host *
    IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"

Linux:

Host *
    IdentityAgent ~/.1password/agent.sock

Windows(WSL):

Host *
    IdentityAgent \\.\pipe\openssh-ssh-agent

Step 3: agent.toml による鍵の制御(任意)

デフォルトでは Personal、Private、Employee ボルトの鍵が使用されます。追加のボルトの鍵を使用する場合は ~/.config/1Password/ssh/agent.toml を作成します。

[[ssh-keys]]
item = "github ssh key - work"
vault = "Work"

[[ssh-keys]]
vault = "Private"

Step 4: 動作確認

ssh-add -l

SSH キーは SSH Key アイテムタイプ(Ed25519 または RSA)として保存されている必要があります。OpenSSH サーバーは通常 6 キーまでしか認証試行を受け付けないため、キーが多い場合は agent.toml で鍵の順序を制御します。

運用

セッション管理

セッショントークンは非アクティブ状態が 30分 続くと失効します。失効後は再度サインインしてトークンを取得します。OP_SESSION 環境変数にトークンがセットされます。

操作 コマンド
サインイン(Bash/Zsh) eval $(op signin)
サインイン(PowerShell) Invoke-Expression $(op signin)
トークン取得(手動エクスポート用) op signin --raw
サインアウト op signout
現在のアカウント確認 op whoami
アカウント一覧 op account list

セキュリティ上の注意点:

  • op signin による手動サインインは、同一ユーザーの他プロセスからセッションキーにアクセスされる可能性があります
  • 1Password アプリ連携によるサインインは、より堅牢なセキュリティ保証を提供します
  • セッションを即座に終了する場合は op signout を使用します

サービスアカウントの運用

初期設定:

# サービスアカウントトークンを環境変数にセット
export OP_SERVICE_ACCOUNT_TOKEN="ops_eyJh..."

# 設定確認
op vault list

トークンの注意点:

  • サービスアカウント作成ウィザードはトークンを 一度しか表示しません
  • 作成直後にトークンを 1Password に保存します
  • トークンは Base64 エンコードされた JWT 形式です

トークンローテーション:

# サービスアカウント一覧
op service-account list

# レートリミット確認
op service-account ratelimit
ローテーション操作 手順
1. 新トークン生成 1Password.com の管理画面でトークンをローテーション
2. 旧トークン有効期限設定 即時 / 1時間 / 3日後 から選択
3. 新トークンを CI/CD シークレットに反映 各プラットフォームの設定を更新
4. 旧トークン失効確認 有効期限後にアクセス不可であることを確認

権限の制約:

  • 作成後にボルトアクセスや権限を変更できません
  • 変更が必要な場合は、新しいサービスアカウントを作成します
  • サービスアカウントは他のサービスアカウントを作成できません

CI/CD パイプラインでの利用

GitHub Actions

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Configure 1Password
        uses: 1password/load-secrets-action/configure@v2
        with:
          service-account-token: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}

      - name: Load secrets
        uses: 1password/load-secrets-action@v2
        env:
          APP_SECRET_KEY: op://prod-vault/app-config/secret_key
          DB_PASSWORD: op://prod-vault/database/password

      - name: Deploy
        run: ./deploy.sh

設定手順:

  1. GitHub リポジトリの Settings > Secrets にシークレット OP_SERVICE_ACCOUNT_TOKEN を作成します
  2. シークレット値にサービスアカウントトークンをセットします
  3. ワークフロー内でシークレット参照 URI(op://vault/item/field)を指定します

制約:

  • Linux および macOS ランナーのみサポート(Windows ランナーは非対応)
  • ログ出力にシークレットが露出した場合、1Password が自動的に <concealed by 1Password> に置換

CircleCI

version: 2.1
orbs:
  onepassword: 1password/secrets@1.0.0

jobs:
  build:
    executor: onepassword/default
    steps:
      - onepassword/install-cli
      - onepassword/exec:
          command: ./run-tests.sh

OP_SERVICE_ACCOUNT_TOKEN を CircleCI のプロジェクト環境変数に設定します。

汎用シェルスクリプト

#!/bin/bash
# OP_SERVICE_ACCOUNT_TOKEN は事前にセット済みとする

# シークレット参照で環境変数を注入してコマンド実行
op run --env-file=.env.op -- node server.js

# 特定フィールドを直接読み込む
DB_PASSWORD=$(op read "op://prod-vault/database/password")

監査・イベントログ

1Password Business アカウントの管理者は Events API でアクティビティを監視できます。

監視対象 内容
アカウントアクティビティ ボルト・グループ・ユーザーへの変更
アイテム使用状況 閲覧・コピー・編集の履歴
認証ログ サインイン試行・場所・失敗詳細
# Events Reporting 統合を作成後、SIEM と連携
# API エンドポイント: https://events.1password.com/api/v1/

Events API は SIEM(Splunk, Datadog 等)との連携で監査証跡を一元管理できます。

バージョンアップ手順

# 現在のバージョン確認
op --version

# 最新バージョンの確認とダウンロード
op update

パッケージマネージャー経由のアップデート:

# macOS (Homebrew)
brew upgrade 1password-cli

# Linux (APT)
sudo apt update && sudo apt upgrade 1password-cli

CLI 1 から CLI 2 への移行:

1Password CLI 1 は 2024年10月1日に非推奨になりました。

移行戦略 用途
即時置換 小規模チームで同時移行可能な場合
Docker コンテナ活用 プロジェクト単位で段階移行する場合
並行インストール 旧版を op1、新版を op として共存させて段階移行

コマンド構文の主な変更点:

# CLI 1(旧)
create item

# CLI 2(新)
op item create --category Login

デフォルト出力形式が JSON からテーブル形式に変わりました。JSON 形式が必要な場合は --format json を使用します。

バックアップ・リカバリ

シークレット参照の管理:

  • .env ファイルの代わりにシークレット参照 URI(op://vault/item/field)をリポジトリに保存します
  • シークレット参照 URI はシークレットそのものではないため、バージョン管理に安全です

アカウントリカバリ:

# チームメンバーのアカウントリカバリ
op user recover <user-uuid>

設定ファイルのバックアップ:

  • CLI 設定: ~/.config/op/config
  • このファイルにはデバイス ID が含まれます。サービスアカウントトークンと一致している必要があります。

ベストプラクティス

シークレット管理のベストプラクティス

シークレットをソースコードやファイルに平文で保存せず、op:// 参照を使用します。

op item create でアイテムを作成する際は、インライン入力ではなく JSON テンプレートファイルを使用します。

# 推奨: テンプレートファイルを使用
op item create --template ./item-template.json

# 非推奨: コマンドライン上にシークレットを直接記述
op item create --category Login --title "My App" \
  --field "password=mysecretpassword"

環境変数へのシークレット注入には op run を使用します。

# シークレット参照ファイルを使用して実行
op run --env-file=.env.tpl -- ./app

.env.tpl の記述例:

DB_PASSWORD=op://prod-vault/database/password
API_KEY=op://prod-vault/api-service/api_key

権限設計(最小権限の原則)

サービスアカウントには必要なボルトのみアクセス権を付与します。用途別にサービスアカウントを作成します(例:本番用・ステージング用・読み取り専用)。

権限タイプ 用途例
READ のみ シークレットを読み取るだけの CI/CD ジョブ
READ + WRITE シークレットを更新する自動化スクリプト
# サービスアカウント作成時にボルトとロールを指定
op service-account create "prod-deployer" \
  --expires-in 90d \
  --vault "prod-secrets:read_items"

環境別の設定管理

本番・ステージング・開発環境ごとに専用のボルトを作成します。各環境専用のサービスアカウントを発行します。

1Password ボルト構成例:
├── prod-vault         ← 本番環境(サービスアカウント: sa-prod)
├── staging-vault      ← ステージング(サービスアカウント: sa-staging)
└── dev-vault          ← 開発環境(サービスアカウント: sa-dev)

シークレット参照 URI でボルトを明示します:

op read "op://prod-vault/app-config/secret_key"
op read "op://staging-vault/app-config/secret_key"

チーム運用のガイドライン

ガイドライン 詳細
サービスアカウント作成権限 オーナー・管理者のみに限定(デフォルト設定を維持)
トークン管理 生成トークンを即座に 1Password に保存
定期ローテーション 組織のセキュリティポリシーに従い定期的にトークンをローテーション
使用状況モニタリング 管理画面でボルトアクセス履歴・アイテムアクセス履歴を定期確認
不要アカウントの削除 使用されなくなったサービスアカウントは速やかに削除
# サービスアカウントの使用状況確認
op service-account list

# 特定サービスアカウントの詳細確認
op service-account get <account-id>

セキュリティ上の推奨設定

  • アプリ連携サインインを優先します。 手動サインイン(eval $(op signin))は同一ユーザーの他プロセスからアクセスされる可能性があります
  • 1Password Connect との混在に注意します。 OP_CONNECT_HOSTOP_CONNECT_TOKEN が設定されている場合、OP_SERVICE_ACCOUNT_TOKEN より優先されます
  • トークンの即時失効手順を確立します。 侵害が疑われる場合、管理画面からトークンを即時失効します
# 1Password Connect 変数のクリア(サービスアカウントを使用する場合)
unset OP_CONNECT_HOST
unset OP_CONNECT_TOKEN
export OP_SERVICE_ACCOUNT_TOKEN="ops_eyJh..."

トラブルシューティング

よくあるエラーと解決方法

エラー 原因 解決策
No session token found セッション未確立または失効 eval $(op signin) を再実行
Authentication required OP_SESSION 未設定 eval $(op signin) または OP_SERVICE_ACCOUNT_TOKEN を設定
error initializing client: RequestDelegatedSession 1Password アプリとの接続失敗 CLI とアプリを最新版に更新
Signin credentials are not compatible 非インタラクティブ環境でのサインイン失敗 サービスアカウントトークンを使用
connection reset 1Password アプリが未起動 アプリを起動し「CLI との統合」設定を有効化

認証関連のトラブル

セッション失効:

# セッション失効の確認
op whoami

# 再サインイン
eval $(op signin)

サービスアカウントトークンの問題:

# 設定確認
echo $OP_SERVICE_ACCOUNT_TOKEN

# 1Password Connect 変数が優先されていないか確認
echo $OP_CONNECT_HOST
echo $OP_CONNECT_TOKEN
# 値が設定されている場合はクリア
unset OP_CONNECT_HOST
unset OP_CONNECT_TOKEN

デスクトップアプリ連携の問題:

  1. 1Password アプリを起動します
  2. Settings > Developer > 「Integrate with 1Password CLI」を有効にします
  3. CLI を再インストールします(必要な場合)

接続・ネットワーク関連の問題

# 接続テスト
op account list --debug 2>&1 | head -50

# プロキシ設定の確認
echo $HTTPS_PROXY
echo $HTTP_PROXY

タイムアウトエラー:

  • SSO 認証使用時に authorization timeout が発生する場合、初回認証後に数分待ってから新しいターミナルを開きます
  • ネットワーク制限環境では OP_CONNECT_HOST で 1Password Connect サーバーを使用します

権限関連の問題

# 使用可能なボルト一覧(アクセス可能なボルトのみ表示)
op vault list

# アイテムへのアクセステスト
op item get "item-name" --vault "vault-name" --debug
問題 原因 解決策
ボルトが一覧に表示されない サービスアカウントのアクセス権なし 新しいサービスアカウントを作成して権限を再設定
Forbidden エラー 権限不足(READ/WRITE) 管理者に権限確認を依頼
Personal/Private ボルトにアクセスできない サービスアカウントの制約 ユーザーアカウントで認証するか共有ボルトを使用

デバッグ方法

# --debug フラグでデバッグ出力を有効化(stderr に出力)
op vault list --debug

# デバッグ出力をファイルに保存
op vault list --debug 2> debug.log

# 詳細なリクエスト情報を確認
op item get "my-item" --vault "my-vault" --debug 2>&1

# バージョン確認
op --version

# アカウント設定の確認
cat ~/.config/op/config

シェルプラグインのデバッグ:

# プラグインが非インタラクティブシェルで動作しない場合
# op plugin run でラップして実行
op plugin run -- doctl compute droplet list

# プラグイン設定の確認
op plugin list

サービスアカウントのレートリミット確認:

# レートリミット状況の確認
op service-account ratelimit

# ID 指定でリクエスト数を最適化(3リクエスト → 1リクエスト)
# 名前指定(非推奨)
op item get "my-item" --vault "my-vault"

# ID 指定(推奨)
op item get <item-id> --vault <vault-id>

まとめ

1Password CLI は、シークレット管理をコマンドラインに統合するツールです。導入が特に効果的なケースは以下です。

  • 開発チームで 1Password を既に利用している場合:
    既存の Vault 構成をそのまま CLI・CI/CD に展開できるため、追加の学習コストが低い
  • 複数の CLI ツールの認証情報を管理している場合:
    Shell Plugins で認証を一元化し、平文の認証情報ファイルを排除できる
  • CI/CD パイプラインでシークレットを安全に扱いたい場合:
    サービスアカウントと op run の組み合わせで、シークレットをコード外に保てる

一方、1Password アカウント(有料)が前提となる点、サービスアカウントのレート制限や権限変更不可の制約がある点は、導入前に確認が必要です。高スループットが求められる本番環境では Connect サーバーの併用を検討してください。

この記事が少しでも参考になった、あるいは改善点などがあれば、ぜひリアクションやコメント、SNSでのシェアをいただけると励みになります!

参考リンク