gRPC ALTS


🛡️ ALTS là gì?

ALTS là một giao thức bảo mật tầng ứng dụng được Google phát triển để thay thế cho TLS trong nội bộ hệ thống của họ (đặc biệt là trong hệ thống chạy trên Google Cloud).

ALTS = Application Layer Transport Security

Nó được sử dụng chủ yếu cho dịch vụ RPC nội bộ giữa các microservices trong cùng một hạ tầng mạng đáng tin cậy (trusted network).


💡 ALTS khác gì với TLS?

Đặc điểm
TLS
ALTS

Mục đích

Bảo mật kết nối qua internet

Bảo mật RPC nội bộ trong trusted DC

Mã hóa

Mutual Auth

Tuỳ chọn

Luôn luôn Mutual Authentication

Hiệu năng

Tốt

Tối ưu hơn TLS trong nội bộ

Triển khai

Dùng OpenSSL/TLS stack phổ biến

Custom của Google, native in gRPC C++

Được dùng ở đâu

Khắp nơi (Internet)

Chỉ trong Google infra / GCP


🧩 Cách hoạt động của ALTS trong gRPC

ALTS cung cấp:

  1. Mutual Authentication: Cả client và server đều xác minh lẫn nhau.

  2. Channel Encryption: Dữ liệu qua lại giữa client và server được mã hóa.

  3. Authorization context: Có thể extract thông tin identity (service account, hostname, ...) để thực hiện ủy quyền phía app.

Khi một gRPC connection được thiết lập qua ALTS:

  • Nó sử dụng handshake để xác thực danh tính hai phía.

  • Sau đó sinh ra các session key dùng để mã hóa dữ liệu.

  • Cung cấp PeerAuthInfo cho mỗi call, để biết danh tính phía kia.


🔧 Dùng ALTS trong gRPC Golang được không?

❗ Không, hoặc rất hạn chế.

ALTS không hỗ trợ Golang trực tiếp hiện tại. Nó chỉ được implement native trong C++ (gRPC core) và dùng được qua Java / C++ client/server nếu chạy trong Google Cloud (hoặc một hệ thống tương thích).

Tức là:

  • Nếu bạn deploy microservices trong Google Cloud (GKE, GCE, v.v.), bạn có thể bật ALTS giữa các service chạy trong đó.

  • Nếu bạn dùng Golang, bạn phải fallback về TLS hoặc dùng gRPC with mTLS (Mutual TLS).


✅ Khi nào nên dùng ALTS?

Bạn nên dùng ALTS khi:

Bạn chạy toàn bộ hệ thống trong Google Cloud

Bạn dùng gRPC Java/C++

Bạn muốn bảo mật nội bộ mạnh mẽ mà không cần tự quản lý TLS cert

Bạn dùng GKE, Istio, hoặc gRPC in GCP


💡 Trong Golang, làm gì thay thế?

Bạn nên dùng:

// Dùng gRPC với mTLS (Mutual TLS)
creds, err := credentials.NewServerTLSFromFile(certFile, keyFile)
grpc.NewServer(grpc.Creds(creds))

Hoặc trong client:

creds, err := credentials.NewClientTLSFromFile(certFile, serverName)
grpc.Dial(addr, grpc.WithTransportCredentials(creds))

Đây là lựa chọn tương đương ALTS nhưng có thể áp dụng được cho mọi nền tảng.


📦 Tổng kết

  • ALTS là giao thức bảo mật do Google phát triển, thay thế TLS cho RPC nội bộ.

  • Ưu điểm: hiệu năng cao, mutual auth bắt buộc, không cần quản lý cert phức tạp.

  • Hạn chế: chỉ dùng được trong Google Cloud với C++/Java gRPC.

  • Trong Golang hoặc môi trường ngoài GCP, bạn nên dùng mTLS thay vì ALTS.


Last updated