ALTS 认证

本文概述了如何在 Java 中使用应用层传输安全 (ALTS) 进行 gRPC 认证。

ALTS 认证

本文概述了如何在 Java 中使用应用层传输安全 (ALTS) 进行 gRPC 认证。

概述

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

gRPC 中的 ALTS 具有以下特点

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

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

请注意,ALTS 在应用程序运行于 Compute EngineGoogle Kubernetes Engine (GKE) 时可完全可用。

使用 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 日:Trim trailing whitespace from descriptions (#822) (88d84d6)