外部密钥#
功能可用性
- 外部密钥在企业自托管和企业云计划上可用。
- 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 中,转到设置 > 外部密钥。
- 为您的存储提供商选择设置。
-
输入您提供商的凭据:
- Azure Key Vault:提供您的保管库名称、租户 ID、客户端 ID 和客户端密钥。参考 Azure 文档来注册 Microsoft Entra ID 应用并创建服务主体。n8n 仅支持密钥的单行值。
-
AWS Secrets Manager:提供您的访问密钥 ID、秘密访问密钥和区域。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,并选择您的身份验证方法。输入您的身份验证详细信息。可选择提供命名空间。
- 参考 HashiCorp 文档了解您的身份验证方法:
Token 身份验证方法
AppRole 身份验证方法
Userpass 身份验证方法 - 如果您使用保管库命名空间,可以输入 n8n 应连接的命名空间。参考 Vault Enterprise 命名空间了解更多关于 HashiCorp Vault 命名空间的信息。
- 参考 HashiCorp 文档了解您的身份验证方法:
Token 身份验证方法
-
Infisical:提供服务令牌。参考 Infisical 的服务令牌文档了解如何获取您的令牌。如果您自托管 Infisical,请输入站点 URL。
Infisical 环境
创建令牌时确保选择正确的 Infisical 环境。n8n 将从此环境加载密钥,无法访问其他 Infisical 环境中的密钥。n8n 仅支持有权访问单个环境的服务令牌。
Infisical 文件夹
n8n 不支持 Infisical 文件夹。
-
Google Cloud Platform:为至少具有以下角色的服务账户提供服务账户密钥(JSON):
Secret Manager Secret Accessor
和Secret Manager Secret Viewer
。参考 Google 的服务账户文档了解更多信息。
-
保存您的配置。
- 使用禁用/启用切换启用提供商。
在 n8n 凭据中使用密钥#
要在 n8n 凭据中使用存储中的密钥:
- 创建新凭据或打开现有凭据。
- 在您要使用密钥的字段上:
- 悬停在字段上。
- 选择表达式。
- 在您要使用密钥的字段中,输入引用密钥名称的表达式:
1
{{ $secrets.<vault-name>.<secret-name> }}
<vault-name>
是vault
(对于 HashiCorp)或infisical
或awsSecretsManager
。将<secret-name>
替换为它在您的保管库中显示的名称。
在 n8n 环境中使用外部密钥#
n8n 的源代码控制和环境功能允许您创建由 Git 支持的不同 n8n 环境。该功能不支持在不同实例中使用不同的凭据。您可以使用外部密钥保管库为不同环境提供不同凭据,方法是将每个 n8n 实例连接到不同的保管库或项目环境。
例如,您有两个 n8n 实例,一个用于开发,一个用于生产。您使用 Infisical 作为您的保管库。在 Infisical 中,创建一个具有两个环境(开发和生产)的项目。为每个 Infisical 环境生成一个令牌。使用开发环境的令牌连接您的开发 n8n 实例,使用生产环境的令牌连接您的生产 n8n 实例。
在项目中使用外部密钥#
要在 RBAC 项目中使用外部密钥,您必须有一个实例所有者或实例管理员作为项目成员。
故障排除#
Infisical 版本更改#
Infisical 版本升级可能会导致连接到 n8n 的问题。如果您的 Infisical 连接停止工作,请检查是否有最近的版本更改。如果有,请向 [email protected] 报告问题。
仅在实例所有者或管理员拥有的凭据上设置外部密钥#
由于实例所有者和管理员拥有的权限,所有者和管理员可以使用密钥表达式更新另一个用户拥有的凭据。这对于实例所有者或管理员来说在预览中似乎有效,但当工作流在生产中运行时密钥不会解析。
仅对实例管理员或所有者拥有的凭据使用外部密钥。这确保它们在生产中正确解析。