Backup for GKE の権限エラーのトラブルシューティング


このページでは、Backup for GKE の使用時に発生する可能性のある権限エラー、アクションの実行時に考慮すべき事項、エラーの解決方法について説明します。

エラー 100010101: PersistentVolumeClaim のバックアップに失敗しました - テナント プロジェクトの IAM バインディングがありません

100010101 エラーは、テナント プロジェクトの Identity and Access Management バインディングがないことが原因で PersistentVolumeClaim のバックアップの試行が失敗した場合に発生します。この場合、Failed to backup PersistentVolumeClaim - Missing IAM binding for tenant project というエラー メッセージが表示されます。

Backup for GKE は、GKE クラスタの Persistent Disk のスナップショットを作成します。スナップショットは、コンシューマー プロジェクトとも呼ばれる Google Cloud プロジェクトに存在し、 Google Cloud は管理しているテナント プロジェクト内にスナップショットを作成します。テナント プロジェクトは、独自の組織とは別の google.com 組織内に存在します。

テナント プロジェクト内のサービス エージェントには、クラスタの PersistentVolumeClaim で参照される Persistent Disk を暗号化する顧客管理の暗号鍵(CMEK)を使用するための特定の権限が必要です。この権限によって、スナップショット データの暗号化と復号が行われます。service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com サービス エージェントにディスクの CMEK に対する roles/cloudkms.cryptoKeyEncrypterDecrypter ロールがない場合、バックアップ オペレーションは失敗します。

このエラーを解決するには、次の手順で対応します。

  1. Google Cloud コンソールの Cloud Key Management Service 鍵に対する IAM ポリシーを変更するのに十分な IAM 権限(roles/cloudkms.adminroles/owner など)があることを確認します。

  2. 失敗したバックアップ オペレーションの status reason メッセージにある TENANT_PROJECT_NUMBER 値を使用して、テナント プロジェクトの Compute Engine サービス エージェントを見つけます。例: service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com

  3. 暗号化された Persistent Disk に使用される次の CMEK 情報を確認します。

    • 鍵名: 暗号鍵の名前。

    • キーリング: 鍵が存在するキーリングの名前。

    • 場所: 鍵が配置されている Google Cloud ロケーション。たとえば、globalus-central1 です。

  4. テナント プロジェクトの Compute Engine サービス エージェントに CMEK の roles/cloudkms.cryptoKeyEncrypterDecrypter ロールを付与するには、Google Cloud CLI を使用して gcloud kms keys add-iam-policy-binding コマンドを実行します。

    gcloud kms keys add-iam-policy-binding KEY_NAME \
        --keyring KEY_RING \
        --location LOCATION \
        --member "serviceAccount:service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

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

    • KEY_NAME: 暗号鍵の名前。

    • KEY_RING: キーリングの名前。

    • LOCATION: 鍵の Google Cloud ロケーション。たとえば、globalus-central1 です。

    • TENANT_PROJECT_NUMBER: バックアップ オペレーションの失敗を示す status reason メッセージから取得したテナント プロジェクト番号。

    コマンドが成功すると、次のような出力が表示されます。

    - members:
    - serviceAccount:service-987654321098@compute-system.iam.gserviceaccount.com
    role: roles/cloudkms.cryptoKeyEncrypterDecrypter
    
  5. バックアップ オペレーションを再テストします。上記を行ってもオペレーションがうまく進まない場合は、Cloud カスタマーケアまでお問い合わせください。

エラー 100010104: PersistentVolumeClaim のバックアップに失敗しました - スナップショットの作成中に組織ポリシーの制約違反が発生しました

100010104 エラーは、スナップショットの作成中に組織のポリシー制約への違反があったことが原因で、PersistentVolumeClaim のバックアップの試行が失敗した場合に発生します。この場合、Failed to backup PersistentVolumeClaim - Org policy constraint violation while creating snapshot というエラー メッセージが表示されます。

Backup for GKE は、GKE クラスタの Persistent Disk のスナップショットを作成します。スナップショットは Google Cloud プロジェクト(別称: コンシューマー プロジェクト)に存在し、 Google Cloudによって管理されるテナント プロジェクト内に作成されます。テナント プロジェクトは、独自の組織とは別の google.com 組織内に存在します。

組織のポリシーによって、ストレージ リソースを作成できる場所が指定されます。Constraint constraints/compute.storageResourceUseRestrictions violated エラーは、許可された組織構造の一部ではないテナント プロジェクトでリソースまたはスナップショットが作成されたことによって、ポリシーに違反したことを意味します。テナント プロジェクトは Google の組織内にあるため、定義したポリシーの対象外となり、バックアップが失敗します。

このエラーを解決するには、次の手順で対応します。

  1. constraints/compute.storageResourceUseRestrictions 制約を実装する組織のポリシーを見つけます。 Google Cloud コンソールを使用して組織のポリシーを表示する方法については、組織のポリシーの表示をご覧ください。

  2. Backup for GKE で使用される folders/77620796932 テナント プロジェクト フォルダを許可リストに含めるように constraints/compute.storageResourceUseRestrictions ポリシーを変更します。

  3. フォルダを許可リストに追加したら、ポリシーの変更を保存します。

  4. 通常数分かかる組織のポリシーの更新と伝播が完了したら、バックアップ オペレーションを再テストします。バックアップは、ストレージ リソースの使用制限に違反することなく続行されます。上記を行ってもオペレーションがうまく進まない場合は、Cloud カスタマーケアまでお問い合わせください。

エラー 100010106: PVC のバックアップに失敗しました - Backup for GKE サービス エージェントの IAM バインディングがありません

100010106 エラーは、Backup for GKE サービス エージェントの Identity and Access Management バインディングがないことが原因で、PersistentVolumeClaim のバックアップが失敗した場合に発生します。この場合、Failed to backup PVC - Missing IAM binding for Backup for GKE service agent というエラー メッセージが表示されます。

Backup for GKE では、ボリュームの Persistent Disk の暗号化と復号に BackupPlan の顧客管理の暗号鍵(CMEK)を使用する権限が必要です。Backup for GKE サービス エージェントに BackupPlan CMEK の roles/cloudkms.cryptoKeyEncrypterDecrypter ロールがない場合、バックアップ オペレーションは失敗します。

このエラーを解決するには、次の手順で対応します。

  1. プロジェクトに固有の Google マネージド Backup for GKE サービス エージェントを特定します。例: service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com。プロジェクト番号は、次の方法で確認できます。

    • Google Cloud コンソールの Google Cloud プロジェクト ダッシュボードを使用します。

    • Google Cloud CLI を使用して gcloud projects describe コマンドを実行します。

      gcloud projects describe PROJECT_ID –format="value(projectNumber)"
      

      PROJECT_ID は、実際のプロジェクト名で置き換えます。

  2. 次の CMEK の詳細を確認します。

    • 鍵名: 暗号鍵の名前。

    • キーリング: 鍵が存在するキーリングの名前。

    • ロケーション: BackupPlan CMEK が配置されている Google Cloud ロケーション。たとえば、globalus-central1 です。

  3. Backup for GKE サービス エージェントに CMEK の roles/cloudkms.cryptoKeyEncrypterDecrypter ロールを付与するには、Google Cloud CLI を使用して gcloud kms keys add-iam-policy-binding コマンドを実行します。

    gcloud kms keys add-iam-policy-binding KEY_NAME \
        --keyring KEY_RING \
        --location LOCATION \
        --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

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

    • KEY_NAME: 暗号鍵の名前。

    • KEY_RING: キーリングの名前。

    • LOCATION: 鍵の Google Cloud ロケーション。たとえば、globalus-central1 です。

    • PROJECT_NUMBER: Google Cloud プロジェクトの番号。

  4. Cloud Key Management Service 鍵に必要な Identity and Access Management 権限があることを確認します。たとえば、roles/cloudkms.admin や、roles/owner です。

  5. 権限が付与されていることを確認します。前の gcloud kms keys add-iam-policy-binding コマンドの出力で、次のようなエントリを探します。

    -members:
    -serviceAccount:service-123456789012@gcp-sa-gkebackup.iam.gserviceaccount.com
    role: roles/cloudkms.cryptoKeyEncrypterDecrypter
    
  6. 必要な権限を付与したら、バックアップ オペレーションを再テストします。オペレーションが正常に完了しない場合は、Cloud カスタマーケアにお問い合わせください。

エラー 100010107: PVC のバックアップに失敗しました - IAM バインディングがありません - エージェント サービス アカウント(KCP)

Backup for GKE バックアップ オペレーションを実行しようとしたときに、Google Kubernetes Engine クラスタ サービス エージェントが顧客管理の暗号鍵(CMEK)にアクセスできないと、エラー 100010107 が発生し、Failed to backup PVC - Missing IAM binding - agent service account (KCP) というメッセージが表示されます。

通常 service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com 形式の Google Kubernetes Engine クラスタ サービス エージェントは、GKE クラスタが Google Cloudサービスとやり取りするために不可欠です。バックアップ プランで顧客管理の暗号鍵(CMEK)を使用している場合。このサービス エージェントには、CMEK を使用してバックアップ データを暗号化および復号する権限が必要です。バックアップ プランに CMEK の roles/cloudkms.cryptoKeyEncrypterDecrypter ロールがない場合、クラスタから開始されたバックアップ オペレーションは permission denied エラーで失敗します。

このエラーを解決するには、次のトラブルシューティング手順を実施します。

  1. Cloud Key Management Service 鍵の IAM ポリシーを変更する正しい権限があることを確認します。たとえば、cloudkms.admin や、roles/owner です。

  2. Google Kubernetes Engine クラスタ サービス エージェントを特定します。このサービス エージェントは、GKE クラスタ用に Google Cloud によって自動的に作成および管理されます。例: service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com完全なサービス アカウントを作成するには、プロジェクト番号が必要です。プロジェクト番号は、次のいずれかの方法で確認できます。

    • Google Cloud コンソールの Google Cloud プロジェクト ダッシュボードを使用します。

    • Google Cloud CLI を使用して gcloud projects describe コマンドを実行します。

      gcloud projects describe PROJECT_ID –-format="value(projectNumber)"
      

      PROJECT_ID は、実際のプロジェクト ID に置き換えます。

  3. 次の CMEK 情報を確認します。

    • 鍵名: 暗号鍵の名前。

    • キーリング: 鍵が存在するキーリングの名前。

    • 場所: 鍵が配置されている Google Cloud ロケーション。たとえば、globalus-central1 です。

  4. CMEK レベルで roles/cloudkms.cryptoKeyEncrypterDecrypter ロールを付与します。Google Kubernetes Engine サービス エージェントには、暗号鍵に対する権限が必要です。CMEK に roles/cloudkms.cryptoKeyEncrypterDecrypter ロールを付与するには、Google Cloud CLI を使用して gcloud kms key add-iam-policy-binding コマンドを実行します。

    gcloud kms keys add-iam-policy-binding KEY_NAME \
        --keyring KEY_RING \
        --location LOCATION \
        --member "serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

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

    • KEY_NAME: 暗号鍵の名前。

    • KEY_RING: キーリングの名前。

    • LOCATION: 鍵の Google Cloud ロケーション。たとえば、globalus-central1 です。

    • PROJECT_NUMBER: プロジェクトの名前。

    出力は次のようになります。

     - members:
     - serviceAccount:service-123456789012@container-engine-robot.iam.gserviceaccount.com
     role: roles/cloudkms.cryptoKeyEncrypterDecrypter
     ```
    
  5. Backup for GKE オペレーションを再試行します。オペレーションが引き続き失敗する場合は、Cloud カスタマーケアにお問い合わせください。

次のステップ