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?
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
Có
Có
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:
Mutual Authentication: Cả client và server đều xác minh lẫn nhau.
Channel Encryption: Dữ liệu qua lại giữa client và server được mã hóa.
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
Peer
vàAuthInfo
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 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