ALTS 认证
使用应用层传输安全 (ALTS) 的 gRPC C++ 认证概述。
ALTS 认证
使用应用层传输安全 (ALTS) 的 gRPC C++ 认证概述。
概述
应用层传输安全 (ALTS) 是由 Google 开发的一种相互认证和传输加密系统。它用于保护 Google 基础设施内的 RPC 通信安全。ALTS 类似于相互 TLS,但经过设计和优化以满足 Google 生产环境的需求。更多信息,请参阅 ALTS 白皮书。
gRPC 中的 ALTS 具有以下特性
- 使用 ALTS 作为传输安全协议创建 gRPC 服务器和客户端。
- ALTS 连接提供端到端保护,保障隐私和完整性。
- 应用程序可以访问对等方信息,例如对等方服务账号。
- 支持客户端授权和服务端授权。
- 启用 ALTS 只需极少的代码更改。
gRPC 用户只需少量代码即可将其应用程序配置为使用 ALTS 作为传输安全协议。
请注意,如果应用程序运行在 Compute Engine 或 Google Kubernetes Engine (GKE) 上,ALTS 功能将完全可用。
使用 ALTS 传输安全协议的 gRPC 客户端
gRPC 客户端可以使用 ALTS 凭据连接到服务器,如下面的代码片段所示
#include <grpcpp/grpcpp.h>
#include <grpcpp/security/credentials.h>
using grpc::experimental::AltsCredentials;
using grpc::experimental::AltsCredentialsOptions;
auto creds = AltsCredentials(AltsCredentialsOptions());
std::shared_ptr<grpc::Channel> channel = CreateChannel(server_address, creds);
使用 ALTS 传输安全协议的 gRPC 服务器
gRPC 服务器可以使用 ALTS 凭据允许客户端连接,如下所示
#include <grpcpp/security/server_credentials.h>
#include <grpcpp/server.h>
#include <grpcpp/server_builder.h>
using grpc::experimental::AltsServerCredentials;
using grpc::experimental::AltsServerCredentialsOptions;
grpc::ServerBuilder builder;
builder.RegisterService(&service);
auto creds = AltsServerCredentials(AltsServerCredentialsOptions());
builder.AddListeningPort("[::]:<port>", creds);
std::unique_ptr<Server> server(builder.BuildAndStart());
服务端授权
gRPC 使用 ALTS 内置了服务端授权支持。使用 ALTS 的 gRPC 客户端可以在建立连接之前设置预期的服务端服务账号。然后,在握手结束时,服务端授权会确保服务端身份与客户端指定的某个服务账号匹配。否则,连接将失败。
#include <grpcpp/grpcpp.h>
#include <grpcpp/security/credentials.h>
using grpc::experimental::AltsCredentials;
using grpc::experimental::AltsCredentialsOptions;
AltsCredentialsOptions opts;
opts.target_service_accounts.push_back("expected_server_service_account1");
opts.target_service_accounts.push_back("expected_server_service_account2");
auto creds = AltsCredentials(opts);
std::shared_ptr<grpc::Channel> channel = CreateChannel(server_address, creds);
客户端授权
连接成功后,对等方信息(例如,客户端的服务账号)将存储在 AltsContext 中。gRPC 提供了一个用于客户端授权检查的实用程序库。假设服务器知道预期的客户端身份(例如,foo@iam.gserviceaccount.com
),则可以运行以下示例代码来授权传入的 RPC。
#include <grpcpp/server_context.h>
#include <grpcpp/security/alts_util.h>
grpc::ServerContext* context;
grpc::Status status = experimental::AltsClientAuthzCheck(
context->auth_context(), {"foo@iam.gserviceaccount.com"});
最后修改于 2021 年 8 月 11 日:清理描述中的尾部空白 (#822) (88d84d6)