1Password CLIでシークレット参照を使う
1Passwordマニュアル|1Password CLIを使って、シークレット参照で安全に情報を環境へ読み込む方法を詳しく解説します。
1Password CLIを使うと、シークレット参照を使用して、プレーンテキスト(平文)でシークレットを公開することなく、1Passwordに保存されている情報を環境変数、構成ファイル、スクリプトに安全に読み込むことができます。
シークレット参照のURIには、1Passwordアカウントでシークレットが保存されるvault、アイテム、セクション、フィールドの名前が含まれます。
$ op://<①vault-name>/<②item-name>/[③section-name/]<④field-name>シークレット参照を実行時に参照するシークレットに置き換えるには、op read、op run、またはop injectコマンドを使います。
TIP
最小特権の原則に従って、1Password Service Accountsを使うことをお勧めします。 各サービスアカウントは、1Password CLIを特定のvaultに制限することをサポートしているので、許可されたターミナルセッションのプロセスが、特定の目的に必要なアイテムにのみアクセスできるようにします。
必要条件
1Password CLIでシークレット参照を使って安全にシークレットをロードするには、以下のことが必要です:
③参照したいシークレットを1Passwordアカウントに保存する。
ステップ1:シークレット参照を取得する
シークレット参照を取得するにはいくつかのやり方があります。
1Passwordデスクトップアプリで取得する: アプリからシークレット参照を入手してください。
1Password for VS Codeで取得する:コードを編集する際に、1Passwordからシークレット参照を挿入してください。
1Password CLIで取得する:
op item getコマンドを使うと、1つまたは複数のフィールドのシークレット参照を取得できます。シークレット参照構文で取得する:手作業でシークレット参照を書くこともできます。
ステップ2:平文のシークレットをシークレット参照で置き換える
シークレット参照を作成したら、それをコード中の平文のシークレットの代わりに使ってください。
以下の例では、GitHubの環境ファイルに、平文のトークンではなく、1Password内のGitHub Personal Access Tokenが保存されている場所を指すシークレット参照を指定しています。

ステップ3:シークレット参照を解決する
シークレット参照をランタイムに実際のシークレットで置き換えるには3つの方法があります。
op readコマンドで出力する
op readコマンドで出力するop read コマンドとシークレット参照を使ってシークレットを標準出力(stdout)に出力できます。
$ op read op://development/GitHub/credentials/personal_tokenシークレットをstdoutではなくファイルに書き込むには、新しいファイルへのパスとともに--out-fileフラグ(または -o)を含めます。例えば、GitHub personal access tokenを含むファイルtoken.txtを作成するには、次のようにします。
$ op read --out-file token.txt op://development/GitHub/credentials/personal_token$ ghp_WzgPAEutsFRZH9uxWYtwまた、シークレット参照を指定したop readコマンドを使って、シークレットをスクリプトに読み込むこともできます。例えば、docker loginコマンドでDockerユーザー名とパスワードの代わりにシークレット参照を使うには、次のようにします。
$ #!/bin/bash
$
$ docker login -u $(op read op://prod/docker/username) -p $(op read op://prod/docker/password)Query parameters
クエリーパラメーターを含むシークレット参照を使用して、アイテムに関する詳細情報を取得できます。
アイテムフィールドまたはファイル添付に関する情報を取得するには、取得する属性とともにattribute(またはattr)クエリーパラメーターを含めて命令します。
$ op://<vault>/<item>[/<section>]/<field>?attribute=<attribute-value>この方法でフィールドの次の属性を照会できます: type、value、title、id、purpose、otp
さらに照会できる、ファイル添付ファイルの属性は次のとおりです: content, size, id, name, type.
例えば、 GitHubアイテムのワンタイムパスワードフィールドからワンタイムパスワードを取得するには、次のようにします。
$ op read "op://development/GitHub/Security/one-time password?attribute=otp"OpenSSH形式でSSHキーのプライベートキーを取得するには、SSHキーのprivate keyフィールドのシークレット参照に、値openssh を持つssh-formatクエリーパラメーターを含めます。
$ op read "op://Private/ssh keys/ssh key/private key?ssh-format=openssh"op runコマンドで出力する
op runコマンドで出力するop runは、環境変数をスキャンしてシークレット参照を探し、1Passwordから対応する値をロードし、サブプロセスの実行中は環境変数としてシークレットを使用できるようにして、指定されたコマンドをサブプロセスで実行します。
実行時にスクリプトまたはアプリケーションにシークレットを渡すには、コマンドをop runで囲みます。
例えば、データベースに接続するために資格情報を必要とするNode.js アプリを次に示します。
$ $ node app.js
$ [INFO] Launching Node.js app...
$ [ERROR] Missing credentials DB_USER and DB_PASSWORD
$ [INFO] Exiting with code 1この例では、DB_USERとDB_PASSWORD環境変数をシークレット参照に設定できます。
$ export DB_USER="op://app-dev/db/user"
$ export DB_PASSWORD="op://app-dev/db/password"$ set -x DB_USER="op://app-dev/db/user"
$ set -x DB_PASSWORD="op://app-dev/db/password"PS C:¥> $Env:DB_USER = "DB_USER=op://app-dev/db/user"
PS C:¥> $Env:DB_PASSWORD = "DB_PASSWORD=op://app-dev/db/password"次に、op runコマンドを使って、シークレットをnode app.jsコマンドに渡します。
$ op run -- node app.js
$ [INFO] Launching Node.js app…
$ [DEBUG] ✔ Connected to db as user 'mydbuser' with password '<concealed by 1Password>'環境ファイルと一緒にop runコマンドを使う
環境ファイルでop runコマンドを使うこともできます。これを行うには、環境ファイルでプレーンテキストのシークレットの代わりにシークレット参照を使います
DB_USER="op://app-dev/db/user"
DB_PASSWORD="op://app-dev/db/password"次に、--env-fileフラグを指定してop runコマンドを使います。
op run --env-file="./node.env" -- node app.jsマスクなしでシークレットをプリントする
op runで使われるサブプロセスがstdoutにシークレットを出力する場合、そのシークレットはデフォルトでは隠されます。--no-maskingフラグを追加すると値を出力できます。
サンプルの環境変数DB_PASSWORDをシークレット参照にエクスポートするには次のように書きます:
$ export DB_PASSWORD=op://app-prod/db/passwordop runをprintenvコマンドと一緒に使うと、隠蔽されたシークレットを出力できます:
$ op run -- printenv DB_PASSWORD結果を見る...
<concealed by 1Password>--no-maskingフラグをつけるとシークレットそのものを出力します:
$ op run --no-masking -- printenv DB_PASSWORD結果の例(訳注:マスクがない):
fX6nWkhANeyGE27SQGhYQサンプルの環境変数DB_PASSWORDをシークレット参照にエクスポートするには次のように書きます:
$ set -x DB_PASSWORD=op://app-prod/db/passwordop runをprintenvコマンドと一緒に使うと、隠蔽されたシークレットを出力できます:
$ op run -- printenv DB_PASSWORD結果を見る...
<concealed by 1Password>--no-maskingフラグをつけるとシークレットそのものを出力します:
$ op run --no-masking -- printenv DB_PASSWORD結果の例(訳注:マスクがない):
fX6nWkhANeyGE27SQGhYQサンプルの環境変数DB_PASSWORDをシークレット参照にエクスポートするには次のように書きます:
PS C:¥> Env:DB_PASSWORD = "DB_PASSWORD=op://app-prod/db/password"隠蔽されたシークレットを出力するには次のように書きます:
PS C:¥> op run -- powershell -c '$env:DB_PASSWORD'結果の例:
<concealed by 1Password>--no-maskingフラグをつけるとシークレットそのものを出力します:
PS C:¥> op run --no-masking -- powershell -c '$env:DB_PASSWORD'結果の例(訳注:マスクがない):
fX6nWkhANeyGE27SQGhYQop injectコマンドで出力する
op injectコマンドで出力するop injectコマンドを使うと、スクリプトまたはファイル内のシークレット参照を、それらが参照するシークレットに置き換えることができます。
デフォルトでは、op injectは stdinからの入力を受け入れ、stdout に出力します。その代わりにファイルから入力を読み込ませるには--in-fileフラグ(または -i)を使い、出力を書き込む場所を指定するには--out-fileフラグ(または -o)を使います。
op injectを使い簡単なコマンドでシークレットを解決するには:
$ echo "here is my GitHub token: op://development/GitHub/credentials/personal_token" | op inject出力をカレントディレクトリーのtoken.txtファイルに書き込むよう指定するには:
$ echo "here is my GitHub token: op://development/GitHub/credentials/personal_token" >> token.txt | op inject --out-file token.txt$ here is my GitHub token: ghp_WzgPAEutsFRZH9uxWYtw設定ファイルと一緒に使う
op injectを使うと、シークレット参照でテンプレート化された設定ファイルを渡して、解決されたシークレットを含めた設定ファイルを出力できます。プレーンテキストのシークレットの代わりにシークレット参照を使う設定ファイルは、Gitに安全にチェックインできます。
database:
host: http://localhost
port: 5432
username: op://prod/mysql/username
password: op://prod/mysql/passwordコードの例:
$ op inject --in-file config.yml.tpl --out-file config.ymlより深く学習するには
Last updated