Spanner を GKE クラスタに接続する

このページでは、Google Kubernetes Engine(GKE)クラスタに Spanner データベースへのアクセス権限を付与する方法について説明します。

GKE は、コンテナ化されたアプリケーションを簡単にデプロイして管理できるようにするマネージド Kubernetes サービスです。GKE と Spanner を併用することで、アプリケーション レイヤとデータベース レイヤで拡張性、信頼性、セキュリティ、高可用性を利用できます。

GKE クラスタは Workload Identity を介して Spanner API にアクセスできます。Workload Identity では、クラスタ内の Kubernetes サービス アカウントが IAM サービス アカウントとして機能します。IAM サービス アカウントは、Pod のアプリケーションのデフォルト認証情報を提供するため、個人のユーザー認証情報を使用するように各 Pod を構成する必要はありません。

Workload Identity を使用して認証を行うようにアプリケーションを構成したら、Spanner クライアント ライブラリを使用して Spanner データベースにクエリを実行できます。アプリケーションを GKE ノードプールに移行することもできます。

サンプル環境で接続を作成するには、GKE Autopilot による Spanner の接続 Codelab をお試しください。

Workload Identity を有効にする

まだ行っていない場合は、GKE クラスタで Workload Identity を有効にします。新しいクラスタで Workload Identity を有効にするには、新しいノードプールを作成するか、既存のノードプールで Workload Identity を有効にします。 GKE Autopilot クラスタでは、Workload Identity がデフォルトで有効になっています。詳細については、Workload Identity を有効にするをご覧ください。

Workload Identity を使用して Spanner への接続を認証する

Workload Identity を使用して Google Cloud への認証を行うようにアプリケーションを構成します。

  1. 認可とプリンシパルを構成するで説明されているように、GKE Pod が Kubernetes ServiceAccount オブジェクトを使用していることを確認します。

  2. 必要な Spanner IAM ロールを Kubernetes ServiceAccount オブジェクトに付与する IAM 許可ポリシーを作成します。 次の例では、Spanner データベース ユーザー(roles/spanner.databaseUser)のロールを付与します。

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME \
          --role=roles/spanner.databaseUser \
          --condition=None
    

    次のように置き換えます。

    • PROJECT_ID: GKE クラスタのプロジェクト ID。
    • PROJECT_NUMBER: 数値の Google Cloud プロジェクト番号
    • NAMESPACE: ServiceAccount を含む Kubernetes Namespace。
    • KSA_NAME: ServiceAccount の名前。

Spanner データベースを接続する

アプリケーション Pod が認証されたら、いずれかの Spanner クライアント ライブラリを使用して、Spanner データベースにクエリを実行できます。

次のステップ