1Password のシークレットを GitHub Actions にロードする

1Passwordマニュアル|GitHub Actionsと連携し、1Passwordからシークレットを安全にロードする方法を詳しく解説します。CI/CD統合での活用法も紹介。

1Password GitHub Actionからシークレットをロードする、シークレット参照を使用して、1Password から GitHub Actions にシークレットを安全に読み込むことができます。シークレット参照は 1Password と自動的に同期され、コード内のプレーンテキストのシークレットが公開されるリスクがなくなります。

1Password Connect Serverまたは1Password Service Accountload-secrets-actionを使用して認証できます。サービス アカウントで GitHub Action を使う方法の簡単な紹介については、以下のビデオをご覧ください。

https://youtu.be/kVBl5iQYgSA

INFO

通常のGitHubリポジトリシークレットと同様, 1Password は、GitHub Actions ログに表示される機密フィールドを自動的にマスクします。これらの値のいずれかが誤って印刷された場合は、 ***に置き換えられます。

Requirements

サービス アカウントまたはConnect サーバーのいずれかを使用して 1Passwordに認証するアクションを構成できます。

Service account

1Password GitHub Actionからシークレットをロードする前にサービス アカウントを使う場合は、次の操Createを行う必要があります。

Connect

1Password GitHub Actionからシークレットをロードする前にConnect サーバーを使う場合は、次の操Createを行う必要があります。

注意

1Password GitHub Action からシークレットをロードするMacとLinuxランナーのみサポートWindows ランナーでは動作しません。

Get started

開始手順は、サービス アカウントを使うか Connect サーバーを使うかによって異なります。

Service account

  • ②サービス アカウント トークンをワークフローに追加します。 OP_SERVICE_ACCOUNT_TOKENという名前の GitHub リポジトリのシークレットをCreateし、それをサービス アカウント トークンの値に設定します。 GitHub Actions でのシークレットの使用をご覧ください方法を学ぶために。

  • ③ワークフローを構成します。 1password/load-secrets-action/configureアクションを使用して、シークレットを取得する予定のサービス アカウントのトークンを指定します。 次の例では、コマンドを使用して、 service-account-token をOP_SERVICE_ACCOUNT_TOKENシークレットにconfigure設定します。

ヒント

configureステップでservice-account-token を設定すると、その値が後続の全てのステップで使用できるようになります。

特定のステップでのみサービス アカウント トークンを使うことで、ステップのアクセスをサービス アカウント トークンに制限できます。

特定のステップでサービス アカウント トークンを使うには、そのステップのenv変数に設定します。

④シークレットをロードします。

この1password/load-secrets-actionアクションを使用して、 1Password アカウント内のシークレットがSaveされている場所を指すsecret reference URI に環境変数を設定します。

次の例では、SECRET環境変数を、app-cicdというタイトルの保管庫にSaveされた hello-worldという項目内のsecretという名前のフィールドの値に設定します。

  • このアクションにより、参照されたシークレットがSECRET次のステップの環境変数として使用できるようになります。

Connect

  • Load secrets from 1Password GitHub Action (load-secrets-action) をワークフローに追加します。 ワークフローにアクションを追加するを参照してください。

  • ②Connect サーバー トークンをワークフローに追加します。 リポジトリにOP_CONNECT_TOKENという名前のシークレットをCreateし、それを Connect サーバー トークンの値に設定します。 GitHub Actions でのシークレットの使用をご覧ください方法を学ぶために。

  • ③ワークフローを構成します。 1password/load-secrets-action/configureアクションを使用して、Connect server environment variableを指定します。 次の例では、configure コマンドを使用して次の操Createを実行します。

    • connect-host をConnect サーバーのホスト名 ( OP_CONNECT_HOST ) に設定します。

    • connect-tokenをOP_CONNECT_TOKENシークレットに設定します。

ヒント

構成ステップでconnect-token を設定すると、その値が後続の全てのステップで使用できるようになります。特定のステップでのみサービス アカウント トークンを使うことで、サービス アカウント トークンへのステップ アクセスを制限できます。

特定のステップでサービス アカウント トークンを使うには、envそのステップの変数に設定します。

④シークレットをロードします。

このアクションを使用して、 1Password アカウント内のシークレットがSaveされている場所を指すシークレット参照 URI1password/load-secrets-actionに環境変数を設定します。

次の例では、SECRET環境変数を、app-cicd という名前の保管庫にSaveされている hello-world という名前の項目内の Secret という名前のフィールドの値に設定します。

このアクションにより、参照されたシークレットがSECRET次のステップの環境変数として使用できるようになります。

Reference

次のセクションでは、1Password GitHub アクションからシークレットをロードするためのアクション入力シークレット参照構文について説明します。

Action inputs

次の表に、使用可能なconfigureアクション入力を示します。

アクション入力

環境変数

説明

connect-host

OP_CONNECT_HOST

Connect サーバー、ホスト名、IP アドレス、またはインスタンス URL。

connect-token

OP_CONNECT_TOKEN

Connect サーバー トークン。

service-account-token

OP_SERVICE_ACCOUNT_TOKEN

サービス アカウント トークン。

Secret reference syntax

シークレット参照 URI は、情報がSaveされている保管庫、アイテム、セクション、フィールドの名前を使用して、1Password アカウント内でシークレットがSaveされている場所を指します。

ワークフロー YAML ファイル内のシークレット参照に環境変数を設定すると、アクションによって、参照されたシークレットが次のステップの環境変数として使用できるようになります。

Example

次の例は、app-cicd 保管庫内の aws アイテムの Secret-access-key フィールドを参照する方法を示しています。

Usage examples

アクションを使用してシークレットをロードするには、次の 2 つの方法があります。

Use secrets from the action's output

1Password GitHub Actionからシークレットを読み込むことができます環境変数としてシークレットにアクセスします。

Service account

次の例は、サービス アカウントからシークレットを読み込み、pushイベントが発生したときに出力を印刷する方法を示しています。

ステップの出力にアクセスするには、ステップのIDを設定する必要があります。outputs.<output_id>

Simple example

次の例は、サービス アカウントを使用して 1Password からシークレット (SECRET 環境変数として) をロード (および出力) する方法を示しています。シークレットを印刷すると、1Password は自動的にそれを *** に置き換えます。

The following example shows how to use a service account to load the username and token fields from the docker secret in 1Password (as DOCKERHUB_USERNAME and DOCKERHUB_TOKEN), then use them to log into Docker Hub.

次の例は、サービス アカウントを使用して 1Password の Docker シークレットからユーザー名とトークン フィールド (DOCKERHUB_USERNAME および DOCKERHUB_TOKEN として) を読み込み、それらを使用して Docker Hub にログインする方法を示しています。

config.yml

Connect

次の例は、プッシュ イベントの発生時に Connect サーバーからシークレットをロードし、出力を印刷する方法を示しています。

Simple example

次の例は、Connect サーバーを使用して 1Password からシークレット (SECRET 環境変数として) をロード (および出力) する方法を示しています。シークレットを印刷すると、1Password は自動的にそれを *** に置き換えます。

Advanced example

次の例は、Connect サーバーを使用して 1Password の Docker シークレットからユーザー名とトークン フィールド (DOCKERHUB_USERNAME および DOCKERHUB_TOKEN として) をロードし、それらを使用して Docker Hub にログインする方法を示しています。

config.yml

Export secrets as environment variables

「1Password GitHub からシークレットをロード」アクションを使用して、steps.step-id.outputs.secret-name から出力されたロードされたシークレットを使用できます。

Service account

次の例は、サービス アカウントを使用して 1Password シークレットを環境変数としてロードする方法を示しています。

Simple example

次の例は、サービス アカウントを使用して、SECRET という名前の環境変数としてシークレットをロードする方法を示しています。シークレットを印刷すると、1Password は自動的にそれを *** に置き換えます。

Advanced example

次の例は、サービス アカウントを使用して、1Password の Docker シークレットからユーザー名とトークン フィールドを DOCKERHUB_USERNAME および DOCKERHUB_TOKEN という名前の環境変数としてロードし、それらを使用して Docker Hub にログインする方法を示しています。

また、1Password の aws シークレットから access-key-id フィールドと Secret-access-key フィールドを AWS_ACCESS_KEY_ID および AWS_SECRET_ACCESS_KEY という名前の環境変数としてロードし、それらを使用して AWS にデプロイします。

config.yml

Connect

次の例は、Connect サーバーを使用して 1Password からシークレットを環境変数としてロードする方法を示しています。

Simple example

次の例は、Connect サーバーを使用して、SECRET という名前の環境変数としてシークレットをロードする方法を示しています。シークレットを印刷すると、1Password は自動的にそれを *** に置き換えます。

config.yml

Advanced example

次の例は、Connect サーバーを使用して 1Password の Docker シークレットからユーザー名とトークン フィールドを DOCKERHUB_USERNAME および DOCKERHUB_TOKEN という名前の環境変数としてロードし、それらを使用して Docker Hub にログインする方法を示しています。

また、1Password の aws シークレットから access-key-id フィールドと Secret-access-key フィールドを AWS_ACCESS_KEY_ID および AWS_SECRET_ACCESS_KEY という名前の環境変数としてロードし、それらを使用して AWS にデプロイします。

config.yml

Troubleshooting

GitHub パイプラインで 1Password CLI を使用して (load-secrets-action を使用せずに) アイテムをCreateしようとすると、コマンドは次のエラーで失敗します。

Failed to create item: invalid JSON

例えば、次の場合はエラーが発生します。

パイプライン環境はパイプ モードです。これにより、パイプ入力を期待する CLI のパイプ検出がトリガーされます。

この環境でアイテムをCreateするには、アイテムの詳細を含むJSON テンプレートを使用します。

  • ①Createしたいアイテムのカテゴリのテンプレートを取得します。

  • $ op item template get --out-file=new-item.json <category>

  • テンプレートを編集して情報を追加します。

  • ③アイテムの内容をコマンドにパイプします。

  • $ cat new-item.json | op item create --vault <vault>