Workload Identity の使用

このページでは、Workload Identity を有効にすることで、Google Cloud APIs を使用する Google Cloud Run for Anthos サービスを認証する方法について説明します。

GKE クラスタ内から Compute API、Storage API、Database API、Machine Learning API などの Google Cloud APIs を使用するには、権限を取得して Cloud Run for Anthos サービスを認証する必要があります。そうするには、Workload Identity を有効にして、Google サービス アカウントとして機能する Kubernetes サービス アカウントをバインドします。

クラスタで Workload Identity を有効にする

Cloud Run for Anthos で Workload Identity を設定するには、次の手順に沿ってクラスタでそれを有効にします。それ以外の場合は、スキップして次のセクションに進みます。

新しいクラスタで Workload Identity を有効化するか、既存のクラスタで Workload Identity を有効化します。

Workload Identity を使用するクラスタで指標を有効にする

Workload Identity を有効にすると、Cloud Run for Anthos はリビジョン リクエスト数やリクエストのレイテンシなどの特定の指標を Google Cloud のオペレーション スイートに報告しませんが、CPU とメモリなどの指標の報告は継続します。

すべての指標を有効にするには、Cloud Monitoring に指標を書き込むための権限を手動で設定する必要があります。そのためには、お使いの Cloud Run for Anthos サービスに関連付けられた Google サービス アカウント(GSA)にモニタリング指標の書き込みのロールを付与します。

サービスの GSA にモニタリング指標書き込みのロールの権限を付与します。

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com \
--role=roles/monitoring.metricWriter

以下のように置き換えます。

  • PROJECT_ID は、KSA をホストするクラスタ プロジェクトのプロジェクト ID に置き換えます。
  • GSA_PROJECT は、クラスタ内に存在しない GSA のプロジェクト ID に置き換えます。組織内のどの GSA も使用できます。

詳細については、リソースへのアクセス権の付与、変更、取り消しをご覧ください。

サービス アカウントをバインドする

Google サービス アカウント(GSA)として機能する Kubernetes サービス アカウント(KSA)の関係を設定する必要があります。KSA として実行されるワークロードは、Google Cloud APIs にアクセスするとき自動的に GSA として認証されます。

  1. Kubernetes サービス アカウント(KSA)が存在しない場合、Cloud Run for Anthos サービスと同じ Kubernetes 名前空間にアカウントを作成します。それ以外の場合は、スキップして次の手順に進みます。

    kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
  2. KSA と GSA の間の関係を作成します。これにより、KSA として実行されるワークロードは Google Cloud APIs へのアクセス時に自動的に GSA として認証されます。

    1. 次のように KSA を GSA として承認します。

      gcloud iam service-accounts add-iam-policy-binding \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:PROJECT_ID.svc.id.goog[K8S_NAMESPACE/KSA_NAME]" \
      GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com
    2. バインディングを利用できるようにクラスタを更新します。

      kubectl annotate serviceaccount \
      --namespace K8S_NAMESPACE \
       KSA_NAME \
       iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com

新しい ID で新しいサービスをデプロイする

デプロイするサービスのクラスタと名前空間の中に存在する KSA を使用して、サービスをデプロイします。サービス アカウントは、クラスタとは異なるプロジェクトに属していることもあります。

Console

  1. Google Cloud コンソールで Cloud Run for Anthos に移動します。

    Cloud Run for Anthos に移動

  2. デプロイ先の新しいサービスを構成する場合は、[サービスの作成] をクリックします。既存のサービスを構成する場合は、そのサービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。

  3. [詳細設定] で [コンテナ] をクリックします。

    画像

  4. [サービス アカウント] プルダウンをクリックして、目的のサービス アカウントを選択します。

  5. [次へ] をクリックして、次のセクションに進みます。

  6. [このサービスをトリガーする方法の構成] セクションで、サービスを呼び出すために使用する接続を選択します。

  7. [作成] をクリックしてイメージを Cloud Run for Anthos にデプロイし、デプロイの完了を待ちます。

コマンドライン

  • 既存のサービスの場合は、次のパラメータを使用して gcloud run services update コマンドを実行し、ランタイム サービス アカウントを構成します。

    gcloud run services update SERVICE --service-account SERVICE_ACCOUNT
    

    以下のように置き換えます。

    • SERVICE は、実際のサービスの名前に置き換えます。
    • SERVICE_ACCOUNT は、新しい ID に関連付けられたサービス アカウントに置き換えます。
  • 新しいサービスの場合は、--service-account パラメータを使用して gcloud run deploy コマンドを実行し、ランタイム サービス アカウントを構成します。

    gcloud run deploy --image IMAGE_URL --service-account SERVICE_ACCOUNT
    

    以下のように置き換えます。

    • IMAGE_URL は、コンテナ イメージへの参照(gcr.io/myproject/my-image:latest など)に置き換えます。
    • SERVICE_ACCOUNT は、新しい ID に関連付けられたサービス アカウントに置き換えます。

YAML

--format=export フラグを使用して、gcloud run services describe コマンドで既存のサービスの構成を YAML ファイルにダウンロードできます。次に YAML ファイルを変更し、gcloud beta run services replace コマンドを使用してこれらの変更をデプロイします。指定した属性のみを変更する必要があります。

  1. ローカル ワークスペースの service.yaml という名前のファイルにサービスの構成をダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE は、Cloud Run for Anthos サービスの名前に置き換えます。

  2. ローカル ファイルで serviceAccountName: 属性を更新します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          serviceAccountName: SERVICE_ACCOUNT

    置き換える

    • SERVICE は、Cloud Run for Anthos サービスの名前に置き換えます。
    • SERVICE_ACCOUNT は、新しい ID に関連付けられたサービス アカウントに置き換えます。
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud beta run services replace service.yaml