ALTS 认证

使用应用层传输安全 (ALTS) 的 Java 版 gRPC 身份验证概述。

ALTS 认证

使用应用层传输安全 (ALTS) 的 Java 版 gRPC 身份验证概述。

概述

应用层传输安全 (Application Layer Transport Security, ALTS) 是 Google 开发的一种相互身份验证和传输加密系统,用于保护 Google 基础设施内的 RPC 通信。ALTS 与双向 TLS 相似,但它是为满足 Google 生产环境的需求而设计和优化的。如需了解更多信息,请查看 ALTS 白皮书

gRPC 中的 ALTS 具有以下特性

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

gRPC 用户可以通过少量代码行配置其应用程序以使用 ALTS 作为传输安全协议。

请注意,如果应用程序运行在 Compute EngineGoogle Kubernetes Engine (GKE) 上,ALTS 可完全支持 GCP 与 Google 之间的连接。ALTS 不支持 GCP 工作负载之间的工作负载到工作负载 (workload-to-workload) 身份验证。

使用 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)