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

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

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

gRPC中的ALTS有以下特点。

  1. 使用ALTS作为传输安全协议创建gRPC服务器和客户端。
  2. ALTS连接是端到端的保护,具有隐私性和完整性。
  3. 应用程序可以访问对等信息,如对等服务账户。
  4. 支持客户端授权和服务器授权。
  5. 启用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"})

  

posted @ 2022-09-29 20:13  风在何方  阅读(473)  评论(0编辑  收藏  举报