シークレットをスクリプトにロードする
1Passwordマニュアル|1Password CLIを使って、シークレットを設定ファイルに読み込む方法を詳しく解説します。
1Password CLIを使ってスクリプトにシークレットを読み込むことで、スクリプト内の認証情報は常に1Passwordアカウントの情報と同期され、シークレットがプレーンテキストで公開されることはありません。
次の方法を個別または組み合わせて使用して、シークレットをスクリプトに読み込むことができます。
op runコマンドを使って環境にシークレットを読み込む
op readコマンドでシークレットを読みこむ
op injectコマンドでシークレットを設定ファイルに読み込む
op plugin runコマンドでシェルプラグインを使ってシークレットを読み込む
ヒント
最小特権の原則に従うために、1Password Service Accountsを使うことをお勧めします。サービスアカウントは、1Password CLIを特定のVaultに制限することをサポートしているため、承認されたターミナルセッションのプロセスは、特定の目的のために必要なアイテムにのみアクセスできます。
個人アカウントにSSOまたはMFAの必要条件がある場合にも、サービスアカウントは便利です。
必要条件
1Password CLIを使ってスクリプトにシークレットを読み込む前に、次の操Createを行う必要があります。
スクリプトに必要なシークレットを1PasswordアカウントにSaveしてください。
オプション1:op runコマンドを使って環境にシークレットをロードする
平文のシークレットを使う代わりに、シークレット参照を含む環境ファイルを使用し、実行時にop runコマンドを使ってシークレットをスクリプトに渡すことができます。
この方法を使うと、各環境で使うシークレットのセットを簡単に変更できるため、DevOpsエンジニアは1つのシークレットのセットで本番環境でスクリプトを使って、一方で開発者はローカルマシン上で異なるシークレットで同じスクリプトを使うということができます。
例えば、AWS_SECRET_ACCESS_KEYとAWS_ACCESS_KEY_IDという環境変数を使ってスクリプトでAWSコマンドにシークレットを指定し、認証情報がprod vaultのawsアイテムのsecret-keyフィールドとaccess-keyフィールドにSaveされている場合、環境ファイルは次のようになります:
yourscript.env
AWS_SECRET_ACCESS_KEY=op://prod/aws/secret-key
AWS_ACCESS_KEY_ID=op://prod/aws/access-key
シークレットをスクリプトに渡すには、環境ファイルに--env-fileフラグを設定して、スクリプト全体をop runコマンドでラップします。
$ op run --env-file yourscript.env -- yourscript.sh
環境にシークレットをロードする方法についてより深く学んでください。
オプション2:op readコマンドでシークレットを読み込む
スクリプト内で直接、または環境変数を使って、シークレット参照でop readを利用できます。
スクリプト内で直接op readコマンドを使う
この方法では、シークレットはシークレット参照を含む単一のコマンドにのみ渡されます。
例えば、DockerにログインするコマンドでDockerユーザー名とパスワードをシークレット参照に置き換えるには、次のようにします。
yourscript.sh
$ #!/bin/bash
$
$ docker login -u $(op read op://prod/docker/username) -p $(op read op://prod/docker/password)
環境変数で使う
スクリプト内で、op readに対して環境変数をセットするコマンドやシークレット参照を含めることもできます。
例えば、スクリプト内で、AWS_SECRET_ACCESS_KEYとAWS_ACCESS_KEY_IDという環境変数を使ってシークレットを含むAWSコマンドを指定する場合、そのスクリプトは次のようになります。 yourscript.sh
$ #!/bin/bash
$
$ export AWS_SECRET_ACCESS_KEY=$(op read op://prod/aws/secret-key)
$ export AWS_ACCESS_KEY_ID=$(op read op://prod/aws/access-key-id)
$aws sts get-caller-identity
オプション3:op injectコマンドでシークレットを設定ファイルに挿入する
スクリプトが設定ファイルを使う場合は、シークレット参照を使って構成ファイルをテンプレート化し、op injectコマンドを使って、実行時にシークレット参照を基に解決したシークレットを含む設定ファイルをスクリプトに渡すことができます。
これにより、設定ファイルをソース管理にチェックインし、開発者ワークステーションとCIと運用サーバー全体で同期を保つことができます。また、シークレット参照内にテンプレート変数を含めて、さまざまな環境に対して異なるシークレットのセットを読み込むこともできます。
シークレットを設定ファイルにロードする方法についてより深く学んでください。
オプション 4:op plugin runコマンドでシェルプラグインを使いシークレットをロードする
スクリプトが対話的に実行され、スクリプトを使う各ユーザーが自分の個人トークンで認証する場合、1Password Shell Pluginを使ってスクリプトを使う前に必要な設定を最小限に抑えることができます。シェルlプラグインは、スクリプトの実行時に各ユーザーに資格情報を選択するよう求めます。
スクリプトを使う各ユーザーは、認証に資格情報を使うタイミングを設定するよう求められます。選択した資格情報がスクリプトの今後の呼び出しにも使われるようにするには、資格情報をグローバルまたはディレクトリーのデフォルトとして設定します。
シェルプラグインを使って個々のコマンドを認証するには、各コマンドをop plugin runでラップします。例えばAWSシェルプラグインを使って、sts get-caller-identityコマンドにAWS Access KeyとSecret Key IDを提供するには、次のようにします。
yourscript.sh
$ #!/bin/bash
$
$ op plugin run -- aws sts get-caller-identity
スクリプト全体でシェルプラグインを使うには、スクリプトの先頭にツールの実行可能コマンドのエイリアスを含めることができます。例えばこのスクリプトでは、AWSシェルプラグインを使って、awsスクリプト内の全コマンドのシークレットを提供します。
yourscript.sh
$ #!/bin/bash
$
$ alias aws="op plugin run -- aws"
$ aws sts get-caller-identity
利用しているツール用のシェルプラグインが存在しない場合は、新しいプラグインをCreateできます。
参考
Last updated