シークレットを設定ファイルにロードする
1Passwordマニュアル|1Password CLIを使って、シークレットをスクリプトに読み込む方法を詳しく解説します。
Last updated
1Passwordマニュアル|1Password CLIを使って、シークレットをスクリプトに読み込む方法を詳しく解説します。
Last updated
1Password CLIを使うと、を使って、平文のシークレットをコードに記述することなく、1Passwordアカウントから設定ファイルにシークレットを自動的に読み込むことができます。これにより、設定ファイルをソース管理にチェックインし、開発者ワークステーション、CI、運用サーバー全体で同期を保つことができます。これは、手動で行う必要があり、エラーが発生しやすい作業です。
ヒント
に従うために、を使うことをお勧めします。サービス アカウントは、1Password CLIを特定のVaultに制限することをサポートしているため、承認されたターミナルセッションのプロセスは、特定の目的のために必要なアイテムにのみアクセスできるようになります。
1Password を使用して設定ファイルを保護する前に、次のことを行う必要があります。
プロビジョニングするシークレットを1Passwordアカウントに保存する。
シークレット参照はいくつかの方法で取得できます。
:アプリから秘密の参照をコピーします。
:コードを編集するときに 1Password から秘密の参照を挿入します。
:op item get
コマンドを使い1つまたは複数のフィールドのシークレット参照を取得します。
を使って、シークレット参照を手動で記述します。
例えば、次のような設定ファイルから開始するとします。
そして、mysql
アイテム上のusername
とpassword
シークレットを保存するとprod
というvault
に保存すると、次のテンプレート化された構成ファイルが作成されます。
設定ファイルからシークレットをロードし、実行時にプロビジョニングするには、op injectコマンドを使ってシークレットを本番環境に直接挿入します。 例:
$ op inject -i config.yml.tpl -o config.yml
出力ファイルのconfig.ymlでは、シークレット参照が参照する平文のシークレットに置き換えられます。
設定ファイル テンプレートはソース管理内のコードと一緒に保存されるため、全開発者がファイルの構造を確認できます。
危険
シークレット参照を解決した後の設定ファイルが不要になったら、必ず削除してください。
あらゆる環境で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
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
これにより、アプリケーションの近くにあるソース管理に保存されている同じテンプレートファイルを全てのデプロイメントで使用できるようになります。
アプリケーションが適切な設定でローカルで動作するようになったので、1Password CLI を使って本番環境でシークレットをプロビジョニングできます。
これを行うには、まず次のことを行う必要があります。
Connect サーバーで1Password CLIを使うには、実稼働環境でのConnectインスタンスの資格情報をOP_CONNECT_HOSTとOP_CONNECT_TOKENという2つの環境変数に設定します。
これで、シークレットを設定ファイルに移動し、それらにop injectコマンドで簡単にアクセスできるようになります。
Connectサーバーでは次のコマンドを使用できます。
op run
op inject
op read
op item get
次の記事も参照してください。
に従って、設定ファイル内の平文のシークレットを適切なシークレット参照に置き換えます。
config.yml ファイル database: host: port: 5432 username: op://prod/mysql/username password: op://prod/mysql/password
そうすれば、を使って、テンプレートに注入するときにAPP_ENV変数を設定することができます。
。
、本番環境からアクセスできるようにします。