ALTS認証

Goにおけるアプリケーション層トランスポートセキュリティ (ALTS) を使用したgRPC認証の概要です。

ALTS認証

Goにおけるアプリケーション層トランスポートセキュリティ (ALTS) を使用したgRPC認証の概要です。

概要

アプリケーション層トランスポートセキュリティ (ALTS) は、Googleによって開発された相互認証およびトランスポート暗号化システムです。Googleのインフラストラクチャ内でのRPC通信のセキュリティ保護に使用されます。ALTSは相互TLSに似ていますが、Googleの運用環境のニーズを満たすように設計および最適化されています。詳細については、ALTSホワイトペーパーをご覧ください。

gRPCにおけるALTSには、次の機能があります

  • ALTSをトランスポートセキュリティプロトコルとして使用して、gRPCサーバーとクライアントを作成します。
  • ALTS接続は、プライバシーと整合性を備えたエンドツーエンドで保護されます。
  • アプリケーションは、ピアサービスアカウントなどのピア情報にアクセスできます。
  • クライアント認証とサーバー認証をサポートします。
  • ALTSを有効にするためのコード変更は最小限です。

gRPCユーザーは、数行のコードでALTSをトランスポートセキュリティプロトコルとして使用するようにアプリケーションを設定できます。

アプリケーションがCompute EngineまたはGoogle Kubernetes Engine (GKE)で実行されている場合、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クライアントは、接続を確立する前に、予期されるサーバーサービスアカウントを設定できます。その後、ハンドシェイクの最後に、サーバー認証によって、サーバーIDがクライアントによって指定されたサービスアカウントのいずれかと一致することが保証されます。そうでない場合、接続は失敗します。

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は、クライアント認証チェック用のユーティリティライブラリを提供します。サーバーが予期されるクライアントID(例: `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"})
最終更新日:2021年8月11日: 説明の末尾の空白を削除 (#822) (88d84d6)