Skip to content

外部密钥#

功能可用性

  • 外部密钥在企业自托管和企业云计划上可用。
  • n8n 支持 AWS Secrets Manager、Azure Key Vault、GCP Secrets Manager、Infisical 和 HashiCorp Vault。
  • n8n 不支持 HashiCorp Vault Secrets

您可以使用外部密钥存储来管理 n8n 的凭据

n8n 默认情况下将所有凭据加密存储在其数据库中,并限制对它们的访问。使用外部密钥功能,您可以将敏感凭据信息存储在外部保管库中,并让 n8n 在需要时加载它。这提供了额外的安全层,并允许您在一个中央位置管理跨多个 n8n 环境使用的凭据。

将 n8n 连接到您的密钥存储#

密钥名称

您的密钥名称不能包含空格、连字符或其他特殊字符。n8n 支持包含字母数字字符(a-zA-Z0-9)和下划线的密钥名称。n8n 目前仅支持密钥的纯文本值,不支持 JSON 对象或键值对。

  1. 在 n8n 中,转到设置 > 外部密钥
  2. 为您的存储提供商选择设置
  3. 输入您提供商的凭据:

    • Azure Key Vault:提供您的保管库名称租户 ID客户端 ID客户端密钥。参考 Azure 文档来注册 Microsoft Entra ID 应用并创建服务主体。n8n 仅支持密钥的单行值。
    • AWS Secrets Manager:提供您的访问密钥 ID秘密访问密钥区域。IAM 用户必须具有 secretsmanager:ListSecretssecretsmanager:BatchGetSecretValuesecretsmanager:GetSecretValue 权限。

      要让 n8n 访问 AWS Secrets Manager 中的所有密钥,您可以将以下策略附加到 IAM 用户:

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      {
      	"Version": "2012-10-17",
      	"Statement": [
      		{
      			"Sid": "AccessAllSecrets",
      			"Effect": "Allow",
      			"Action": [
      				"secretsmanager:ListSecrets",
      				"secretsmanager:BatchGetSecretValue",
      				"secretsmanager:GetResourcePolicy",
      				"secretsmanager:GetSecretValue",
      				"secretsmanager:DescribeSecret",
      				"secretsmanager:ListSecretVersionIds",
      			],
      			"Resource": "*"
      		}
      	]
      }
      

      您也可以更加限制性,让 n8n 访问选择的特定 AWS Secret Manager 密钥。您仍然需要允许 secretsmanager:ListSecretssecretsmanager:BatchGetSecretValue 权限来访问所有资源。这些权限允许 n8n 检索 ARN 范围的密钥,但不提供对密钥值的访问。

      接下来,您需要将 secretsmanager:GetSecretValue 权限的范围设置为您希望与 n8n 共享的密钥的特定 Amazon 资源名称 (ARN)。确保在每个资源 ARN 中使用正确的区域和账户 ID。您可以在 AWS 密钥仪表板中找到 ARN 详细信息。

      例如,以下 IAM 策略仅允许访问在您指定的 AWS 账户和区域中名称以 n8n 开头的密钥:

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      {
      	"Version": "2012-10-17",
      	"Statement": [
      		{
      			"Sid": "ListingSecrets",
      			"Effect": "Allow",
      			"Action": [
      				"secretsmanager:ListSecrets",
      				"secretsmanager:BatchGetSecretValue"
      			],
      			"Resource": "*"
      		},
      		{
      			"Sid": "RetrievingSecrets",
      			"Effect": "Allow",
      			"Action": [
      				"secretsmanager:GetSecretValue",
      				"secretsmanager:DescribeSecret"
      			],
      			"Resource": [
      				"arn:aws:secretsmanager:us-west-2:123456789000:secret:n8n*"
      			]
      		}
      	]
      }
      

      有关更多 IAM 权限策略示例,请参阅 AWS 文档

    • HashiCorp Vault:提供您保管库实例的Vault URL,并选择您的身份验证方法。输入您的身份验证详细信息。可选择提供命名空间。

    • Infisical:提供服务令牌。参考 Infisical 的服务令牌文档了解如何获取您的令牌。如果您自托管 Infisical,请输入站点 URL

      Infisical 环境

      创建令牌时确保选择正确的 Infisical 环境。n8n 将从此环境加载密钥,无法访问其他 Infisical 环境中的密钥。n8n 仅支持有权访问单个环境的服务令牌。

      Infisical 文件夹

      n8n 不支持 Infisical 文件夹

    • Google Cloud Platform:为至少具有以下角色的服务账户提供服务账户密钥(JSON):Secret Manager Secret AccessorSecret Manager Secret Viewer。参考 Google 的服务账户文档了解更多信息。

  4. 保存您的配置。

  5. 使用禁用/启用切换启用提供商。

在 n8n 凭据中使用密钥#

要在 n8n 凭据中使用存储中的密钥:

  1. 创建新凭据或打开现有凭据。
  2. 在您要使用密钥的字段上:
    1. 悬停在字段上。
    2. 选择表达式
  3. 在您要使用密钥的字段中,输入引用密钥名称的表达式
    1
    {{ $secrets.<vault-name>.<secret-name> }}
    
    <vault-name>vault(对于 HashiCorp)或 infisicalawsSecretsManager。将 <secret-name> 替换为它在您的保管库中显示的名称。

在 n8n 环境中使用外部密钥#

n8n 的源代码控制和环境功能允许您创建由 Git 支持的不同 n8n 环境。该功能不支持在不同实例中使用不同的凭据。您可以使用外部密钥保管库为不同环境提供不同凭据,方法是将每个 n8n 实例连接到不同的保管库或项目环境。

例如,您有两个 n8n 实例,一个用于开发,一个用于生产。您使用 Infisical 作为您的保管库。在 Infisical 中,创建一个具有两个环境(开发和生产)的项目。为每个 Infisical 环境生成一个令牌。使用开发环境的令牌连接您的开发 n8n 实例,使用生产环境的令牌连接您的生产 n8n 实例。

在项目中使用外部密钥#

要在 RBAC 项目中使用外部密钥,您必须有一个实例所有者或实例管理员作为项目成员。

故障排除#

Infisical 版本更改#

Infisical 版本升级可能会导致连接到 n8n 的问题。如果您的 Infisical 连接停止工作,请检查是否有最近的版本更改。如果有,请向 [email protected] 报告问题。

仅在实例所有者或管理员拥有的凭据上设置外部密钥#

由于实例所有者和管理员拥有的权限,所有者和管理员可以使用密钥表达式更新另一个用户拥有的凭据。这对于实例所有者或管理员来说在预览中似乎有效,但当工作流在生产中运行时密钥不会解析。

仅对实例管理员或所有者拥有的凭据使用外部密钥。这确保它们在生产中正确解析。