ALTS 身份验证

概述在 C++ 中使用应用程序层传输安全 (ALTS) 的 gRPC 身份验证。

ALTS 身份验证

概述在 C++ 中使用应用程序层传输安全 (ALTS) 的 gRPC 身份验证。

概述

应用程序层传输安全 (ALTS) 是 Google 开发的一种相互身份验证和传输加密系统。它用于保护 Google 基础设施内的 RPC 通信。ALTS 类似于相互 TLS,但经过设计和优化,以满足 Google 生产环境的需求。有关更多信息,请查看 ALTS 白皮书

gRPC 中的 ALTS 具有以下特点

  • 创建以 ALTS 作为传输安全协议的 gRPC 服务器和客户端。
  • ALTS 连接通过隐私和完整性进行端到端保护。
  • 应用程序可以访问对等信息,例如对等服务帐户。
  • 支持客户端授权和服务器授权。
  • 启用 ALTS 的代码更改最少。

gRPC 用户只需几行代码即可配置其应用程序以使用 ALTS 作为传输安全协议。

请注意,如果应用程序在 Compute EngineGoogle 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)