Configure os serviços gRPC
Configure o servidor gRPC para permitir que um cliente use serviços gRPC no dispositivo de rede, incluindo: serviços gRPC Network Operations Interface (gNOI), serviços gRPC Network Management Interface (gNMI) e serviços gRPC Routing Information Base Interface (gRIBI).
Este tópico discute como configurar serviços gRPC em dispositivos Junos, incluindo as opções de autenticação e como configurar cada opção. Antes que o servidor e o cliente possam estabelecer uma sessão de gRPC, você deve satisfazer os requisitos discutidos nas seguintes seções:
- Entendendo a autenticação e a autorização para serviços baseados em gRPC
- Obtenha certificados X.509
- Carregue o certificado local do servidor gRPC no Junos PKI
- Habilite serviços gRPC
- Configuração da autenticação mútua (bidirecional) para serviços gRPC (opcional)
- Configure a conta do usuário para serviços gRPC
- Configure a autorização de RPC gRPC (opcional)
Entendendo a autenticação e a autorização para serviços baseados em gRPC
As interfaces gNOI, gNMI e gRIBI usam a estrutura de chamada de procedimento remoto gRPC para transporte. O servidor gRPC é executado no dispositivo de rede e ouve solicitações de conexão em uma porta específica. O aplicativo cliente gRPC é executado em um sistema de gerenciamento de rede remoto (NMS) e estabelece um canal gRPC com o servidor no host e porta especificados. O cliente executa RPCs por meio da sessão de gRPC criptografada por SSL para realizar operações de serviço de rede. A Figura 1 ilustra uma conexão simples entre um cliente gRPC e um servidor.

Os canais gRPC usam credenciais de canal para lidar com a autenticação entre o servidor e o cliente. As credenciais de canal padrão usam certificados digitais X.509 para autenticar o servidor e o cliente. Um certificado digital fornece uma maneira de autenticar usuários por meio de um terceiro confiável chamado autoridade de certificado ou autoridade de certificação (CA). A CA verifica a identidade de um titular de certificado e "assina" o certificado para atestar que ele não foi forjado ou alterado. O padrão X.509 define o formato do certificado. Os certificados digitais podem ser usados para estabelecer uma conexão segura entre dois endpoints por meio da validação do certificado. Para estabelecer um canal gRPC, cada endpoint (dispositivo ou aplicativo) que requer autenticação deve fornecer um certificado X.509 na troca.
Os dispositivos Junos oferecem suporte tanto à autenticação somente ao servidor quanto à autenticação mútua para sessões de gRPC baseadas em SSL. Quando a autenticação somente para servidor é configurada, o servidor fornece seu certificado de chave pública quando o canal é estabelecido. O cliente usa o certificado Root CA do servidor para autenticar o servidor. Quando a autenticação mútua é configurada, o cliente também fornece seu certificado quando se conecta ao servidor, e o servidor valida o certificado. Se a validação do certificado for bem sucedida, o cliente pode fazer ligações. Recomendamos que você configure a autenticação mútua e use certificados assinados por CA para obter a mais forte segurança, embora os certificados auto-assinados sejam aceitos.
Uma infraestrutura de chave pública (PKI) oferece suporte à distribuição e identificação de chaves de criptografia pública, permitindo que os usuários troquem dados com segurança por redes como a Internet e verifiquem a identidade da outra parte. Para serviços baseados em gRPC, o Junos PKI deve conter o certificado para o dispositivo local que atua como servidor gRPC. Se você usa autenticação mútua, o Junos PKI também deve conter os certificados De CA Raiz necessários para validar os certificados de quaisquer clientes gRPC que se conectem ao dispositivo.
A Tabela 1 descreve os requisitos gerais para autenticação somente de servidor e autenticação mútua quando um cliente gRPC se conecta ao dispositivo para executar serviços baseados em gRPC. O certificado do servidor gRPC deve definir o nome de host do servidor no campo nome comum (CN), ou deve definir o endereço IP do servidor no campo de Endereço IP de nome alternativo sujeito (nome sujeitoAlt ou SAN). O aplicativo cliente deve usar o mesmo valor para estabelecer a conexão com o servidor. Se o certificado definir o campo endereço IP SubjectAltName, o campo Nome Comum será ignorado durante a autenticação.
Requisitos | Autenticação mútua somente para servidor | |
---|---|---|
Certificados | O servidor deve ter um certificado de chave pública X.509. Se o cliente se conectar ao endereço IP do servidor em vez do nome de host, o certificado do servidor deve incluir o campo de extensão de endereço IP de Nomealt (SAN) sujeito com o endereço IP do servidor. |
O servidor e o cliente devem cada um ter um certificado de chave pública X.509. Se o cliente se conectar ao endereço IP do servidor em vez do nome de host, o certificado do servidor deve incluir o campo de extensão de endereço IP de Nomealt (SAN) sujeito com o endereço IP do servidor. |
Junos PKI | O certificado local do servidor deve ser carregado no Junos PKI. |
O certificado local do servidor e o certificado Root CA de cada cliente devem ser carregados no Junos PKI. |
Credenciais de canal | O cliente deve passar o certificado Root CA do servidor quando o canal gRPC for estabelecido. |
O cliente deve passar em seu certificado e chave e o certificado de CA Raiz do servidor quando o canal gRPC for estabelecido. |
As credenciais de canal são anexadas ao canal gRPC e permitem que o aplicativo do cliente acesse o serviço. As credenciais de chamada, por outro lado, são anexadas a uma operação de serviço específica (solicitação de RPC) e fornecem informações sobre a pessoa que está usando o aplicativo do cliente. As credenciais de chamada são enviadas por solicitação, ou seja, para cada chamada de RPC. Para executar operações baseadas em gRPC em dispositivos Junos, você deve fornecer credenciais de chamada na solicitação. O usuário deve ter uma conta de usuário definida localmente no dispositivo, ou o usuário deve ser autenticado por um servidor TACACS+, que então mapeia o usuário para uma conta modelo de usuário que é definida localmente no dispositivo. Você pode fornecer as credenciais de chamada (nome de usuário e senha) no argumento do metadata
RPC. Se a autenticação for bem sucedida, o dispositivo Junos executa a solicitação de RPC usando os privilégios de conta do usuário especificado.
Como alternativa à aprovação de credenciais de chamada para cada RPC executado em um dispositivo Junos, você pode usar a API Extension Toolkit jnx_authentication_service
da Juniper para fazer login no dispositivo uma vez no início da sessão de gRPC, e todos os RPCs subsequentes executados no canal são autenticados. Você pode baixar a biblioteca JET Client IDL no site de download da Juniper Networks.
Por padrão, os dispositivos Junos autorizam um cliente gRPC autenticado a executar todos os RPCs gRPC. Você pode configurar opcionalmente a classe de login de um usuário gRPC para permitir ou negar explicitamente RPCs gRPC específicos. Para especificar os RPCs, você configura as declarações e deny-grpc-rpc-regexps
as allow-grpc-rpc-regexps
declarações e define expressões regulares compatíveis com os RPCs. Consulte Configure a autorização de RPC do gRPC para obter mais informações.
Obtenha certificados X.509
A sessão de gRPC criptografada por SSL usa certificados de chave pública X.509 para autenticar o servidor e o cliente gRPC. Para autenticação somente de servidor, o servidor gRPC deve ter um certificado. Para autenticação mútua, tanto o servidor gRPC quanto o cliente devem ter certificados. Os requisitos para os certificados são:
-
O certificado pode ser assinado por uma autoridade de certificado (CA) ou autografado.
-
O certificado deve ser codificado por PEM.
-
O certificado do servidor gRPC deve definir o nome de host do servidor gRPC no campo nome comum (CN), ou deve definir o endereço IP do servidor gRPC no campo endereço IP SubjectAltName (SAN). O cliente gRPC deve usar o mesmo valor para estabelecer a conexão com o servidor. Se o certificado definir o endereço IP subjectAltName, o campo Nome Comum será ignorado durante a autenticação.
Usar o OpenSSL para obter o certificado do servidor gRPC:
Para autenticação mútua, repita as etapas anteriores com as informações para que o cliente gRPC gere a chave e o certificado do cliente. O certificado do cliente não requer o campo de extensão DE IP DE SAN.
Carregue o certificado local do servidor gRPC no Junos PKI
O dispositivo de rede que executa o servidor gRPC deve ter um certificado X.509 que identifica o dispositivo aos clientes gRPC. Para executar serviços baseados em gRPC no dispositivo Junos, você deve carregar o certificado de chave pública e a chave para o dispositivo de rede local no Junos PKI. Depois de carregar o certificado e realizar a configuração inicial, os clientes gRPC podem então usar qualquer microsserviamento para atualizar o certificado. Por exemplo, um cliente gRPC pode usar o serviço gNOI CertificateManagement
para instalar um novo certificado ou substituir um certificado existente.
Para carregar o certificado e a chave do dispositivo local no PKI:
Habilite serviços gRPC
Os serviços baseados em gRPC usam uma configuração de conexão de API baseada na tecnologia Secure Socket Layer (SSL). Para uma conexão baseada em SSL, você deve especificar um certificado local que identifica o servidor gRPC.
Depois de habilitar serviços gRPC e especificar um certificado local, o dispositivo de rede usa autenticação somente para servidores. Em seguida, você pode configurar opcionalmente a autenticação mútua completando as etapas descritas na Autenticação Mútua configurada (bidirecional) para serviços gRPC.
Para configurar seu dispositivo de rede para serviços gRPC e especificar o certificado local usado para autenticação de servidor:
Para configurar a autenticação mútua em vez de autenticação somente para servidores, você também deve concluir as etapas na Configuração de autenticação mútua (bidirecional) para serviços gRPC.
Configuração da autenticação mútua (bidirecional) para serviços gRPC
Você pode configurar a autenticação mútua (bidirecional) para sessões de gRPC, que autentica tanto o dispositivo de rede como o servidor gRPC e o sistema de gerenciamento de rede como o cliente gRPC usando certificados SSL. O dispositivo Junos usa as credenciais fornecidas pelo cliente externo para autenticar o cliente e autorizar uma conexão.
Você pode configurar a autenticação mútua em dispositivos Junos usando uma das seguintes opções:
-
Configure as configurações de autenticação mútua diretamente sob o nível de
[edit system services extension-service request-response grpc ssl mutual-authentication]
hierarquia. -
Configure inicialmente a autenticação somente do servidor e use o serviço gNOI
CertificateManagement
para carregar os certificados de CA necessários no dispositivo.
Se você configurar a autenticação mútua diretamente na configuração do dispositivo, a configuração do dispositivo tem precedência sobre qualquer configuração feita usando os serviços gNOI.
Antes de começar:
-
Carregue o certificado e a chave para o dispositivo de rede que atua como servidor gRPC no PKI do dispositivo, conforme descrito no Certificado local do servidor gRPC no Junos PKI.
-
Habilite serviços gRPC e configure a autenticação do servidor local conforme descrito em Habilite serviços gRPC.
As seções a seguir discutem os diferentes métodos para configurar a autenticação mútua. Você pode usar qualquer método que funcione melhor para o seu ambiente.
- Configure a autenticação mútua na configuração do dispositivo
- Configure a autenticação mútua usando o serviço de gerenciamento de certificados gNOI
Configure a autenticação mútua na configuração do dispositivo
Para configurar a autenticação para o cliente gRPC diretamente na configuração do dispositivo de rede:
Baixe o certificado de CA raiz que será usado para validar o certificado do cliente para o dispositivo local que atua como servidor gRPC.
Configure o perfil da autoridade de certificados para o CA raiz do certificado cliente na
[edit security pki]
hierarquia.[edit security pki] user@host# set ca-profile ca-profile-name ca-identity ca-identifier
Por exemplo:
[edit security pki] user@host# set ca-profile gnoi-client ca-identity clientRootCA
Confirmar a configuração.
[edit] user@host# commit and-quit
No modo operacional, carregue o certificado de CA raiz que será usado para verificar o certificado do cliente no Junos PKI. Especifique o
ca-profile
identificador que você configurou nas etapas anteriores.user@host> request security pki ca-certificate load ca-profile ca-profile filename cert-path
Por exemplo:
user@host> request security pki ca-certificate load ca-profile gnoi-client filename /var/tmp/clientRootCA.crt Fingerprint: 00:2a:30:e9:59:94:db:f1:a1:5c:d1:c9:d4:5f:db:8f:f1:f0:8d:c4 (sha1) 02:3b:a0:b8:95:0c:a2:fa:15:18:57:3d:a3:10:e9:ac (md5) 69:97:90:39:de:75:a0:1d:94:1e:06:a8:be:8c:66:e5:41:95:fd:dc:14:8a:e7:3a:e0:42:9e:f9:f7:dd:c8:c2 (sha256) Do you want to load this CA certificate ? [yes,no] (no) yes CA certificate for profile gnoi-client loaded successfully
Ponta:Para carregar um pacote de certificados ca, emita o
request security pki ca-certificate ca-profile-group load ca-group-name ca-group-name filename bundle-path
comando.Após o carregamento do certificado, insira o modo de configuração e continue configurando a autenticação mútua.
Habilite a autenticação mútua e especifique os requisitos para os certificados de cliente.
[edit system services extension-service request-response grpc ssl] user@host# set mutual-authentication client-certificate-request requirement
Por exemplo, para especificar a autenticação mais forte, que requer um certificado e sua validação, uso
require-certificate-and-verify
.[edit system services extension-service request-response grpc ssl] user@host# set mutual-authentication client-certificate-request require-certificate-and-verify
Nota:O padrão é
no-certificate
. As outras opções são:request-certificate
, ,request-certificate-and-verify
,require-certificate
.require-certificate-and-verify
Recomendamos que você use a opção
no-certificate
apenas em um ambiente de teste.Especifique o perfil da autoridade do certificado que será usado para verificar o certificado do cliente.
O perfil de autoridade do certificado foi configurado na etapa 2.
[edit system services extension-service request-response grpc ssl] user@host# set mutual-authentication certificate-authority certificate-authority
Por exemplo, especificar o perfil da autoridade do certificado denominado
gnoi-client
:[edit system services extension-service request-response grpc ssl] user@host# set mutual-authentication certificate-authority gnoi-client
Confirmar a configuração.
[edit] user@host# commit and-quit
Configure a autenticação mútua usando o serviço de gerenciamento de certificados gNOI
Você pode usar o serviço gNOI CertificateManagement
para configurar a autenticação mútua entre o cliente gRPC e o servidor gRPC em vez de configurar as configurações diretamente na configuração do dispositivo. Inicialmente, você configura a autenticação somente para servidor e depois usa os RPCs de serviço gNOI CertificateManagement
para carregar os certificados ca do cliente. Consulte o Serviço de gerenciamento de certificados gNOI para obter informações sobre o carregamento dos certificados usando o serviço gNOI CertificateManagement
.
O servidor gRPC oferece suporte a apenas um pacote global de certificados CA para serviços gNOI. Quando você usa o serviço gNOI CertificateManagement
para carregar o pacote de certificados ca, o dispositivo usa implicitamente a autenticação mútua. No entanto, você deve tomar nota do seguinte:
-
O
CertificateManagement
serviço sempre carrega o pacote de certificados ca usando oca-profile-group
identificadorgnoi-ca-bundle
reservado. -
Se você usar o
CertificateManagement
serviço para carregar o pacote de certificados ca, o dispositivo usa implicitamente a autenticação mútua e assume a configuração a seguir, embora não esteja explicitamente configurado no dispositivo.[edit system services extension-service request-response grpc ssl] mutual-authentication { certificate-authority gnoi-ca-bundle; client-certificate-request require-certificate-and-verify; }
-
Se o
CertificateManagement
serviço enviar uma solicitação para carregar um novo pacote de certificados CA, o servidor libera os certificados para o pacote ca anterior do dispositivo e carrega os novos. -
Se você usar o
CertificateManagement
serviço para carregar um pacote de certificados CA e também configurar a hierarquia de[edit system services extension-service request-response grpc ssl mutual-authentication]
declaração, as declarações configuradas prevalecerão.
Configure a conta do usuário para serviços gRPC
As credenciais de canal são anexadas ao canal gRPC e permitem que o aplicativo do cliente acesse o serviço. As credenciais de chamada são anexadas a uma solicitação de RPC específica e fornecem informações sobre o usuário que está usando o aplicativo do cliente. Você deve fornecer credenciais de chamada em cada solicitação de RPC, o que requer uma conta de usuário para o dispositivo de rede. O usuário deve ter uma conta de usuário definida localmente no dispositivo de rede, ou o usuário deve ser autenticado por um servidor TACACS+, que então mapeia o usuário para uma conta modelo de usuário que é definida localmente no dispositivo.
Para criar uma conta de usuário:
Configure a autorização de RPC do gRPC
Por padrão, os dispositivos Junos autorizam um cliente gRPC autenticado a executar todos os RPCs gRPC. Você pode configurar uma aula de login do Junos para permitir ou negar explicitamente RPCs gRPC. Para especificar os RPCs, você configura as declarações e deny-grpc-rpc-regexps
as allow-grpc-rpc-regexps
declarações e define expressões regulares compatíveis com os RPCs. Se houver expressões conflituosas nas listas de permissão e negação, a lista de negação prevalece. Se um RPC não corresponder a nenhuma das listas, o RPC será permitido por padrão.
Os dispositivos Junos usam a seguinte sintaxe para especificar RPCs gRPC:
/package.service/rpc
onde package
, service
e rpc
são os nomes definidos na respectiva declaração no arquivo proto-definição desse serviço. Por exemplo:
/gnmi.gNMI/Get /gnoi.certificate.CertificateManagement/Rotate /gnoi.system.System/Reboot /gnoi.system.System/RebootStatus /gribi.gRIBI/.*
Você pode configurar várias allow-grpc-rpc-regexps
e deny-grpc-rpc-regexps
declarações com uma ou mais expressões. Inclua cada expressão dentro das cotações (" "). Coloque várias expressões em parênteses quadrados e separe as expressões com um espaço.
allow-grpc-rpc-regexps ["regex1" "regex2" ... ] allow-grpc-rpc-regexps "regex3"
Para criar uma aula de login que define a autorização para RPCs gRPC: