このページでは、Google Kubernetes Engine(GKE)クラスタに Spanner データベースへのアクセス権限を付与する方法について説明します。
GKE は、コンテナ化されたアプリケーションを簡単にデプロイして管理できるようにするマネージド Kubernetes サービスです。GKE と Spanner を併用することで、アプリケーション レイヤとデータベース レイヤで拡張性、信頼性、セキュリティ、高可用性を利用できます。
GKE クラスタは、Workload Identity Federation for GKE を介して Spanner API にアクセスできます。Workload Identity Federation for GKE では、クラスタ内の Kubernetes サービス アカウントが IAM サービス アカウントとして機能します。IAM サービス アカウントは、Pod にアプリケーションのデフォルト認証情報を提供します。そのため、個人のユーザー認証情報を使用するように各 Pod を構成する必要はありません。
Workload Identity Federation for GKE を使用して認証するようにアプリケーションを構成すると、Spanner クライアント ライブラリを使用して Spanner データベースのクエリを実行できます。アプリケーションを GKE ノードプールに移行することもできます。
サンプル環境で接続を作成するには、Spanner と GKE Autopilot を接続する Codelab をお試しください。
GKE 用 Workload Identity 連携を有効にする
まだ有効にしていない場合は、GKE クラスタで Workload Identity Federation for GKE を有効にします。新しいクラスタで Workload Identity Federation for GKE を有効にするには、新しいノードプールを作成します。また、既存のノードプールで Workload Identity Federation for GKE を有効にすることもできます。GKE Autopilot クラスタでは、Workload Identity Federation for GKE がデフォルトで有効になっています。詳細については、Workload Identity Federation for GKE を有効にするをご覧ください。
Workload Identity Federation for GKE を使用して Spanner への接続を認証する
Workload Identity Federation for GKE を使用して Google Cloud の認証を行うようにアプリケーションを構成します。
認可とプリンシパルを構成するで説明されているように、GKE Pod が Kubernetes
ServiceAccount
オブジェクトを使用していることを確認します。必要な 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 データベースにクエリを実行できます。
次のステップ
- GKE クラスタにアプリケーションをデプロイする方法を学習する。
- GKE Autopilot と Spanner を使用してアプリケーションをデプロイする方法を学習する。
- 既存のワークロードを Workload Identity Federation for GKE に移行する方法の詳細を学習する。
- SQL のベスト プラクティスの詳細を学習する。
- Spanner を他の ORM(Hibernate ORM、gorm、Django ORM など)と統合する。