Cấu hình dịch vụ gRPC trên thiết bị Juniper Junos OS

Cấu hình dịch vụ gRPC trên thiết bị Juniper Junos OS

 

**Tóm tắt: Cấu hình máy chủ gRPC để cho phép máy khách sử dụng các dịch vụ gRPC trên thiết bị mạng, bao gồm: dịch vụ giao diện vận hành mạng gRPC (gNOI - gRPC Network Operations Interface), dịch vụ giao diện quản lý mạng gRPC (gNMI - gRPC Network Management Interface), dịch vụ giao diện bảng định tuyến gRPC (gRIBI - gRPC Routing Information Base Interface)

Chủ đề này hướng dẫn cách cấu hình dịch vụ gRPC trên các thiết bị Junos, bao gồm: Các tùy chọn xác thực, Cách cấu hình từng tùy chọn. Trước khi máy chủ và máy khách có thể thiết lập một phiên gRPC, bạn cần đáp ứng các yêu cầu được đề cập trong các phần sau.

Tìm hiểu về xác thực và ủy quyền cho các dịch vụ dựa trên gRPC

Các giao diện gNOI, gNMI và gRIBI sử dụng khung gọi thủ tục từ xa gRPC (gRPC Remote Procedure Call framework) để truyền tải dữ liệu. Máy chủ gRPC chạy trên thiết bị mạng và lắng nghe các yêu cầu kết nối trên một cổng được chỉ định. Ứng dụng khách gRPC chạy trên hệ thống quản lý mạng từ xa (NMS - Network Management System) và thiết lập kênh gRPC với máy chủ thông qua địa chỉ host và cổng được chỉ định. Máy khách thực thi các RPC (Remote Procedure Calls - Lời gọi thủ tục từ xa) thông qua phiên gRPC được mã hóa SSL để thực hiện các hoạt động dịch vụ mạng. Hình 1 minh họa kết nối đơn giản giữa máy chủ và máy khách gRPC.

Hình 1: Tương tác giữa Máy chủ và Máy khách gRPC

Các kênh gRPC sử dụng chứng chỉ kênh (channel credentials) để thực hiện xác thực giữa máy chủ và máy khách. Chứng chỉ tiêu chuẩn sử dụng chứng chỉ số X.509 để xác thực máy chủ và máy khách. Chứng chỉ số cung cấp phương thức xác thực thông qua một bên thứ ba tin cậy, gọi là Cơ quan chứng nhận (CA - Certificate Authority). CA chịu trách nhiệm xác minh danh tính của người sở hữu chứng chỉ và ký chứng chỉ (signing) để đảm bảo rằng nó không bị giả mạo hoặc chỉnh sửa. Chuẩn X.509 xác định định dạng của chứng chỉ số. Chứng chỉ số X.509 có thể được sử dụng để thiết lập kết nối an toàn giữa hai đầu cuối thông qua quy trình xác thực chứng chỉ. Để thiết lập kênh gRPC, mỗi thiết bị hoặc ứng dụng cần xác thực phải cung cấp chứng chỉ X.509 trong quá trình trao đổi dữ liệu.

Các thiết bị chạy Junos OS hỗ trợ hai mô hình xác thực trong các phiên gRPC dựa trên SSL: Xác thực chỉ máy chủ (Server-Only Authentication), máy chủ cung cấp chứng chỉ khóa công khai khi kênh gRPC được thiết lập, máy khách sử dụng chứng chỉ Root CA của máy chủ để xác thực máy chủ. Xác thực hai chiều (Mutual Authentication), máy khách cũng phải cung cấp chứng chỉ số X.509 khi kết nối đến máy chủ, máy chủ thực hiện xác thực chứng chỉ của máy khách, nếu xác thực thành công, máy khách được phép thực thi các cuộc gọi RPC.

Khuyến nghị bảo mật: Nên cấu hình xác thực hai chiều và sử dụng chứng chỉ do CA cấp để tăng cường bảo mật. Tuy nhiên, thiết bị vẫn hỗ trợ chứng chỉ tự ký (self-signed certificate) nếu cần thiết.

Hạ tầng khóa công khai (PKI) trên Junos OS, PKI (Public Key Infrastructure) hỗ trợ: Phân phối và nhận diện khóa mã hóa công khai, giúp trao đổi dữ liệu an toàn và xác minh danh tính của các bên liên lạc. Đối với các dịch vụ gRPC, PKI của Junos OS phải chứa chứng chỉ của thiết bị cục bộ đóng vai trò máy chủ gRPC. Nếu sử dụng xác thực hai chiều, PKI của Junos cũng phải chứa chứng chỉ Root CA để xác thực các máy khách gRPC kết nối đến thiết bị.

Yêu cầu đối với chứng chỉ máy chủ gRPC

Bảng 1 mô tả các yêu cầu cơ bản đối với xác thực chỉ máy chủ và xác thực hai chiều khi máy khách gRPC kết nối đến thiết bị để thực hiện các dịch vụ gRPC. Chứng chỉ của máy chủ gRPC phải chứa: Tên miền của máy chủ trong trường Common Name (CN) hoặc địa chỉ IP của máy chủ trong trường Subject Alternative Name (subjectAltName - SAN) IP Address. Ứng dụng khách gRPC phải sử dụng cùng giá trị này để thiết lập kết nối. Nếu chứng chỉ sử dụng trường SubjectAltName IP Address, thì trường Common Name (CN) sẽ bị bỏ qua trong quá trình xác thực.

Bảng 1: Yêu cầu đối với Xác thực chỉ máy chủ và xác thực hai chiều trong phiên gRPC.

Yêu cầuXác thực chỉ máy chủXác thực hai chiều
Chứng chỉ

Máy chủ phải có chứng chỉ khóa công khai X.509.
Nếu máy khách kết nối đến địa chỉ IP của máy chủ thay vì hostname, chứng chỉ của máy chủ phải bao gồm trường mở rộng subjectAltName (SAN) với địa chỉ IP của máy chủ.

Máy chủ và máy khách đều phải có chứng chỉ khóa công khai X.509.
Nếu máy khách kết nối đến địa chỉ IP của máy chủ thay vì hostname, chứng chỉ của máy chủ phải bao gồm trường mở rộng subjectAltName (SAN) với địa chỉ IP của máy chủ.
Junos PKIChứng chỉ cục bộ của máy chủ phải được nạp vào Junos PKI.Chứng chỉ cục bộ của máy chủ và chứng chỉ Root CA của từng máy khách phải được nạp vào Junos PKI.
Thông tin xác thực kênhMáy khách phải cung cấp chứng chỉ Root CA của máy chủ khi thiết lập kênh gRPC.Máy khách phải cung cấp chứng chỉ và khóa của mình, cùng với chứng chỉ Root CA của máy chủ khi thiết lập kênh gRPC.

Thông tin xác thực kênh (Channel credentials) được đính kèm vào kênh gRPC và cho phép ứng dụng khách truy cập vào dịch vụ. Trong khi đó, thông tin xác thực cuộc gọi (Call credentials) được gắn với một thao tác dịch vụ cụ thể (yêu cầu RPC) và cung cấp thông tin về người sử dụng ứng dụng khách. Thông tin xác thực cuộc gọi được gửi theo từng yêu cầu, tức là với mỗi lần gọi RPC. Để thực hiện các thao tác dựa trên gRPC trên thiết bị Junos, bạn phải cung cấp thông tin xác thực cuộc gọi trong yêu cầu. Người dùng phải có một tài khoản được định nghĩa cục bộ trên thiết bị, hoặc phải được xác thực bởi máy chủ TACACS+, sau đó ánh xạ người dùng này tới một tài khoản mẫu được định nghĩa trên thiết bị. Bạn có thể cung cấp thông tin xác thực cuộc gọi (tên người dùng và mật khẩu) trong tham số metadata của yêu cầu RPC. Nếu xác thực thành công, thiết bị Junos sẽ thực thi yêu cầu RPC với quyền hạn của người dùng được chỉ định.

**Lưu ý: Ngoài cách cung cấp thông tin xác thực cuộc gọi cho từng yêu cầu RPC thực thi trên thiết bị Junos, bạn có thể sử dụng API jnx_authentication_service trong Juniper Extension Toolkit (JET) để đăng nhập vào thiết bị một lần ngay khi bắt đầu phiên gRPC. Sau đó, tất cả các yêu cầu RPC tiếp theo trong kênh đều được xác thực. Bạn có thể tải thư viện JET Client IDL từ trang tải xuống của Juniper Networks.

Mặc định, các thiết bị Junos cho phép máy khách gRPC đã được xác thực thực thi tất cả các RPC gRPC. Tuy nhiên, bạn có thể tùy chọn cấu hình login class cho người dùng gRPC để giới hạn hoặc cho phép một số RPC nhất định. Để chỉ định các RPC này, bạn sử dụng các lệnh cấu hình allow-grpc-rpc-regexps và deny-grpc-rpc-regexps, đồng thời định nghĩa các biểu thức chính quy tương ứng với các RPC cần kiểm soát.

Lấy chứng chỉ X.509

Phiên gRPC được mã hóa bằng SSL sử dụng chứng chỉ khóa công khai X.509 để xác thực máy chủ và máy khách gRPC. Đối với xác thực chỉ máy chủ, chỉ cần chứng chỉ cho máy chủ gRPC. Đối với xác thực hai chiều, cả máy chủ và máy khách gRPC đều phải có chứng chỉ. Yêu cầu đối với chứng chỉ:

  • Chứng chỉ có thể được ký bởi Tổ chức cấp chứng chỉ (CA) hoặc tự ký (self-signed).
  • Chứng chỉ phải được mã hóa theo định dạng PEM.
  • Chứng chỉ của máy chủ gRPC phải khai báo hostname của máy chủ trong trường Common Name (CN) hoặc địa chỉ IP của máy chủ trong trường SubjectAltName (SAN). Máy khách gRPC phải sử dụng cùng giá trị được định nghĩa trong chứng chỉ để thiết lập kết nối. Nếu chứng chỉ xác định SubjectAltName IP Address, thì trường Common Name (CN) sẽ bị bỏ qua trong quá trình xác thực. Sử dụng OpenSSL để lấy chứng chỉ máy chủ gRPC

Để tạo chứng chỉ máy chủ gRPC bằng OpenSSL, thực hiện các bước sau:

- Tạo khóa riêng và xác định độ dài khóa tính theo bit.

user@nms:~$ openssl genrsa -out server.key 4096

Generating RSA private key, 4096 bit long modulus (2 primes)

...++++

..........................................................................++++

e is 65537 (0x010001)

- Nếu máy khách gRPC kết nối với địa chỉ IP của máy chủ gRPC, hãy cập nhật tệp openssl.cnf hoặc tệp cấu hình tương đương để định nghĩa phần mở rộng subjectAltName=IP với địa chỉ IP của máy chủ gRPC.

user@nms:~$ cat openssl.cnf

# OpenSSL configuration file.

...

extensions              = v3_sign

...

[v3_sign]

subjectAltName=IP:10.53.52.169

- Tạo một yêu cầu ký chứng chỉ (CSR), trong đó chứa khóa công khai của thực thể và thông tin về danh tính của họ.

user@nms:~$ openssl req -new -key server.key -out server.csr

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [AU]:US

State or Province Name (full name) [Some-State]:CA

Locality Name (eg, city) []:Sunnyvale

Organization Name (eg, company) [Internet Widgits Pty Ltd]: Acme

Organizational Unit Name (eg, section) []: testing

Common Name (e.g. server FQDN or YOUR name) []:gnoi-server.example.com

Email Address []:

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

Ngoài ra, bạn có thể cung cấp thông tin CSR trong một lệnh duy nhất, ví dụ:

user@nms:~$ openssl req -new -key server.key -out server.csr -subj "/C=US/ST=CA/L=Sunnyvale/O=Acme/OU=testing/CN=gnoi-server.example.com"

- Tạo chứng chỉ bằng một trong các cách sau:

  • Gửi CSR đến cơ quan chứng nhận (CA) để yêu cầu cấp chứng chỉ X.509, đồng thời cung cấp tệp cấu hình để bao gồm các phần mở rộng bổ sung.
  • Ký CSR bằng CA để tạo chứng chỉ, và sử dụng tùy chọn -extfile nếu cần tham chiếu đến tệp cấu hình và các phần mở rộng.

user@nms:~$ openssl x509 -req -in server.csr -CA /etc/pki/certs/ServerRootCA.crt -CAkey /etc/pki/certs/ServerRootCA.key -set_serial 0101 -out server.crt -days 365 -sha256 -extfile openssl.cnf

Signature ok

subject=C = US, ST = CA, L = Sunnyvale, O = Acme, OU = testing, CN = gnoi-server.example.com

Getting Private key

  • Ký CSR bằng khóa của máy chủ để tạo chứng chỉ tự ký, và sử dụng tùy chọn -extfile nếu cần tham chiếu đến tệp cấu hình và các phần mở rộng.

user@nms:~$ openssl x509 -req -in server.csr -signkey server.key -out server.crt  -days 365 -sha256 -extfile openssl.cnf

Signature ok

subject=C = US, ST = CA, L = Sunnyvale, O = Acme, OU = testing, CN = gnoi-server.example.com

Getting Private key

- Xác minh rằng trường Common Name (CN) và các phần mở rộng của chứng chỉ (nếu có) là chính xác.

user@nms:~$ openssl x509 -text -noout -in server.crt

Certificate:

    Data:

        Version: 3 (0x2)

        ...

        Subject: C = US, ST = CA, L = Sunnyvale, O = Acme, OU = testing, CN = gnoi-server.example.com

        ...

        X509v3 extensions:

            X509v3 Subject Alternative Name:

                IP Address:10.53.52.169

    ...

Đối với xác thực hai chiều, lặp lại các bước trước đó với thông tin của máy khách gRPC để tạo khóa và chứng chỉ cho máy khách. Chứng chỉ của máy khách không cần trường mở rộng SAN IP.

Tải chứng chỉ cục bộ của máy chủ gRPC vào Junos PKI

Thiết bị mạng chạy máy chủ gRPC phải có chứng chỉ X.509 để xác định thiết bị với các máy khách gRPC. Để thực hiện các dịch vụ dựa trên gRPC trên thiết bị Junos, bạn cần nạp chứng chỉ khóa công khai và khóa bí mật của thiết bị mạng cục bộ vào Junos PKI. Sau khi nạp chứng chỉ và thực hiện cấu hình ban đầu, các máy khách gRPC có thể sử dụng bất kỳ micro-service nào để cập nhật chứng chỉ. Ví dụ: một máy khách gRPC có thể sử dụng dịch vụ gNOI CertificateManagement để cài đặt chứng chỉ mới hoặc thay thế chứng chỉ hiện có.

Các bước để nạp chứng chỉ và khóa của thiết bị vào PKI:

- Tải xuống chứng chỉ và khóa của thiết bị đang đóng vai trò máy chủ gRPC về thiết bị đó.

- Trong chế độ vận hành (operational mode), xác định một định danh và nạp chứng chỉ cùng với khóa của thiết bị vào PKI.

user@host> request security pki local-certificate load certificate-id gnoi-server filename /var/tmp/server.crt key /var/tmp/server.key

Local certificate loaded successfully

- (Tuỳ chọn) Xác minh rằng chứng chỉ đã có trong cơ sở dữ liệu PKI.

user@host> show security pki local-certificate certificate-id gnoi-server

LSYS: root-logical-system

Certificate identifier: gnoi-server

  Issued to: gnoi-server.example.com, Issued by: C = US, ST = CA, O = serverRootCAOrg, CN = serverRootCA

  Validity:

    Not before: 04-13-2022 18:15 UTC

    Not after: 04-13-2023 18:15 UTC

  Public key algorithm: rsaEncryption(4096 bits)

  Keypair Location: Keypair generated locally

Bật dịch vụ gRPC

Các dịch vụ dựa trên gRPC sử dụng thiết lập kết nối API dựa trên công nghệ Secure Socket Layer (SSL). Đối với kết nối dựa trên SSL, bạn phải chỉ định chứng chỉ cục bộ để xác định máy chủ gRPC.

Sau khi bạn bật dịch vụ gRPC và chỉ định chứng chỉ cục bộ, thiết bị mạng sẽ sử dụng xác thực chỉ máy chủ. Bạn cũng có thể tùy chọn cấu hình xác thực hai chiều (mutual authentication) bằng cách thực hiện các bước trong phần Cấu hình Xác thực Hai Chiều cho Dịch vụ gRPC.

Cấu hình thiết bị mạng để sử dụng dịch vụ gRPC và chỉ định chứng chỉ cục bộ cho xác thực máy chủ:

- Truy cập phần thiết lập kết nối API dựa trên SSL cho các dịch vụ gRPC.

[edit]

user@host# edit system services extension-service request-response grpc ssl

- Cấu hình cổng để sử dụng cho các dịch vụ gRPC.

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

user@host# set port port-number

Ví dụ:

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

user@host# set port 32767

- Chỉ định chứng chỉ cục bộ.

Nhập định danh của chứng chỉ cục bộ mà bạn đã tải vào Junos PKI trước đó bằng lệnh request security pki local-certificate load trong chế độ operational mode.

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

user@host# set local-certificate certificate-id

Ví dụ sau cấu hình chứng chỉ cục bộ gnoi-server:

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

user@host# set local-certificate gnoi-server

- Cấu hình thiết bị để sử dụng cơ sở dữ liệu PKI cho các chứng chỉ.

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

user@host# set use-pki

- Kích hoạt thiết bị tải lại chứng chỉ mà không cần kết thúc phiên gRPC.

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

user@host# set hot-reloading

- (Tùy chọn) Chỉ định địa chỉ IP để lắng nghe các kết nối đến.

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

user@host# set ip-address address

Ví dụ:

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

user@host# set ip-address 192.168.2.1

**Lưu ý: Nếu bạn không chỉ định địa chỉ IP, địa chỉ mặc định :: sẽ được sử dụng để lắng nghe các kết nối đến.

- (Tùy chọn) Cấu hình tính năng tracing cho các dịch vụ mở rộng để gỡ lỗi các vấn đề có thể xảy ra.

[edit]

user@host# top

user@host# set system services extension-service traceoptions file jsd

user@host# set system services extension-service traceoptions flag all

**Lưu ý: Để xem các tệp dấu vết (trace files) của dịch vụ mở rộng trên Junos OS Evolved, sử dụng các lệnh chế độ vận hành: show trace application jsd, show trace application jsd live

- Áp dụng cấu hình (commit).

user@host# commit

Để cấu hình xác thực hai chiều thay vì chỉ xác thực máy chủ, bạn cũng cần hoàn thành các bước trong Cấu hình Xác thực Hai chiều (Bidirectional) cho Dịch vụ gRPC.

Cấu hình Xác thực hai chiều (Bidirectional) cho dịch vụ gRPC.

Bạn có thể cấu hình xác thực hai chiều cho các phiên gRPC, trong đó cả thiết bị mạng đóng vai trò máy chủ gRPC và hệ thống quản lý mạng (NMS) đóng vai trò máy khách gRPC đều được xác thực bằng chứng chỉ SSL. Thiết bị Junos sử dụng thông tin xác thực do máy khách cung cấp để xác thực và ủy quyền kết nối.

Bạn có thể cấu hình xác thực hai chiều trên thiết bị Junos bằng một trong các tùy chọn sau:

  • Cấu hình cài đặt xác thực hai chiều trực tiếp tại cấp [edit system services extension-service request-response grpc ssl mutual-authentication].
  • Thiết lập xác thực máy chủ ban đầu, sau đó sử dụng dịch vụ gNOI CertificateManagement để tải chứng chỉ CA cần thiết lên thiết bị.

**Lưu ý: Nếu bạn cấu hình xác thực hai chiều trực tiếp trong thiết bị, thì cấu hình này sẽ ưu tiên hơn bất kỳ thiết lập nào được thực hiện thông qua dịch vụ gNOI.

Trước khi bắt đầu:

  1. Tải chứng chỉ và khóa của thiết bị mạng đóng vai trò máy chủ gRPC vào PKI của thiết bị, như mô tả trong phần Tải Chứng chỉ Máy chủ gRPC vào PKI của Junos.
  2. Bật dịch vụ gRPC và cấu hình xác thực máy chủ cục bộ như mô tả trong phần Bật Dịch vụ gRPC.

Các phần sau đây sẽ hướng dẫn các phương pháp khác nhau để cấu hình xác thực hai chiều. Bạn có thể chọn phương pháp phù hợp nhất với môi trường của mình.

Cấu hình xác thực hai chiều trong cấu hình của thiết bị

Để cấu hình xác thực cho máy khách gRPC trực tiếp trong thiết bị mạng:

- Tải chứng chỉ CA gốc (Root CA certificate) dùng để xác thực chứng chỉ của máy khách về thiết bị mạng đóng vai trò máy chủ gRPC.

- Cấu hình hồ sơ Certificate Authority (CA) cho chứng chỉ CA gốc của máy khách tại cấp [edit security pki].

[edit security pki]

user@host# set ca-profile ca-profile-name ca-identity ca-identifier

Ví dụ:

[edit security pki]

user@host# set ca-profile gnoi-client ca-identity clientRootCA

- Xác nhận cấu hình

[edit]

user@host# commit and-quit

- Trong chế độ hoạt động (operational mode), tải chứng chỉ CA gốc (root CA certificate) được sử dụng để xác minh chứng chỉ của máy khách vào Junos PKI. Chỉ định mã định danh hồ sơ CA (ca-profile identifier) mà bạn đã cấu hình trong các bước trước đó.

user@host> request security pki ca-certificate load ca-profile ca-profile filename cert-path

Ví dụ:

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

***Mẹo: Để tải một gói chứng chỉ CA (CA certificate bundle), sử dụng lệnh: request security pki ca-certificate ca-profile-group load ca-group-name ca-group-name filename bundle-path

Sau khi tải chứng chỉ, chuyển sang chế độ cấu hình (configuration mode) và tiếp tục cấu hình xác thực hai chiều (mutual authentication).

- Bật xác thực hai chiều và chỉ định các yêu cầu đối với chứng chỉ của máy khách.

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

user@host# set mutual-authentication client-certificate-request requirement

Ví dụ, để chỉ định mức xác thực mạnh nhất, yêu cầu chứng chỉ và xác thực chứng chỉ, sử dụng 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

**Lưu ý: Mặc định là no-certificate. Các tùy chọn khác bao gồm: request-certificate, request-certificate-and-verify, require-certificate, require-certificate-and-verify

Chúng tôi khuyến nghị chỉ sử dụng tùy chọn no-certificate trong môi trường thử nghiệm.

- Chỉ định hồ sơ chứng chỉ của cơ quan cấp chứng chỉ (certificate authority profile) sẽ được sử dụng để xác thực chứng chỉ của client.

Hồ sơ chứng chỉ của cơ quan cấp chứng chỉ đã được cấu hình ở bước 2.

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

user@host# set mutual-authentication certificate-authority certificate-authority

Ví dụ, để chỉ định hồ sơ chứng chỉ của cơ quan cấp chứng chỉ có tên gnoi-client

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

user@host# set mutual-authentication certificate-authority gnoi-client

- Xác nhận cấu hình

[edit]

user@host# commit and-quit

Cấu hình xác thực tương hỗ sử dụng dịch vụ gNOI CertificateManagement

Bạn có thể sử dụng dịch vụ gNOI CertificateManagement để thiết lập xác thực tương hỗ giữa máy khách gRPC và máy chủ gRPC thay vì cấu hình trực tiếp trên thiết bị. Trước tiên, bạn thiết lập xác thực chỉ dành cho máy chủ, sau đó sử dụng các RPC của dịch vụ gNOI CertificateManagement để tải chứng chỉ CA của máy khách. Xem Dịch vụ Quản lý Chứng chỉ gNOI để biết thông tin về cách tải chứng chỉ bằng dịch vụ này.

Máy chủ gRPC chỉ hỗ trợ một gói chứng chỉ CA toàn cục cho các dịch vụ gNOI. Khi bạn sử dụng dịch vụ gNOI CertificateManagement để tải gói chứng chỉ CA, thiết bị sẽ tự động sử dụng xác thực tương hỗ. Tuy nhiên, bạn cần lưu ý các điểm sau:

  • Dịch vụ CertificateManagement luôn tải gói chứng chỉ CA bằng định danh nhóm hồ sơ CA dự trữ gnoi-ca-bundle.
  • Nếu bạn sử dụng CertificateManagement để tải gói chứng chỉ CA, thiết bị sẽ tự động sử dụng xác thực tương hỗ và áp dụng cấu hình sau, ngay cả khi nó không được cấu hình rõ ràng trên thiết bị.

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

mutual-authentication {

    certificate-authority gnoi-ca-bundle;

    client-certificate-request require-certificate-and-verify;

}

  • Nếu dịch vụ CertificateManagement gửi yêu cầu tải một gói chứng chỉ CA mới, máy chủ sẽ xóa các chứng chỉ của gói CA trước đó khỏi thiết bị và tải các chứng chỉ mới.
  • Nếu bạn sử dụng dịch vụ CertificateManagement để tải gói chứng chỉ CA, đồng thời cấu hình các lệnh trong [edit system services extension-service request-response grpc ssl mutual-authentication], thì các lệnh đã cấu hình sẽ được ưu tiên áp dụng.

Cấu hình tài khoản người dùng cho dịch vụ gRPC

Thông tin xác thực kênh (Channel credentials) được gắn vào kênh gRPC và cho phép ứng dụng khách truy cập dịch vụ.
Thông tin xác thực cuộc gọi (Call credentials) được gắn vào từng yêu cầu RPC cụ thể và cung cấp thông tin về người dùng đang sử dụng ứng dụng khách.
Bạn phải cung cấp call credentials trong mỗi yêu cầu RPC, điều này yêu cầu người dùng phải có tài khoản trên thiết bị mạng. Người dùng phải có tài khoản được định nghĩa cục bộ trên thiết bị mạng, hoặc được xác thực bởi máy chủ TACACS+, sau đó ánh xạ người dùng này vào một tài khoản mẫu được xác định cục bộ trên thiết bị.

Để tạo tài khoản người dùng:

- Cấu hình lệnh user với tên người dùng duy nhất, đồng thời sử dụng lệnh class để chỉ định lớp đăng nhập (login class) có quyền thực hiện tất cả các hành động cần thiết. Ví dụ:

[edit system login]

user@host# set user gnoi-user class super-user

- Đối với tài khoản người dùng cục bộ, hãy cấu hình mật khẩu cho người dùng.

Bạn có thể bỏ qua mật khẩu đối với tài khoản mẫu của người dùng cục bộ, vì người dùng sẽ được xác thực thông qua máy chủ xác thực từ xa.

[edit system login]

user@host# set user gnoi-user authentication plain-text-password

New password:

Retype new password:

- (Tùy chọn) Cấu hình câu lệnh full-name để chỉ định tên của người dùng.

[edit system login]

user@host# set user gnoi-user full-name "gNOI client"

- Cam kết cấu hình để kích hoạt tài khoản người dùng trên thiết bị.

[edit system login]

user@host# commit

- Lặp lại các bước trước đó trên mỗi thiết bị mạng nơi client gRPC sẽ thực thi các RPC trong một phiên gRPC.

Cấu hình ủy quyền gRPC RPC

Mặc định, các thiết bị Junos cho phép một client gRPC đã xác thực thực thi tất cả các RPC gRPC. Bạn có thể cấu hình một lớp đăng nhập (login class) trên Junos để cho phép hoặc từ chối các RPC gRPC cụ thể. Để xác định các RPC, bạn cấu hình các câu lệnh allow-grpc-rpc-regexps và deny-grpc-rpc-regexps bằng cách sử dụng các biểu thức chính quy (regex) để khớp với các RPC. Nếu có sự xung đột giữa danh sách cho phép (allow) và danh sách từ chối (deny), danh sách từ chối sẽ được ưu tiên. Nếu một RPC không khớp với danh sách nào, nó sẽ được phép thực thi theo mặc định.

Các thiết bị Junos sử dụng cú pháp sau để chỉ định các RPC gRPC:

/package.service/rpc

Trong đó package, service, và rpc là các tên được định nghĩa trong câu lệnh tương ứng trong tệp định nghĩa proto của dịch vụ đó.

Ví dụ:

/gnmi.gNMI/Get

/gnoi.certificate.CertificateManagement/Rotate

/gnoi.system.System/Reboot

/gnoi.system.System/RebootStatus

/gribi.gRIBI/.*

Bạn có thể cấu hình nhiều câu lệnh allow-grpc-rpc-regexpsdeny-grpc-rpc-regexps với một hoặc nhiều biểu thức. Đặt mỗi biểu thức trong dấu ngoặc kép (" "). Nếu có nhiều biểu thức, đặt chúng trong dấu ngoặc vuông ([ ]) và phân tách bằng dấu cách.

allow-grpc-rpc-regexps ["regex1" "regex2" ... ]

allow-grpc-rpc-regexps "regex3"

Để tạo một lớp đăng nhập (login class) xác định quyền ủy quyền cho các gRPC RPCs

- Cấu hình tên lớp đăng nhập và các quyền cần thiết.

[edit system login]

user@host# set class class-name permissions [permission1 permission2 ...]

Ví dụ:

[edit system login]

user@host# set class grpc-operator permissions all

- Trong lớp đăng nhập, cấu hình các biểu thức chính quy cho các RPC mà lớp được phép sử dụng.

[edit system login class class-name]

user@host# set allow-grpc-rpc-regexps ["regex1" "regex2" ... ]

user@host# set allow-grpc-rpc-regexps "regex3"

Ví dụ, câu lệnh sau cho phép RPC gNMI Get() và tất cả các RPC dịch vụ gNOI System.

[edit system login class grpc-operator]

user@host# set allow-grpc-rpc-regexps ["/gnmi.gNMI/Get" "/gnoi.system.System/.*"]

- Cấu hình các biểu thức chính quy cho các RPC mà lớp từ chối.

[edit system login class class-name]

user@host# set deny-grpc-rpc-regexps ["regex1" "regex2" ... ]

Ví dụ, các câu lệnh sau từ chối RPC gNMI Set() và cũng từ chối tất cả các RPC cho dịch vụ gRIBI cũng như dịch vụ gNOI CertificateManagement.

[edit system login class grpc-operator]

user@host# set deny-grpc-rpc-regexps ["/gnmi.gNMI/Set" "/gribi.gRIBI/.*"]

user@host# set deny-grpc-rpc-regexps "/gnoi.certificate.CertificateManagement/.*"

- Gán lớp đăng nhập cho các người dùng gRPC phù hợp.

[edit system login]

user@host# set user username class class-name

Ví dụ, câu lệnh sau gán lớp grpc-operator cho người dùng grpc-user.

[edit system login]

user@host# set user grpc-user class grpc-operator

Sau khi bật dịch vụ gRPC trên thiết bị mạng, thiết lập hệ thống quản lý mạng từ xa làm máy khách gRPC. Để cho phép máy khách thực hiện các thao tác gNOI, hãy cấu hình máy khách theo hướng dẫn trong Cấu hình dịch vụ gNOI.

 

 

Chúc các bạn thực hiện thành công. Hi vọng bài viết này sẽ giúp ích cho các bạn trong công việc. Nếu bạn có vấn đề gì thắc mắc đừng ngần ngại liên hệ với chúng tôi theo thông tin dưới đây để được hỗ trợ thêm.

Hẹn gặp lại các bạn trong các bài viết tiếp theo !

CÔNG TY CỔ PHẦN DỊCH VỤ CÔNG NGHỆ DATECH

• Địa chỉ: Số 23E4 KĐT Cầu Diễn, Tổ 7, Phú Diễn, Bắc Từ Liêm, Hà Nội

• Điện thoại: 02432012368

• Hotline: 098 115 6699

• Email: info@datech.vn

• Website: https://datech.vn