Go中使用应用层传输安全(ALTS)的gRPC认证概述。
ALTS认证
Go中使用应用层传输安全(ALTS)的gRPC认证概述。
概述
应用层传输安全(ALTS)是由 Google 开发的相互认证和传输加密系统。它用于保护 Google 基础设施内的 RPC 通信的安全。ALTS类似于相互TLS,但经过设计和优化以满足谷歌生产环境的需要。欲了解更多信息,请看ALTS白皮书。
gRPC中的ALTS有以下特点。
- 使用ALTS作为传输安全协议创建gRPC服务器和客户端。
- ALTS连接是端到端的保护,具有隐私性和完整性。
- 应用程序可以访问对等信息,如对等服务账户。
- 支持客户端授权和服务器授权。
- 启用ALTS所需的代码改动极少。
gRPC用户可以配置他们的应用程序,以使用ALTS作为传输安全协议,只需几行代码。
请注意,如果应用程序在谷歌云平台上运行,ALTS是完全有效的。ALTS可以通过一个可插拔的ALTS握手服务在任何平台上运行。
带有ALTS传输安全协议的gRPC客户端
gRPC客户端可以使用ALTS凭证连接到服务器,如下面的代码摘录所示。
import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials/alts" ) altsTC := alts.NewClientCreds(alts.DefaultClientOptions()) conn, err := grpc.Dial(serverAddr, grpc.WithTransportCredentials(altsTC))
带有ALTS传输安全协议的gRPC服务器
gRPC服务器可以使用ALTS凭证来允许客户端连接到它们,如下图所示。
import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials/alts" ) altsTC := alts.NewServerCreds(alts.DefaultServerOptions()) server := grpc.NewServer(grpc.Creds(altsTC))
服务器授权
gRPC有内置的使用ALTS的服务器授权支持。使用ALTS的gRPC客户端可以在建立连接之前设置预期的服务器服务账户。然后,在握手结束时,服务器授权保证服务器的身份与客户指定的服务账户之一相匹配。否则,连接会失败。
import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials/alts" ) clientOpts := alts.DefaultClientOptions() clientOpts.TargetServiceAccounts = []string{expectedServerSA} altsTC := alts.NewClientCreds(clientOpts) conn, err := grpc.Dial(serverAddr, grpc.WithTransportCredentials(altsTC))
客户端授权
在一个成功的连接中,对等信息(如客户的服务账户)被存储在AltsContext中。gRPC提供了一个用于客户授权检查的实用库。假设服务器知道预期的客户身份(例如,foo@iam.gserviceaccount.com),它可以运行下面的示例代码来授权进入的RPC。
import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials/alts" ) err := alts.ClientAuthorizationCheck(ctx, []string{"foo@iam.gserviceaccount.com"})