Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

配置 gRPC 服务

配置 gRPC 服务器,使客户端能够在网络设备上使用 gRPC 服务,包括:gRPC 网络操作接口 (gNOI) 服务、gRPC 网络管理接口 (gNMI) 服务和 gRPC 路由信息库接口 (gRIBI) 服务。

本主题讨论如何在 Junos 设备上配置 gRPC 服务,包括身份验证选项以及如何配置每个选项。在服务器和客户端建立 gRPC 会话之前,必须满足以下部分中讨论的要求:

了解基于 gRPC 的服务的身份验证和授权

gNMI、gNOI 和 gRIBI 接口使用 gRPC 远程过程调用框架进行传输。gRPC 服务器在网络设备上运行并侦听指定端口上的连接请求。gRPC 客户端应用程序在远程网络管理系统 (NMS) 上运行,并在指定的主机和端口上与服务器建立 gRPC 通道。客户端通过SSL加密的gRPC会话执行RPC,执行网络服务操作。 图 1 展示了 gRPC 客户端和服务器之间的简单连接。

图 1:gRPC 服务器和客户端交互 gRPC Server and Client Interaction

gRPC 通道使用通道凭据来处理服务器和客户端之间的身份验证。标准通道凭证使用 X.509 数字证书对服务器和客户端进行身份验证。数字证书提供了一种通过 称为证书颁发机构认证颁发机构 (证书颁发机构) 的受信任第三方对用户进行身份验证的方法。证书颁发机构验证证书持有者的身份,并对证书进行“签名”,以证明证书未被伪造或更改。X.509 标准定义证书的格式。数字证书可用于通过证书验证在两个端点之间建立安全连接。要建立 gRPC 通道,需要身份验证的每个端点(设备或应用程序)都必须在交换中提供 X.509 证书。

Junos 设备支持仅服务器身份验证以及基于 SSL 和 TLS 的 gRPC 会话的相互身份验证。配置仅限服务器的身份验证后,服务器将在建立通道时提供其公钥证书。客户端使用服务器的根证书颁发机构证书对服务器进行身份验证。配置相互身份验证后,客户端在连接到服务器时也会提供其证书,并且服务器会验证证书。如果证书验证成功,则允许客户端进行调用。尽管接受自签名证书,但建议配置相互身份验证并使用证书颁发机构签名证书以实现最强的安全性。

公钥基础架构 (PKI) 支持公共加密密钥的分发和识别,使用户既能通过互联网等网络安全地交换数据,又能验证对方的身份。对于基于 gRPC 的服务,Junos PKI 必须包含充当 gRPC 服务器的本地设备的证书。如果使用相互身份验证,则 Junos PKI 还必须包含验证连接到设备的任何 gRPC 客户端的证书所需的根证书颁发机构证书。

表 1 概述了当 gRPC 客户端连接到设备以执行基于 gRPC 的服务时,仅服务器身份验证和相互身份验证的常规要求。gRPC 服务器的证书必须在“公用名 (CN)”字段中定义服务器的主机名,或者必须在“使用者备用名称(subjectAltName 或 SAN)”IP 地址“字段中定义服务器的 IP 地址。客户端应用程序必须使用相同的值来建立与服务器的连接。如果证书定义了 SubjectAltName IP 地址字段,则在身份验证期间将忽略公用名字段。

表 1:gRPC 会话的仅服务器和相互身份验证要求
要求 仅限服务器身份验证 相互身份验证
证书

服务器必须具有 X.509 公钥证书。

如果客户端连接到服务器的 IP 地址而不是主机名,那么服务器的证书必须包含带有服务器 IP 地址的 subjectAltName (SAN) IP 地址扩展字段。

服务器和客户端必须各自具有 X.509 公钥证书。

如果客户端连接到服务器的 IP 地址而不是主机名,那么服务器的证书必须包含带有服务器 IP 地址的 subjectAltName (SAN) IP 地址扩展字段。

Junos PKI

服务器的本地证书必须加载到 Junos PKI 中。

服务器的本地证书和每个客户端的根证书颁发机构证书必须加载到 Junos PKI 中。

渠道凭证

建立 gRPC 通道时,客户端必须传入服务器的根证书颁发机构证书。

建立 gRPC 通道时,客户端必须传入其证书和密钥以及服务器的根证书颁发机构证书。

通道凭据附加到 gRPC 通道,并使客户端应用程序能够访问该服务。另一方面,呼叫凭据附加到特定的服务操作 (RPC 请求) ,并提供有关使用客户端应用程序的人员的信息。按请求发送调用凭据,即针对每个 RPC 调用发送。要在 Junos 设备上执行基于 gRPC 的操作,必须在请求中提供呼叫凭据。用户必须具有在设备上本地定义的用户帐户,或者用户必须由 TACACS+ 服务器进行身份验证,然后该服务器将用户映射到设备上本地定义的用户模板帐户。可以在 RPC 的 metadata 参数中提供调用凭据(用户名和密码)。如果身份验证成功,Junos 设备将使用指定用户的帐户权限执行 RPC 请求。

注意:

除了为 Junos 设备上执行的每个 RPC 传入呼叫凭据之外,您还可以使用瞻博网络扩展工具包 jnx_authentication_service API 在 gRPC 会话开始时登录设备一次,并在通道中执行的所有后续 RPC 都将进行身份验证。您可以从瞻 博网络下载站点下载 JET 客户端 IDL 库。

默认情况下,Junos 设备授权经过身份验证的 gRPC 客户端执行所有 gRPC RPC。您可以选择性地配置 gRPC 用户的登录类,以显式允许或拒绝特定的 gRPC RPC。要指定 RPC,请配置 allow-grpc-rpc-regexps and deny-grpc-rpc-regexps 语句并定义与 RPC 匹配的正则表达式。更多信息,请参阅 配置 gRPC RPC 授权

获取 X.509 证书

gRPC 会话使用 X.509 公钥证书对 gRPC 服务器和客户端进行身份验证。对于仅限服务器的身份验证,gRPC 服务器必须具有证书。对于相互身份验证,gRPC 服务器和客户端都必须具有证书。证书的要求是:

  • 证书可以由证书颁发机构签名或自签名。

  • 证书必须经过 PEM 编码。

  • gRPC 服务器的证书必须在公用名 (CN) 字段中定义 gRPC 服务器的主机名,或者必须在 SubjectAltName (SAN) IP 地址字段中定义 gRPC 服务器的 IP 地址。gRPC 客户端必须使用相同的值来建立与服务器的连接。如果证书定义了 SubjectAltName IP 地址,则在身份验证期间将忽略“公用名”字段。

要使用 OpenSSL 获取 gRPC 服务器的证书:

  1. 生成私钥,并指定密钥长度(以位为单位)。
  2. 如果 gRPC 客户端连接到 gRPC 服务器的 IP 地址,请更新您的 openssl.cnf 或等效配置文件,以使用 gRPC 服务器的 IP 地址定义subjectAltName=IP扩展名。
  3. 生成证书签名请求 (CSR),其中包含实体的公密钥及其身份信息。

    或者,您可以在单个命令中提供 CSR 信息,例如:

  4. 通过执行下列操作之一生成证书:
    • 将 CSR 发送到证书颁发机构以请求 X.509 证书,并提供配置文件以包含任何其他扩展名。

    • 使用证书颁发机构签署 CSR 以生成证书,如果需要引用配置文件和扩展名,请包含该 -extfile 选项。

    • 使用服务器密钥对 CSR 进行签名以生成自签名证书,如果需要引用配置文件和扩展名,请包含该 -extfile 选项。

  5. 验证证书的公用名 (CN) 字段和扩展名(如果提供)是否正确。

对于相互身份验证,请使用 gRPC 客户端的信息重复前面的步骤,以生成客户端的密钥和证书。客户端证书不需要 SAN IP 扩展字段。

在 Junos PKI 中加载 gRPC 服务器的本地证书

运行 gRPC 服务器的网络设备必须具有 X.509 证书,用于向 gRPC 客户端标识设备。要在 Junos 设备上执行基于 gRPC 的服务,必须在 Junos PKI 中加载本地网络设备的公钥证书和密钥。加载证书并执行初始配置后,gRPC 客户端可以使用任何微服务来更新证书。例如,gRPC 客户端可以使用 gNOI CertificateManagement 服务安装新证书或替换现有证书。

要在 PKI 中加载本地设备的证书和密钥:

  1. 下载充当该设备的 gRPC 服务器的设备的证书和密钥。
  2. 在操作模式下,定义标识符并将本地设备的证书和密钥加载到 PKI 中。

    例如:

  3. (可选)验证证书是否存在于 PKI 数据库中。

启用 gRPC 服务

基于 gRPC 的服务使用基于安全套接字层 (SSL) 或传输层安全性 (TLS) 技术的 API 连接设置。对于这些连接,您必须指定标识 gRPC 服务器的本地证书。

启用 gRPC 服务并指定本地证书后,网络设备将使用仅限服务器的身份验证。然后,您可以按照 配置 gRPC 服务的相互(双向)身份验证中所述的步骤,选择性地配置相互身份验证。

您可以为 gRPC 服务配置网络设备,并在以下层级之一指定用于服务器身份验证的本地证书:

  • [edit system services http servers]— 使用此语句层次结构可配置一个或多个 gRPC 服务器,这些服务器在唯一端口上托管不同的服务集。此外,每个服务器可以支持不同的侦听地址、证书和路由实例。

  • [edit system services extension-service request-response grpc ssl]— 如果您只需要一台支持同一侦听地址和端口上所有 gRPC 服务的 gRPC 服务器,请使用此语句层次结构。

若要为 gRPC 服务配置设备,请按照满足环境要求的层次结构级别的说明进行操作。

[edit system services http servers]

要在层次结构级别配置 [edit system services http servers] 一个或多个 gRPC 服务器:

  1. 导航到 gRPC 服务器层次结构级别,并为服务器指定标识符。

    例如:

  2. 配置要用于 gRPC 服务的端口。对于每个 gRPC 服务器,端口必须是唯一的。

    例如:

  3. 配置此服务器托管的 gRPC 服务。

    在此示例中,服务器托管 gNMI 服务和 gNOI 服务。

  4. 指定用于向客户端标识服务器的本地证书。

    输入之前使用操作模式命令加载 request security pki local-certificate load 到 Junos PKI 中的本地证书的标识符。

    以下示例配置本地证书 gnoi-server

  5. (选答)指定服务器侦听传入连接的 IPv4 或 IPv6 地址。

    例如:

    注意:

    如果未指定 IP 地址,则默认地址 :: 用于侦听传入连接。

  6. (选答)如果与默认路由实例不同,则配置要用于此 gRPC 服务器的路由实例。

    以下示例使用 mgmt-junos 路由实例。

  7. (选答)配置此 gRPC 服务器支持的最大连接数。

    以下示例最多配置 10 个连接。默认值为 5。

  8. 提交配置。

要配置相互身份验证而不是仅服务器身份验证,还必须完成 为 gRPC 服务配置相互(双向)身份验证中的步骤。

[edit system services extension-service request-response grpc ssl]

要在层次结构级别配置 [edit system services extension-service request-response grpc ssl] 单个 gRPC 服务器,请执行以下操作:

  1. 导航到 gRPC 服务的基于 SSL 的 API 连接设置。

  2. 配置要用于 gRPC 服务的端口。

    例如:

  3. 指定用于向客户端标识服务器的本地证书。

    输入之前使用操作模式命令加载 request security pki local-certificate load 到 Junos PKI 中的本地证书的标识符。

    以下示例配置本地证书 gnoi-server

  4. 将设备配置为使用 PKI 数据库获取证书。

  5. 使设备能够在不终止 gRPC 会话的情况下重新加载证书。

  6. (选答)指定要侦听传入连接的 IP 地址。

    例如:

    注意:

    如果未指定 IP 地址,则默认地址 :: 用于侦听传入连接。

  7. (选答)配置扩展服务的跟踪以调试可能出现的任何问题。

    注意:

    要查看扩展服务的 Junos OS Evolved 跟踪文件,请使用 和 show trace application jsd show trace application jsd live 操作模式命令。

  8. 提交配置。

要配置相互身份验证而不是仅服务器身份验证,还必须完成 为 gRPC 服务配置相互(双向)身份验证中的步骤。

为 gRPC 服务配置相互(双向)身份验证

您可以为 gRPC 会话配置双向(双向)身份验证,使用证书将网络设备验证为 gRPC 服务器,将 NMS 验证为 gRPC 客户端。Junos 设备使用外部客户端提供的凭据对客户端进行身份验证并授权连接。

您可以使用以下选项之一在 Junos 设备上配置相互身份验证:

  • 直接在配置中配置相互身份验证设置。

  • 首先设置仅限服务器的身份验证,然后使用 gNOI CertificateManagement 服务在设备上加载必要的证书颁发机构证书。

如果直接在设备配置中配置相互身份验证,则设备配置优先于使用 gNOI 服务完成的任何设置。

开始之前:

以下部分讨论配置相互身份验证的不同方法。您可以使用最适合您的环境的任何方法。

在设备配置中配置相互身份验证

要直接在网络设备配置中为 gRPC 客户端配置身份验证:

  1. 将用于验证客户端证书的根证书颁发机构证书下载到充当 gRPC 服务器的本地设备。

  2. 在层次结构中 [edit security pki] 为客户端证书的根 证书颁发机构配置 CA 证书颁发机构配置文件。

    例如:

  3. 提交配置。

  4. 在操作模式下,将用于验证客户端证书的根 证书颁发机构证书加载到 Junos PKI 中。指定 ca-profile 您在前面步骤中配置的标识符。

    例如:

    提示:

    要加载 证书颁发机构证书束,请发出命令 request security pki ca-certificate ca-profile-group load ca-group-name ca-group-name filename bundle-path

    加载证书后,进入配置模式并继续配置相互身份验证。您必须在配置服务器的同一层级下配置相互身份验证。针对您的层次结构级别执行部分中概述的步骤。

[编辑系统服务 http 服务器]

要为在层次结构级别配置 [edit system services http servers] 的服务器配置相互身份验证:

  1. 导航至 tls 服务器配置下的语句。

    例如:

  2. 启用相互身份验证并指定客户端证书的要求。

    例如,要指定需要证书及其验证的最强身份验证,请使用 request-and-require-cert-and-verify,这也是默认值。

  3. 指定将用于验证客户端证书的证书颁发机构配置文件。

    CA 证书颁发机构配置文件是在 CA 配置文件配置的步骤 2 中配置的证书颁发机构。

    例如,要指定名为 gnoi-client的证书颁发机构配置文件:

  4. 提交配置。

[编辑系统服务扩展-服务请求-响应 gRPC SSL]

要为在层次结构级别配置 [edit system services extension-service request-response grpc ssl] 的服务器配置相互身份验证:

  1. 启用相互身份验证并指定客户端证书的要求。

    例如,要指定需要证书及其验证的最强身份验证,请使用 require-certificate-and-verify

    注意:

    默认值为 no-certificate。其他选项是: request-certificaterequest-certificate-and-verifyrequire-certificate, . require-certificate-and-verify

    建议仅在测试环境中使用该 no-certificate 选项。

  2. 指定将用于验证客户端证书的证书颁发机构配置文件。

    CA 证书颁发机构配置文件是在 CA 配置文件配置的步骤 2 中配置的证书颁发机构。

    例如,要指定名为 gnoi-client的证书颁发机构配置文件:

  3. 提交配置。

使用 gNOI CertificateManagement 服务配置相互认证

您可以使用 gNOI CertificateManagement 服务在 gRPC 客户端和 gRPC 服务器之间设置相互身份验证,而不是直接在设备配置中配置设置。您首先设置仅限服务器的身份验证,然后使用 gNOI CertificateManagement 服务 RPC 加载客户端证书颁发机构证书。有关使用 gNOI 服务加载证书的信息,请参阅 gNOI CertificateManagement 证书管理服务。

gRPC 服务器仅支持一个用于 gNOI 服务的全局证书颁发机构证书包。使用 gNOI CertificateManagement 服务加载 证书颁发机构证书包时,设备会隐式使用相互身份验证。但是,您应该注意以下几点:

  • 服务 CertificateManagement 始终使用 ca-profile-group 保留标识符 gnoi-ca-bundle加载证书颁发机构证书捆绑包。

  • 如果使用该 CertificateManagement 服务加载证书颁发机构证书包,则设备将隐式使用相互身份验证。

  • 如果服务发送加载新 证书颁发机构证书捆绑包的请求,则 CertificateManagement 服务器将从设备中清除先前 CA 证书颁发机构捆绑包的证书并加载新证书。

  • 如果使用该 CertificateManagement 服务加载 证书颁发机构证书包,并且还在设备配置中显式配置了相互身份验证,则配置的语句优先。

为 gRPC 服务配置用户帐户

通道凭据附加到 gRPC 通道,并使客户端应用程序能够访问该服务。调用凭据附加到特定的 RPC 请求,并提供有关正在使用客户端应用程序的用户的信息。必须在每个 RPC 请求中提供呼叫凭据,这需要网络设备的用户帐户。用户必须具有在网络设备上本地定义的用户帐户,或者用户必须由 TACACS+ 服务器进行身份验证,然后该服务器将用户映射到设备上本地定义的用户模板帐户。

要创建用户帐户,请执行以下操作:

  1. 使用唯一用户名配置该user语句,并包含该class语句以指定登录类,该登录类具有用户执行所有操作所需的权限。例如:
  2. 对于本地用户帐户,请配置用户的密码。

    您可以省略本地用户模板帐户的密码,因为用户是通过远程身份验证服务器进行身份验证的。

  3. (可选)配置语full-name句以指定用户名。
  4. 提交配置以激活设备上的用户帐户。
  5. 在 gRPC 客户端将在 gRPC 会话中执行 RPC 的每个网络设备上重复上述步骤。

配置 gRPC RPC 授权

默认情况下,Junos 设备授权经过身份验证的 gRPC 客户端执行所有 gRPC RPC。您可以配置 Junos 登录类以显式允许或拒绝 gRPC RPC。要指定 RPC,请配置 allow-grpc-rpc-regexps and deny-grpc-rpc-regexps 语句并定义与 RPC 匹配的正则表达式。如果允许列表和拒绝列表中存在冲突的表达式,则拒绝列表优先。如果 RPC 与任一列表不匹配,则默认情况下允许该 RPC。

Junos 设备使用以下语法指定 gRPC RPC:

其中 package、 和 是servicerpc该服务的 proto 定义文件中相应语句中定义的名称。例如:

您可以使用一个或多个表达式配置多个 allow-grpc-rpc-regexps and deny-grpc-rpc-regexps 语句。用引号 (“ ”) 将每个表达式括起来。将多个表达式括在方括号 [ ] 中,并用空格分隔表达式。

要创建定义 gRPC RPC 授权的登录类,请执行以下操作:

  1. 配置登录类名称和权限。

    例如:

  2. 在类中,为类允许的 RPC 配置正则表达式。

    例如,以下语句允许 gNMI Get() RPC 和所有 gNOI System 服务 RPC。

  3. 为类拒绝的 RPC 配置正则表达式。

    例如,以下语句拒绝 gNMI Set() RPC,还会拒绝服务 gRIBI 以及 gNOI CertificateManagement 服务的所有 RPC。

  4. 登录类分配给相应的 gRPC 用户。

    例如,以下语句将类grpc-user分配给grpc-operator用户。

在网络设备上启用 gRPC 服务后,将远程 NMS 设置为 gRPC 客户端。要使客户端能够执行 gNOI 操作,请按照 配置 gNOI 服务中所述配置客户端。

变更历史表

是否支持某项功能取决于您使用的平台和版本。使用 功能资源管理器 确定您的平台是否支持某个功能。

发布
描述
25.2R1 和 25.2R1-EVO
从 Junos OS 25.2R1 版和 Junos OS 演化版 25.2R1 版开始,您可以配置多个 gRPC 服务器,这些服务器在唯一的端口上托管不同的服务集。