身份验证与授权

通过 Secret 配置 LDAP 密码

若要配置 Neo4j Helm 部署以通过 Secret 使用 LDAP 系统密码,您需要创建一个包含 LDAP 密码的 Kubernetes Secret,然后将该 Secret 名称和挂载路径添加到 values.yaml 文件中。

  1. 运行以下命令创建包含 LDAP 密码的 Secret。该 Secret 必须包含一个名为 LDAP_PASS 的键。

    kubectl create secret generic <secret-name> --from-literal=LDAP_PASS=<ldap-password>
  2. 将 Secret 名称添加到 values.yaml 文件中。

    # ldapPasswordFromSecret defines the secret which holds the password for ldap system account
    # Secret key name must be LDAP_PASS
    # This secret is accessible by Neo4j at the path defined in ldapPasswordMountPath
    ldapPasswordFromSecret: "" (1)
    
    # The above secret gets mounted to the path mentioned here
    ldapPasswordMountPath: "" (2)
    1  — Kubernetes 集群中显示的 Secret 名称。
    2  — Secret 将作为卷挂载到 Neo4j 容器中的路径。

配置 SSO

Neo4j 支持通过实现 OpenID Connect (OIDC) 标准的身份提供商进行 SSO 身份验证和授权。

若要配置 Neo4j Helm 部署以使用 SSO 身份验证,首先需要配置您的身份提供商,以便使用 ID 令牌进行身份验证和授权。然后,通过将所有 SSO 配置添加到 values.yaml 文件中,配置 Neo4j Helm 部署以使用该身份提供商进行身份验证。

有关如何配置身份提供商以及应定义哪些设置的更多信息,请参阅 Neo4j 单点登录 (SSO) 配置

将 Neo4j 配置为使用 Azure SSO 进行身份验证的示例
config:
  dbms.security.oidc.azure.audience: "00f3a7d3-d855-4849-9e3c-57d7b6e12794"
  dbms.security.oidc.azure.params: "client_id=00f3a7d3-d855-4849-9e3c-57d7b6e12794;response_type=code;scope=openid profile email"
  dbms.security.oidc.azure.well_known_discovery_uri: "https://portal.azure.comda501982-4ca7-420c-8926-1e65b5bf565f/v2.0/.well-known/openid-configuration"
  dbms.security.authorization_providers: "oidc-azure,native"
  dbms.security.authentication_providers: "oidc-azure,native"
  dbms.security.oidc.azure.display_name: "Azure SSO on K8s"
  dbms.security.oidc.azure.auth_flow: "pkce"
  server_type_principal=id_token;token_type_authentication=id_token"
  dbms.security.oidc.azure.config: "principal=unique_name;code_challenge_method=S256;
  dbms.security.oidc.azure.claims.username: "sub"
  dbms.security.oidc.azure.claims.groups: "groups"
  dbms.security.oidc.azure.authorization.group_to_role_mapping: "group1=editor;group2=editor,publisher"

sub 是唯一能保证唯一且稳定的声明(claim)。其他声明(如 emailpreferred_username)可能会随时间推移而更改,因此应用于身份验证。在混合授权配置中,Neo4j 可能会根据此用户名值向用户分配权限。因此,不建议将用户名声明从 sub 更改为其他值。有关详细信息,请参阅 Microsoft 文档 以及 OpenId 规范

配置服务账户

在某些部署情况下,可能需要为 Neo4j Pod 分配一个 Kubernetes 服务账户(Service Account)。例如,如果 Pod 中的进程需要连接到需要服务账户授权的服务。要将 Neo4j Pod 配置为使用 Kubernetes 服务账户,请将 podSpec.serviceAccountName 设置为要使用的服务账户名称。

例如:

# neo4j-values.yaml
neo4j:
  password: "my-password"

podSpec:
  serviceAccountName: "neo4j-service-account"

该服务账户必须已经存在。在集群的情况下,Neo4j Helm Chart 会创建并配置该服务账户。