ALTS 认证

gRPC Java 中使用应用层传输安全 (ALTS) 进行认证的概述。

ALTS 认证

gRPC Java 中使用应用层传输安全 (ALTS) 进行认证的概述。

概述

应用层传输安全 (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 凭据连接到服务器,如下面的代码摘录所示

import io.grpc.alts.AltsChannelBuilder;
import io.grpc.ManagedChannel;

ManagedChannel managedChannel =
    AltsChannelBuilder.forTarget(serverAddress).build();

使用 ALTS 传输安全协议的 gRPC 服务器

gRPC 服务器可以使用 ALTS 凭据允许客户端连接到它们,如下所示

import io.grpc.alts.AltsServerBuilder;
import io.grpc.Server;

Server server = AltsServerBuilder.forPort(<port>)
    .addService(new MyServiceImpl()).build().start();

服务器授权

gRPC 使用 ALTS 内置了服务器授权支持。使用 ALTS 的 gRPC 客户端可以在建立连接之前设置预期的服务器服务帐户。然后,在握手结束时,服务器授权会确保服务器身份与客户端指定的某个服务帐户匹配。否则,连接将失败。

import io.grpc.alts.AltsChannelBuilder;
import io.grpc.ManagedChannel;

ManagedChannel channel =
    AltsChannelBuilder.forTarget(serverAddress)
        .addTargetServiceAccount("expected_server_service_account1")
        .addTargetServiceAccount("expected_server_service_account2")
        .build();

客户端授权

成功建立连接后,对等方信息(例如客户端的服务帐户)存储在 AltsContext 中。gRPC 提供了一个用于客户端授权检查的实用程序库。假设服务器知道预期的客户端身份(例如,foo@iam.gserviceaccount.com),它可以运行以下示例代码来授权传入的 RPC。

import io.grpc.alts.AuthorizationUtil;
import io.grpc.ServerCall;
import io.grpc.Status;

ServerCall<?, ?> call;
Status status = AuthorizationUtil.clientAuthorizationCheck(
    call, Lists.newArrayList("foo@iam.gserviceaccount.com"));
最后修改于 2021 年 8 月 11 日:删除描述末尾的空格 (#822) (88d84d6)