サービス アカウントで認証する

サービス アカウントは、ワークロードまたはサービスがリソースをプログラムで消費し、マイクロサービスに安全にアクセスするために使用するアカウントです。これらは、ユーザーではなく、アプリケーションやワークロードで使用される特別な種類の ID です。ユーザー アカウントと同様に、サービス アカウントには権限とロールを付与できますが、人間のユーザーのようにログインすることはできません。

サービス アカウントは、次のような Google Distributed Cloud(GDC)エアギャップ インフラストラクチャの管理に役立ちます。

  • 内部の Distributed Cloud サービスとワークロードが Distributed Cloud コントロール プレーン アプリケーション プログラミング インターフェース(API)に安全にアクセスできるようにします。たとえば、Kubernetes API とやり取りしてデータベースを作成および削除する Database Services などです。
  • Distributed Cloud のお客様のワークロードが Distributed Cloud サービスにアクセスし、承認されたアプリケーション プログラミング インターフェース(API)呼び出しを行う。たとえば、サービス アカウントは、Vertex AI Workbench ノートブックを使用して Speech-to-Text API で音声ファイルを文字変換することで、顧客を管理できます。
  • Distributed Cloud と連携する外部ワークロード。たとえば、サービス アカウントは、ドキュメントをデジタル化する Distributed Cloud の外部にあるアプリケーションを管理できますが、現在の OCR エンジンを置き換えるために光学文字認識(OCR)API を使用したいと考えています。
  • 分散クラウド サービスまたはシステム コントローラが顧客リソースまたはユーザー クラスタに安全にアクセスできるようにします。たとえば、サービス アカウントは、管理者クラスタで実行されているサービス コントローラが、顧客が管理するユーザー クラスタ内でワークロードを実行する必要がある認証と認可のワークフローを管理できます。

アカウントは、GDC コンソールまたは gdcloud CLI を使用して管理できます。gdcloud CLI では、サービス ID 機能はグローバル ProjectServiceAccount API に基づいて構築されています。サービス アカウントはグローバルに構成されるため、gdcloud ユニバースのすべてのゾーンで動作します。

始める前に

サービス アカウントはプロジェクト内でのみ作成できます。プロジェクトの作成について詳しくは、プロジェクトを作成するをご覧ください。

サービス ID を作成する

サービス アカウントの作成に必要な権限を取得するには、プロジェクト IAM 管理者にプロジェクト IAM 管理者(project-iam-admin)ロールの付与を依頼してください。

サービス アカウントへのアクセス権を持つユーザーは、プロジェクト内のすべてのサービス アカウントにアクセスできます。

プロジェクトでサービス アカウントを作成するには、GDC コンソールまたは gdcloud CLI を使用します。

コンソール

  1. GDC コンソールにログインします。
  2. ナビゲーション メニューで、[ID とアクセス] > [サービス ID] を選択します。
  3. [サービス ID を作成] をクリックします。[サービス ID の詳細] ページが開きます。
  4. [サービス ID 名] フィールドに、サービス ID の名前を入力します。例: testserviceidentity
  5. [作成] をクリックします。

gdcloud

サービス ID を作成します。

gdcloud iam service-accounts create NAME \
    --project=PROJECT

次の値を置き換えます。

  • NAME: ProjectServiceAccount の名前。名前はプロジェクト Namespace 内で一意である必要があります。
  • PROJECT: サービス ID を作成するプロジェクト。gdcloud init がすでに設定されている場合は、--project フラグを省略します。

このコマンドは、Management API サーバーのプロジェクト Namespace に ProjectServiceAccount を作成します。

API

  1. my-project-sa.yaml などの ProjectServiceAccount カスタム リソース YAML ファイルを作成します。

    apiVersion: resourcemanager.global.gdc.goog/v1
    kind: ProjectServiceAccount
    metadata:
      name: NAME
      namespace: PROJECT
    spec:
      keys:
      - algorithm: ALGORITHM
      id: KEY_ID
      key: KEY
      validAfter: "START_TIME"
      validBefore: "EXPIRATION_TIME"
    

    次の変数を置き換えます。

    • NAME: ProjectServiceAccount リソースの名前。名前はプロジェクト名前空間内で一意である必要があります。
    • PROJECT: サービス ID を作成するプロジェクト。
    • ALGORITHM: 鍵のアルゴリズム。ES256 鍵のみがサポートされています。
    • KEY_ID: 鍵の固有識別子。この ID は、検証に使用する鍵を特定するために使用されます。
    • KEY: 照合する Base64 エンコードされた公開鍵。
    • START_TIME: キーが有効になる開始時間(2025-02-07T00:59:34Z など)。
    • EXPIRATION_TIME: 鍵の有効期限(2026-02-07T00:59:34Z など)。
  2. ProjectServiceAccount カスタム リソースをグローバル API サーバーに適用します。

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f my-project-sa.yaml
    

    GLOBAL_API_SERVER_KUBECONFIG 変数を、グローバル API サーバーの kubeconfig ファイルへのパスに置き換えます。

サービス ID を表示する

プロジェクト内のサービス アカウントの一覧を表示するには、GDC コンソールまたは gdcloud CLI を使用します。

コンソール

  1. GDC コンソールにログインします。
  2. プロジェクトを選択します。
  3. ナビゲーション メニューで、[Identity & Access > Service Identities] をクリックして、プロジェクトのサービス アカウントのリストを表示します。

gdcloud

プロジェクトのサービス アカウントを一覧表示します。

gdcloud iam service-accounts list \
    --project=PROJECT

サービス ID にロール バインディングを割り当てる

ロール バインディングを割り当てるには、適切な権限が必要です。ロールの割り当てに必要な権限を取得するには、プロジェクト IAM 管理者にプロジェクト IAM 管理者(project-iam-admin)ロールの付与を依頼してください。

GDC コンソールまたは gdcloud CLI を使用して、ロール バインディングを割り当てます。

コンソール

  1. GDC コンソールにログインします。
  2. プロジェクトを選択します。
  3. ナビゲーション メニューで、[ID とアクセス] > [アクセス] を選択します。
  4. [メンバー] リストで、[メンバーを追加] をクリックします。[ユーザーとロール] ページが表示されます。
  5. [メンバー タイプ] リストで [サービス ID] を選択します。
  6. [サービス ID] リストで、ロール バインディングを割り当てるサービス ID を選択します。
  7. [ロール] リストで、サービス ID に割り当てるロール(バックアップ作成者など)を選択します。
  8. 省略可: 別のロールを追加するには、[別のロールを追加] をクリックします。追加のロールを選択します。
  9. [追加] をクリックします。

gdcloud

このコマンドは、指定されたロールを Management API サーバーの ProjectServiceAccount にバインドするプロジェクト ロール バインディングを作成して名前を付けます。

gdcloud iam service-accounts add-iam-policy-binding \
    --project=PROJECT \
    --role=ROLE \
    --role-namespace=ROLE_NAMESPACE \
    --iam-account=NAME

次の値を置き換えます。

  • PROJECT: ロール バインディングを作成するプロジェクト。gdcloud init がすでに設定されている場合は、--project フラグを省略できます。
  • ROLE: ProjectServiceAccount に割り当てる事前定義ロール。ロールは Role/name 形式で指定します。ここで、Role は Kubernetes タイプ IAMRolename は事前定義ロールの名前です。たとえば、プロジェクト閲覧者のロールを割り当てるには、ロールを IAMRole/project-viewer に設定します。
  • ROLE_NAMESPACE: サービス アカウントにバインドするロールの名前空間。これは、ユニバースに複数のゾーンがある場合にのみ適用されます。
  • NAME: 使用するサービス ID の名前。

サービス ID を削除する

プロジェクト内のサービス アカウントを削除するには、GDC コンソールまたは gdcloud CLI を使用します。

コンソール

  1. GDC コンソールにログインします。
  2. ナビゲーション メニューで、[ID とアクセス] > [サービス ID] を選択します。
  3. 削除するサービス ID のチェックボックスをオンにします。
  4. [削除] をクリックします。
  5. 確認ダイアログが表示されます。[Confirm by typing the following below] フィールドに「remove」と入力します。
  6. [削除] をクリックします。

gdcloud

次のコマンドを実行して、サービス ID を削除します。

gdcloud iam service-accounts delete NAME \
    --project=PROJECT

鍵ペアを作成して追加する

プロジェクトで鍵ペアを作成して追加するには、GDC コンソールまたは gdcloud CLI を使用します。

コンソール

  1. GDC コンソールにログインします。
  2. ナビゲーション メニューで、[ID とアクセス] > [サービス ID] を選択します。
  3. キーに追加するサービス ID の名前をクリックします。
  4. [新しいキーを作成] をクリックします。
  5. 新しいキーが [キー] リストに表示され、キーが正常に作成されたことを確認するダイアログが表示されます。

gdcloud

このコマンドは、アプリケーションのデフォルト認証情報の JSON ファイルと公開鍵と秘密鍵のペアを作成します。

gdcloud iam service-accounts keys create APPLICATION_DEFAULT_CREDENTIALS_FILENAME \
    --project=PROJECT \
    --iam-account=NAME \
    --ca-cert-path=CA_CERTIFICATE_PATH

次の値を置き換えます。

  • APPLICATION_DEFAULT_CREDENTIALS_FILENAME: JSON ファイルの名前。
  • PROJECT : 鍵を作成するプロジェクトを選択します。gdcloud init がすでに設定されている場合は、--project フラグを省略できます。
  • NAME: 鍵を追加するサービス ID の名前。
  • CA_CERTIFICATE_PATH: 省略可。認証エンドポイントを検証するための認証局(CA)証明書のパス。このパスを指定しない場合、システム CA 証明書が使用されます。CA はシステムの CA 証明書にインストールする必要があります。

Distributed Cloud は、秘密鍵が署名する JSON ウェブトークン(JWT)の検証に使用する ProjectServiceAccount 鍵に公開鍵を追加します。秘密鍵は、アプリケーションのデフォルト認証情報の JSON ファイルに書き込まれます。

次の例は、アプリケーションのデフォルト認証情報の JSON ファイルを示しています。

{
"type": "gdch_service_account",
"format_version": "1",
"project": "project_name",
"private_key_id": "abcdef1234567890",
"private_key": "-----BEGIN RSA PRIVATE KEY-----\nETC\n-----END RSA PRIVATE KEY-----\n",
"name": "service_identity_name",
"ca_cert_path": "service_identity_name",
"token_uri": "https://service-identity.<Domain>/authenticate"
}

この例では次の値を使用します。

  • project: 組織内のプロジェクト Namespace。
  • private_key_id: 鍵に割り当てられた ID。
  • private_key: CLI が生成する秘密鍵。
  • name: サービス ID の名前。
  • token_uri: 認証エンドポイントのアドレス。

サービス アカウントの認証情報を一覧表示する

プロジェクト内の特定の ProjectServiceAccount の公開鍵を一覧表示します。

gdcloud iam service-accounts keys list \
    --project=PROJECT \
    --iam-account=NAME

認証情報を削除

公開鍵を削除するには、GDC コンソールまたは gdcloud CLI を使用します。

コンソール

  1. GDC コンソールにログインします。
  2. ナビゲーション メニューで、[ID とアクセス] > [サービス ID] を選択します。
  3. 削除する鍵があるサービス ID の名前をクリックします。
  4. [削除] をクリックします。
  5. 確認ダイアログで [削除] をクリックします。

gdcloud

鍵 ID を使用して、プロジェクトの特定の ProjectServiceAccount から公開鍵を削除します。

gdcloud iam service-accounts keys delete KEY_ID \
    --project=PROJECT \
    --iam-account=NAME