シークレットを設定ファイルにロードする

1Passwordマニュアル|1Password CLIを使って、シークレットをスクリプトに読み込む方法を詳しく解説します。

1Password CLIを使うと、シークレット参照を使って、平文のシークレットをコードに記述することなく、1Passwordアカウントから設定ファイルにシークレットを自動的に読み込むことができます。これにより、設定ファイルをソース管理にチェックインし、開発者ワークステーション、CI、運用サーバー全体で同期を保つことができます。これは、手動で行う必要があり、エラーが発生しやすい作業です。

1Password を使用して設定ファイルを保護する前に、次のことを行う必要があります。

  1. プロビジョニングするシークレットを1Passwordアカウントに保存する。

ステップ1:シークレット参照を取得する

シークレット参照はいくつかの方法で取得できます。

ステップ 2:設定ファイル内でシークレット参照を使う

テンプレート構文に従って、設定ファイル内の平文のシークレットを適切なシークレット参照に置き換えます。

例えば、次のような設定ファイルから開始するとします。

config.yml
database:
    host: http://localhost
    port: 5432
    username: op://$APP_ENV/mysql/username
    password: op://$APP_ENV/mysql/password

そして、mysqlアイテム上のusernamepasswordシークレットを保存するとprodというvaultに保存すると、次のテンプレート化された構成ファイルが作成されます。

config.yml ファイル database: host: http://localhost port: 5432 username: op://prod/mysql/username password: op://prod/mysql/password

ステップ2:シークレットを挿入する

設定ファイルからシークレットをロードし、実行時にプロビジョニングするには、op injectコマンドを使ってシークレットを本番環境に直接挿入します。 例:

$ op inject -i config.yml.tpl -o config.yml

出力ファイルのconfig.ymlでは、シークレット参照が参照する平文のシークレットに置き換えられます。

設定ファイル テンプレートはソース管理内のコードと一緒に保存されるため、全開発者がファイルの構造を確認できます。

危険

シークレット参照を解決した後の設定ファイルが不要になったら、必ず削除してください。

ステップ3:環境ごとに違うシークレットセットに切り替える

あらゆる環境で1Passwordアイテムを同じ方法で整理することを強くお勧めします。 例:app/dev/db/passwordとapp/prod/db/password

これを行うと、テンプレートファイル内の変数を使用して、別のシークレットセットに切り替えることができます。環境、ステージ、リージョン、またはその他の変数を使用できます。

例:

config.yml ファイル

database:

host: http://localhost

port: 5432

username: op://$APP_ENV/mysql/username

password: op://$APP_ENV/mysql/password

そうすれば、テンプレート構文を使って、テンプレートに注入するときにAPP_ENV変数を設定することができます。

Bash, Zsh, sh, fishの場合 $ APP_ENV=prod op inject -i config.yml.tpl -o config.yml PowerShellの場合 ①$APP_ENV変数をprodに設定します。 PS C:¥> $Env:APP_ENV = "prod" ②on injectコマンドでシークレットを挿入します。 PS C:¥> op inject -i config.yml.tpl -o config.yml

これにより、アプリケーションの近くにあるソース管理に保存されている同じテンプレートファイルを全てのデプロイメントで使用できるようになります。

オプション:本番環境でop injectを使う

アプリケーションが適切な設定でローカルで動作するようになったので、1Password CLI を使って本番環境でシークレットをプロビジョニングできます。

これを行うには、まず次のことを行う必要があります。

  1. 1Password Connect Serverをデプロイし、本番環境からアクセスできるようにします。

Connect サーバーで1Password CLIを使うには、実稼働環境でのConnectインスタンスの資格情報をOP_CONNECT_HOSTとOP_CONNECT_TOKENという2つの環境変数に設定します。

これで、シークレットを設定ファイルに移動し、それらにop injectコマンドで簡単にアクセスできるようになります。

Connectサーバーでは次のコマンドを使用できます。

  • op run

  • op inject

  • op read

  • op item get

次の記事も参照してください。

Last updated