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

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

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

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

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

サンプル環境で接続を作成するには、Spanner と GKE Autopilot の接続の 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 データベースをクエリできます。

次のステップ