外部密钥#
功能可用性
- 外部密钥在企业版自托管和企业版云端计划中可用。
- n8n 支持 AWS Secrets Manager、Azure Key Vault、GCP Secrets Manager、Infisical 和 HashiCorp Vault。
- n8n 不支持 HashiCorp Vault Secrets。
您可以使用外部密钥存储来管理 n8n 的凭证。
n8n 将所有凭证加密存储在其数据库中,并默认限制对它们的访问。通过外部密钥功能,您可以将敏感的凭证信息存储在外部保险库中,并让 n8n 在需要时加载它们。这提供了额外的安全层,并允许您在一个中心位置管理多个 n8n 环境中使用的凭证。
将 n8n 连接到您的密钥存储#
密钥名称
您的密钥名称不能包含空格、连字符或其他特殊字符。n8n 支持包含字母数字字符(a-z
、A-Z
和 0-9
)和下划线的密钥名称。n8n 目前仅支持密钥的纯文本值,不支持 JSON 对象或键值对。
- 在 n8n 中,转到 Settings > External Secrets。
- 为您的存储提供商选择 Set Up。
-
输入您提供商的凭证:
- Azure Key Vault:提供您的 vault name、tenant ID、client ID 和 client secret。参考 Azure 文档注册 Microsoft Entra ID 应用并创建服务主体。n8n 仅支持密钥的单行值。
-
AWS Secrets Manager:提供您的 access key ID、secret access key 和 region。IAM 用户必须具有
secretsmanager:ListSecrets
、secretsmanager:BatchGetSecretValue
和secretsmanager: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:ListSecrets
和secretsmanager: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,并选择您的 Authentication Method。输入您的身份验证详细信息。可选择提供命名空间。
- 参考 HashiCorp 文档了解您的身份验证方法:
Token 身份验证方法
AppRole 身份验证方法
Userpass 身份验证方法 - 如果您使用保险库命名空间,您可以输入 n8n 应连接到的命名空间。参考 Vault Enterprise 命名空间了解有关 HashiCorp Vault 命名空间的更多信息。
- 参考 HashiCorp 文档了解您的身份验证方法:
Token 身份验证方法
-
Infisical:提供一个 Service Token。参考 Infisical 的服务令牌文档了解如何获取您的令牌。如果您自托管 Infisical,请输入 Site URL。
Infisical 环境
确保在创建令牌时选择正确的 Infisical 环境。n8n 将从此环境加载密钥,并且无法访问其他 Infisical 环境中的密钥。n8n 仅支持有权访问单个环境的服务令牌。
Infisical 文件夹
n8n 不支持 Infisical 文件夹。
-
Google Cloud Platform:为至少具有以下角色的服务账户提供 Service Account Key(JSON):
Secret Manager Secret Accessor
和Secret Manager Secret Viewer
。参考 Google 的服务账户文档了解更多信息。
-
保存您的配置。
- 使用 Disabled / Enabled 切换来启用提供商。
在 n8n 凭证中使用密钥#
要在 n8n 凭证中使用存储中的密钥:
- 创建新凭证,或打开现有凭证。
- 在您想要使用密钥的字段上:
- 将鼠标悬停在字段上。
- 选择 Expression。
- 在您想要使用密钥的字段中,输入引用密钥名称的表达式:
1
{{ $secrets.<vault-name>.<secret-name> }}
<vault-name>
是vault
(对于 HashiCorp)或infisical
或awsSecretsManager
。将<secret-name>
替换为在您的保险库中显示的名称。
在 n8n 环境中使用外部密钥#
n8n 的源代码控制和环境功能允许您创建不同的 n8n 环境,由 Git 支持。该功能不支持在不同实例中使用不同的凭证。您可以使用外部密钥保险库通过将每个 n8n 实例连接到不同的保险库或项目环境来为不同环境提供不同的凭证。
例如,您有两个 n8n 实例,一个用于开发,一个用于生产。您使用 Infisical 作为保险库。在 Infisical 中,创建一个包含两个环境(开发和生产)的项目。为每个 Infisical 环境生成一个令牌。使用开发环境的令牌连接您的开发 n8n 实例,使用生产环境的令牌连接您的生产 n8n 实例。
在项目中使用外部密钥#
要在 RBAC 项目中使用外部密钥,您必须拥有实例所有者或实例管理员作为项目成员。
故障排除#
Infisical 版本更改#
Infisical 版本升级可能会导致连接 n8n 的问题。如果您的 Infisical 连接停止工作,请检查是否有最近的版本更改。如果有,请向 [email protected] 报告问题。
仅在实例所有者或管理员拥有的凭证上设置外部密钥#
由于实例所有者和管理员拥有的权限,所有者和管理员可能会使用密钥表达式更新其他用户拥有的凭证。这在实例所有者或管理员的预览中看起来有效,但在工作流在生产环境中运行时密钥不会解析。
仅对实例管理员或所有者拥有的凭证使用外部密钥。这确保它们在生产环境中正确解析。
🚀 与作者交流

📚 教程 💡 案例 🔧 技巧

⚡ 快答 🎯 定制 🚀 支持