Configurar 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 gRPC, você deve atender aos requisitos discutidos nas seções a seguir:
- Entender a autenticação e a autorização para serviços baseados em gRPC
- Obter certificados X.509
- Carregar o certificado local do servidor gRPC no Junos PKI
- Habilitar serviços gRPC
- Configurar autenticação mútua (bidirecional) para serviços gRPC (opcional)
- Configurar a conta de usuário para serviços gRPC
- Configurar autorização RPC gRPC (opcional)
Entender a autenticação e a autorização para serviços baseados em gRPC
As interfaces gNMI, gNOI e gRIBI usam a estrutura de chamada de procedimento remoto gRPC para transporte. O servidor gRPC é executado no dispositivo de rede e escuta solicitações de conexão em uma porta especificada. 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 na porta especificados. O cliente executa RPCs por meio da sessão gRPC criptografada por SSL para realizar operações de serviço de rede. A Figura 1 ilustra uma conexão simples entre um cliente e um servidor gRPC.
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 certificação 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 falsificado 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 de certificados. 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 à autenticação somente do servidor, bem como à autenticação mútua para sessões gRPC baseadas em SSL e TLS. Quando a autenticação somente do servidor é configurada, o servidor fornece seu certificado de chave pública quando o canal é estabelecido. O cliente usa o certificado de CA raiz 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 poderá fazer chamadas. Recomendamos que você configure a autenticação mútua e use certificados assinados pela CA para obter a segurança mais forte, embora certificados autoassinados sejam aceitos.
Uma infraestrutura de chave pública (PKI) oferece suporte à distribuição e identificação de chaves de criptografia públicas, permitindo que os usuários troquem dados com segurança em redes como a Internet e verifiquem a identidade da outra parte. Para serviços baseados em gRPC, a PKI do Junos deve conter o certificado para o dispositivo local que atua como o servidor gRPC. Se você usar a autenticação mútua, a PKI do Junos também deverá conter os certificados de CA raiz necessários para validar os certificados de qualquer cliente gRPC que se conecte 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 do host do servidor no campo Nome Comum (CN) ou deve definir o endereço IP do servidor no campo Endereço IP Nome Alternativo da Entidade (subjectAltName 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.
| Requerimentos | Autenticação somente de servidor | Autenticação mútua |
|---|---|---|
| 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 do host, o certificado do servidor deverá incluir o campo de extensão de endereço IP subjectAltName (SAN) com o endereço IP do servidor. |
O servidor e o cliente devem ter um certificado de chave pública X.509. Se o cliente se conectar ao endereço IP do servidor em vez do nome do host, o certificado do servidor deverá incluir o campo de extensão de endereço IP subjectAltName (SAN) com o endereço IP do servidor. |
| Junos PKI | O certificado local do servidor deve ser carregado na PKI do Junos. |
O certificado local do servidor e o certificado de CA raiz de cada cliente devem ser carregados no Junos PKI. |
| Credenciais de canal | O cliente deve passar o certificado de CA raiz do servidor quando o canal gRPC for estabelecido. |
O cliente deve passar seu certificado e chave e o certificado de CA raiz do servidor quando o canal gRPC for estabelecido. |
As credenciais do canal são anexadas ao canal gRPC e permitem que o aplicativo 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 RPC) e fornecem informações sobre a pessoa que está usando o aplicativo cliente. As credenciais de chamada são enviadas por solicitação, ou seja, para cada chamada 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 mapeia o usuário para uma conta de modelo de usuário 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 RPC usando os privilégios de conta do usuário especificado.
Como alternativa à passagem de credenciais de chamada para cada RPC executado em um dispositivo Junos, você pode usar a API Juniper Extension Toolkit jnx_authentication_service para fazer login no dispositivo uma vez no início da sessão gRPC, e todos os RPCs subsequentes executados no canal serão autenticados. Você pode baixar a biblioteca IDL do cliente JET no site de download da Juniper Networks.
Por padrão, os dispositivos Junos autorizam um cliente gRPC autenticado a executar todos os RPCs gRPC. Opcionalmente, você pode configurar a classe de login de um usuário gRPC para permitir ou negar explicitamente RPCs gRPC específicos. Para especificar os RPCs, configure as allow-grpc-rpc-regexps instruções and deny-grpc-rpc-regexps e defina expressões regulares que correspondam aos RPCs. Consulte Configurar a autorização RPC do gRPC para obter mais informações.
Obter certificados X.509
Uma sessão gRPC 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, o servidor e o cliente gRPC devem ter certificados. Os requisitos para os certificados são:
-
O certificado pode ser assinado por uma CA ou autoassinado.
-
O certificado deve ser codificado por PEM.
-
O certificado do servidor gRPC deve definir o nome do 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.
Para usar o OpenSSL para obter o certificado do servidor gRPC:
Para autenticação mútua, repita as etapas anteriores com as informações do cliente gRPC para gerar a chave e o certificado do cliente. O certificado do cliente não requer o campo de extensão SAN IP.
Carregar 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 identifique o dispositivo para clientes gRPC. Para realizar 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 executar a configuração inicial, os clientes gRPC podem usar qualquer microsserviço 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 na PKI:
Habilitar 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) ou Camada de Transporte de Segurança (TLS). Para essas conexões, você deve especificar um certificado local que identifique o servidor gRPC.
Depois de habilitar os serviços gRPC e especificar um certificado local, o dispositivo de rede usará a autenticação somente do servidor. Opcionalmente, você pode configurar a autenticação mútua concluindo as etapas descritas em Configurar autenticação mútua (bidirecional) para serviços gRPC.
Você pode configurar seu dispositivo de rede para serviços gRPC e especificar o certificado local usado para autenticação de servidor em um dos seguintes níveis de hierarquia:
-
[edit system services http servers]— Use esta hierarquia de declaração para configurar um ou mais servidores gRPC que hospedam diferentes conjuntos de serviços em portas exclusivas. Além disso, cada servidor pode oferecer suporte a diferentes endereços de escuta, certificados e instâncias de roteamento. -
[edit system services extension-service request-response grpc ssl]— Use essa hierarquia de declaração quando precisar apenas de um único servidor gRPC que ofereça suporte a todos os serviços gRPC no mesmo endereço e porta de escuta.
Para configurar o dispositivo para serviços gRPC, siga as instruções para o nível de hierarquia que atende aos requisitos do seu ambiente.
[edit system services http servers][edit system services extension-service request-response grpc ssl]
[edit system services http servers]
Para configurar um ou mais servidores gRPC no nível da [edit system services http servers] hierarquia:
Navegue até o nível de hierarquia dos servidores gRPC e especifique um identificador para o servidor.
[edit] user@host# edit system services http servers server name
Por exemplo:
[edit] user@host# edit system services http servers server grpc-server1
Configure a porta a ser usada para os serviços gRPC. A porta deve ser exclusiva para cada servidor gRPC.
[edit system services http servers server name] user@host# set port port-number
Por exemplo:
[edit system services http servers server grpc-server1] user@host# set port 32767
Configure os serviços gRPC hospedados por esse servidor.
[edit system services http servers server name] user@host# set grpc [service1 service2 ...]
Neste exemplo, o servidor hospeda serviços gNMI e serviços gNOI.
[edit system services http servers server grpc-server1] user@host# set grpc [gnmi gnoi]
Especifique o certificado local que identifica o servidor para um cliente.
Insira o identificador do certificado local que você carregou anteriormente no Junos PKI com o
request security pki local-certificate loadcomando operational mode.[edit system services http servers server name] user@host# set tls local-certificate certificate-id
O exemplo a seguir configura o certificado
gnoi-serverlocal:[edit system services http servers server grpc-server1] user@host# set tls local-certificate gnoi-server
(Opcional) Especifique o endereço IPv4 ou IPv6 no qual o servidor escuta as conexões de entrada.
[edit system services http servers server name] user@host# set listen-address address
Por exemplo:
[edit system services http servers server grpc-server1] user@host# set ip-address 192.168.2.1
Observação:Se você não especificar um endereço IP, o endereço padrão :: será usado para escutar conexões de entrada.
(Opcional) Configure a instância de roteamento a ser usada para esse servidor gRPC, se diferente da instância de roteamento padrão.
[edit system services http servers server name] user@host# set routing-instance routing-instance
O exemplo a seguir usa a instância de roteamento mgmt-junos.
[edit system services http servers server grpc-server1] user@host# set routing-instance mgmt-junos
(Opcional) Configure o número máximo de conexões compatíveis com esse servidor gRPC.
[edit system services http servers server name] user@host# set max-connections connections
O exemplo a seguir configura um máximo de 10 conexões. O padrão é 5.
[edit system services http servers server grpc-server1] user@host# set max-connections 10
Comprometa a configuração.
user@host# commit
Para configurar a autenticação mútua em vez da autenticação somente do servidor, você também deve concluir as etapas em Configurar autenticação mútua (bidirecional) para serviços gRPC.
[edit system services extension-service request-response grpc ssl]
Para configurar um único servidor gRPC no nível de [edit system services extension-service request-response grpc ssl] hierarquia:
Navegue até as configurações de conexão da API baseada em SSL para serviços gRPC.
[edit] user@host# edit system services extension-service request-response grpc ssl
Configure a porta a ser usada para serviços gRPC.
[edit system services extension-service request-response grpc ssl] user@host# set port port-number
Por exemplo:
[edit system services extension-service request-response grpc ssl] user@host# set port 32767
Especifique o certificado local que identifica o servidor para um cliente.
Insira o identificador do certificado local que você carregou anteriormente no Junos PKI com o
request security pki local-certificate loadcomando operational mode.[edit system services extension-service request-response grpc ssl] user@host# set local-certificate certificate-id
O exemplo a seguir configura o certificado
gnoi-serverlocal:[edit system services extension-service request-response grpc ssl] user@host# set local-certificate gnoi-server
Configure o dispositivo para usar o banco de dados PKI para certificados.
[edit system services extension-service request-response grpc ssl] user@host# set use-pki
Permita que o dispositivo recarregue certificados sem encerrar a sessão gRPC.
[edit system services extension-service request-response grpc ssl] user@host# set hot-reloading
(Opcional) Especifique um endereço IP para escutar as conexões de entrada.
[edit system services extension-service request-response grpc ssl] user@host# set ip-address address
Por exemplo:
[edit system services extension-service request-response grpc ssl] user@host# set ip-address 192.168.2.1
Observação:Se você não especificar um endereço IP, o endereço padrão :: será usado para escutar conexões de entrada.
(Opcional) Configure o rastreamento para serviços de extensão para depurar quaisquer problemas que possam surgir.
[edit] user@host# top user@host# set system services extension-service traceoptions file jsd user@host# set system services extension-service traceoptions flag all
Observação:Para visualizar os arquivos de rastreamento do Junos OS Evolved para serviços de extensões, use os comandos e
show trace application jsd livemodoshow trace application jsdoperacional.Comprometa a configuração.
user@host# commit
Para configurar a autenticação mútua em vez da autenticação somente do servidor, você também deve concluir as etapas em Configurar autenticação mútua (bidirecional) para serviços gRPC.
Configurar autenticação mútua (bidirecional) para serviços gRPC
Você pode configurar a autenticação mútua (bidirecional) para sessões gRPC, que autentica o dispositivo de rede como o servidor gRPC e o NMS como o cliente gRPC usando certificados. 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:
-
Defina as configurações de autenticação mútua diretamente na configuração.
-
Configure a autenticação somente do servidor inicialmente e, em seguida, use o serviço gNOI
CertificateManagementpara 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 terá 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 o servidor gRPC na PKI do dispositivo, conforme descrito em Carregar o certificado local do servidor gRPC na PKI do Junos.
-
Habilite os serviços gRPC e configure a autenticação do servidor local conforme descrito em Ativar serviços gRPC.
As seções a seguir discutem os diferentes métodos para configurar a autenticação mútua. Você pode usar o método que funcionar melhor para o seu ambiente.
- Configurar autenticação mútua na configuração do dispositivo
- Configurar a autenticação mútua usando o serviço gNOI CertificateManagement
Configurar 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 o servidor gRPC.
Configure um perfil de CA para a CA raiz do certificado do 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
Comprometa 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-profileidentificador 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
Dica:Para carregar um pacote de certificados de CA, emita o
request security pki ca-certificate ca-profile-group load ca-group-name ca-group-name filename bundle-pathcomando.Depois de carregar o certificado, entre no modo de configuração e continue configurando a autenticação mútua. Você deve configurar a autenticação mútua no mesmo nível de hierarquia em que configurou o servidor. Execute as etapas descritas na seção para seu nível de hierarquia.
- [editar servidores http de serviços do sistema]
- [editar extensão de serviços do sistema-serviço solicitação-resposta grpc ssl]
[editar servidores http de serviços do sistema]
Para configurar a autenticação mútua para um servidor configurado no nível da [edit system services http servers] hierarquia:
Navegue até a instrução na configuração do
tlsservidor.[edit] user@host# edit system services http servers server name tls
Por exemplo:
[edit] user@host# edit system services http servers server grpc-server1 tls
Habilite a autenticação mútua e especifique os requisitos para certificados de cliente.
[edit system services http servers server name tls] user@host# set mutual-authentication authentication-type requirement
Por exemplo, para especificar a autenticação mais forte, que requer um certificado e sua validação, use
request-and-require-cert-and-verify, que também é o padrão.[edit system services http servers server grpc-server1 tls] user@host# set mutual-authentication authentication-type request-and-require-cert-and-verify
Especifique o perfil de CA que será usado para verificar o certificado do cliente.
O perfil de CA foi configurado na etapa 2 da configuração do perfil de CA.
[edit system services http servers server name tls] user@host# set mutual-authentication certificate-authority certificate-authority
Por exemplo, para especificar o perfil de CA chamado
gnoi-client:[edit system services http servers server grpc-server1 tls] user@host# set mutual-authentication certificate-authority gnoi-client
Comprometa a configuração.
[edit system services http servers server name tls] user@host# commit and-quit
[editar extensão de serviços do sistema-serviço solicitação-resposta grpc ssl]
Para configurar a autenticação mútua para um servidor configurado no nível da [edit system services extension-service request-response grpc ssl] hierarquia:
Habilite a autenticação mútua e especifique os requisitos para 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, use
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
Observação: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
no-certificateopção somente em um ambiente de teste.Especifique o perfil de CA que será usado para verificar o certificado do cliente.
O perfil de CA foi configurado na etapa 2 da configuração do perfil de CA.
[edit system services extension-service request-response grpc ssl] user@host# set mutual-authentication certificate-authority certificate-authority
Por exemplo, para especificar o perfil de CA chamado
gnoi-client:[edit system services extension-service request-response grpc ssl] user@host# set mutual-authentication certificate-authority gnoi-client
Comprometa a configuração.
[edit system services extension-service request-response grpc ssl] user@host# commit and-quit
Configurar a autenticação mútua usando o serviço gNOI CertificateManagement
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 definir as configurações diretamente na configuração do dispositivo. Inicialmente, você configura a autenticação somente do servidor e, em seguida, usa os RPCs do serviço gNOI CertificateManagement para carregar os certificados de CA do cliente. Consulte Serviço de Gerenciamento de Certificados gNOI para obter informações sobre como carregar os certificados usando o serviço gNOI CertificateManagement .
O servidor gRPC oferece suporte a apenas um pacote de certificado de CA global para serviços gNOI. Quando você usa o serviço gNOI CertificateManagement para carregar o pacote de certificados de CA, o dispositivo usa implicitamente a autenticação mútua. No entanto, você deve observar o seguinte:
-
O
CertificateManagementserviço sempre carrega o pacote de certificados de CA usando o identificadorgnoi-ca-bundlereservadoca-profile-group. -
Se você usar o
CertificateManagementserviço para carregar o pacote de certificados de CA, o dispositivo usará implicitamente a autenticação mútua. -
Se o
CertificateManagementserviço enviar uma solicitação para carregar um novo pacote de certificados de CA, o servidor limpará os certificados do pacote de CA anterior do dispositivo e carregará os novos. -
Se você usar o
CertificateManagementserviço para carregar um pacote de certificados de CA e também configurar explicitamente a autenticação mútua na configuração do dispositivo, as instruções configuradas terão precedência.
Configurar a conta de usuário para serviços gRPC
As credenciais do canal são anexadas ao canal gRPC e permitem que o aplicativo cliente acesse o serviço. As credenciais de chamada são anexadas a uma solicitação RPC específica e fornecem informações sobre o usuário que está usando o aplicativo cliente. Você deve fornecer credenciais de chamada em cada solicitação 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 mapeia o usuário para uma conta de modelo de usuário definida localmente no dispositivo.
Para criar uma conta de usuário:
Configurar a autorização RPC do gRPC
Por padrão, os dispositivos Junos autorizam um cliente gRPC autenticado a executar todos os RPCs gRPC. Você pode configurar uma classe de login do Junos para permitir ou negar explicitamente RPCs gRPC. Para especificar os RPCs, configure as allow-grpc-rpc-regexps instruções and deny-grpc-rpc-regexps e defina expressões regulares que correspondam aos RPCs. Se houver expressões conflitantes nas listas de permissões e negações, a lista de negações terá precedência. 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 instrução no arquivo de 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 instruções and deny-grpc-rpc-regexps com uma ou mais expressões. Coloque cada expressão entre aspas (" "). Coloque várias expressões entre colchetes [ ] e separe as expressões com um espaço.
allow-grpc-rpc-regexps ["regex1" "regex2" ... ] allow-grpc-rpc-regexps "regex3"
Para criar uma classe de login que define a autorização para RPCs gRPC:
Tabela de histórico de alterações
A compatibilidade com recursos é determinada pela plataforma e versão utilizada. Use o Explorador de recursos para determinar se um recurso é compatível com sua plataforma.