メインコンテンツまでスキップ

外部シークレット

機能の利用可否

  • 外部シークレット機能は、Enterprise セルフホスト版および Enterprise Cloud プランで利用可能です。
  • n8n は以下のシークレットプロバイダーをサポートしています:AWS Secrets Manager、Azure Key Vault、GCP Secrets Manager、HashiCorp Vault。
  • n8n バージョン 2.10.0 以降では、各シークレットプロバイダーに対して複数の Vault を接続できます。旧バージョンでは、各プロバイダーにつき1つの Vault のみがサポートされていました。
  • n8n は HashiCorp Vault Secrets をサポートしていません。

Infisical は非推奨になりました

Infisical は非推奨となりました。バージョン 2.10.0 以降、新しい Infisical Vault の接続はできなくなりますが、既存の接続は当面の間は維持されます。

外部シークレットストレージを使用して、n8n の認証情報を管理できます。

n8n はすべての認証情報を暗号化してデータベースに保存し、デフォルトでこれらの認証情報へのアクセスを制限しています。外部シークレット機能により、機密性の高い認証情報情報を外部の Vault に保存し、必要に応じて n8n が読み込むことが可能になります。これにより、追加のセキュリティレイヤーが提供され、複数の n8n 環境で使用される認証情報を一元的に管理できます。

n8n をシークレットストアに接続する

シークレット値の形式

n8n はプレーンテキスト形式のシークレット値のみをサポートしており、JSON オブジェクト形式はサポートしていません。

  1. n8n で 設定 > 外部シークレット に移動します。

  2. シークレット Vault を追加 をクリックします。

  3. Vault に一意の名前を入力します。この名前は、認証情報内の } 式で Vault を参照する際の最初のセグメントとして使用されます。

  4. サポートされているシークレットプロバイダーを選択します。

  5. プロバイダーの認証情報を入力します:

    • Azure Key VaultVault 名テナント IDクライアント IDクライアントシークレット を入力してください。詳細は Azure のドキュメント「Microsoft Entra ID アプリを登録してサービス プリンシパルを作成する」を参照してください。n8n はシークレットの単一行の値のみをサポートしています。
    • AWS Secrets Managerアクセスキー IDシークレットアクセスキーリージョン を入力してください。IAM ユーザーには secretsmanager:ListSecretssecretsmanager:BatchGetSecretValuesecretsmanager:GetSecretValue の権限が必要です。

n8n に AWS Secrets Manager 内のすべてのシークレットへのアクセスを許可するには、以下のポリシーを IAM ユーザーにアタッチできます。特定の AWS Secrets Manager シークレットのみへのアクセスを許可するように範囲を絞ることも可能です。ただし、すべてのリソースへのアクセスを可能にするためには、引き続き secretsmanager:ListSecrets および secretsmanager:BatchGetSecretValue 権限を許可する必要があります。これらの権限により、n8n は ARN 範囲内のシークレットを検索できますが、シークレットの値自体へのアクセスは許可されません。

次に、secretsmanager:GetSecretValue 権限のスコープを設定し、n8n と共有したい特定の Amazon リソースネーム(ARN)に限定する必要があります。各リソース ARN に正しいリージョンとアカウント ID が含まれていることを確認してください。ARN 情報は AWS コンソールのシークレット詳細ページで確認できます。

より詳しい IAM 権限ポリシーの例については、AWS ドキュメント を参照してください。

 * **HashiCorp Vault**:Vault インスタンスの **Vault URL** を入力し、**認証方法** を選択します。認証情報を入力してください。必要に応じて名前空間を指定することもできます。

* 使用する認証方法に関する詳細は、HashiCorp のドキュメントを参照してください:
- [Token 認証方法](<https://developer.hashicorp.com/vault/docs/auth/token>)
- [AppRole 認証方法](<https://developer.hashicorp.com/vault/docs/auth/approle>)
- [Userpass 認証方法](<https://developer.hashicorp.com/vault/docs/auth/userpass>)
* Vault 名前空間を使用している場合、n8n が接続すべき名前空間を入力できます。HashiCorp Vault 名前空間の詳細については、[Vault Enterprise 名前空間](<https://developer.hashicorp.com/vault/docs/enterprise/namespaces>) を参照してください。
* **Google Cloud Platform**:少なくとも `Secret Manager Secret Accessor` および `Secret Manager Secret Viewer` ロールを持つサービスアカウントの **サービスアカウントキー**(JSON 形式)を提供してください。サービスアカウントの詳細については、Google の[サービスアカウントドキュメント](<https://cloud.google.com/iam/docs/service-account-overview>) を参照してください。

6. 設定を 保存 します。

  1. ストアが接続されている限り、そのシークレットを認証情報内で参照できます。

Vault の共有設定

デフォルトでは、シークレット Vault はグローバルです:インスタンス内のすべてのユーザーが、その Vault のシークレットを参照する認証情報を利用できます。

インスタンス管理者は、Vault の利用を特定のプロジェクトに制限できます。Vault をプロジェクトに割り当てると、そのプロジェクトの認証情報のみがそのシークレットを参照できるようになります。Vault を単一のプロジェクトに紐付けるか、グローバルのままにするかを選択できます。

共有範囲を設定する手順:

  1. n8n で 設定 > 外部シークレット に移動します。
  2. 設定を変更したい Vault を見つけ、編集 を選択します。
  3. 共有 で以下のいずれかを選択します:
    • グローバル(Global):この Vault を n8n インスタンス全体で共有し、インスタンス内のすべての認証情報がこれらのシークレットを参照できるようにします。
    • プロジェクト(Project):この Vault を特定のプロジェクトに限定します。プロジェクトを選択すると、そのプロジェクトの認証情報のみがこれらのシークレットにアクセスできます。
  4. 設定を 保存 します。

n8n 認証情報でのシークレットの使用方法

n8n 認証情報内でストアされたシークレットを使用するには:

  1. 新しい認証情報を作成するか、既存の認証情報を開きます。
  2. シークレットを使用したいフィールドで以下の操作を行います:
    1. フィールド上にマウスカーソルを合わせます。
    2. を選択します。
  3. フィールドに、シークレット名を参照する式を入力します:
{{ $secrets.<Vault名>.<シークレット名> }}

<Vault名> および <シークレット名> は、実際の値に置き換えてください。

<Vault名> は Vault を追加した際に指定した名前です。<シークレット名> は Vault 内に表示されている実際のシークレット名に置き換えてください。

n8n 環境での外部シークレットの使用

n8n のソースコード管理および環境機能により、Git によるバージョン管理を使って、異なる n8n 環境を作成できます。ただし、この機能は異なるインスタンスで異なる認証情報を使用することをサポートしていません。外部シークレット Vault を活用することで、各 n8n インスタンスを異なる Vault やプロジェクト環境に接続し、それぞれの環境に固有の認証情報を提供できます。

たとえば、開発用と本番用の2つの n8n インスタンスがあるとします。シークレットプロバイダー側で、開発環境と本番環境の両方を含むプロジェクトを作成し、それぞれの環境用にトークンを生成します。開発環境用のトークンを使って開発用 n8n インスタンスを接続し、本番環境用のトークンを使って本番用 n8n インスタンスを接続します。

プロジェクトでの外部シークレットの使用

RBAC プロジェクト内で外部シークレットを使用するには、インスタンス所有者またはインスタンス管理者をプロジェクトメンバーとして追加する必要があります。

共有 Vault 機能を使用して、Vault を特定のプロジェクトに限定できます。プロジェクトに割り当てられた Vault は、そのプロジェクトの認証情報内でのみ使用可能です。

トラブルシューティング

インスタンス所有者または管理者が所有する認証情報でのみ外部シークレットを使用すること

インスタンス所有者および管理者は権限が高いため、他のユーザーが所有する認証情報に対してシークレット式を更新できてしまいます。所有者や管理者にとってはプレビュー時に正常に動作しているように見えますが、ワークフローが本番環境で実行された際には、シークレットが解決できなくなります。

外部シークレットは、インスタンス管理者または所有者が所有する認証情報でのみ使用してください。これにより、本番環境で正しくシークレットが解決されることを保証できます。