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: PersistentVolumeClaim のバックアップに失敗しました - 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: PersistentVolumeClaim のバックアップに失敗しました - 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 カスタマーケアにお問い合わせください。

エラー 100020101: PersistentVolumeClaim のバックアップに失敗しました - サポートされていない PersistentVolume タイプにバインドされた PersistentVolumeClaim

100020101 エラーは、サポートされていない PersistentVolume タイプに PersistentVolumeClaim がバインドされているため、PersistentVolumeClaim のバックアップの試行が失敗した場合に発生します。このエラーにより、次のエラー メッセージが表示されます: PersistentVolumeClaims are bound to PersistentVolumes of unsupported types and cannot be backed up.

このエラーは、Backup for GKE オペレーションで、Backup for GKE によるデータ バックアップでサポートされていないボリューム タイプを使用する PersistentVolume にバインドされている PersistentVolumeClaim が検出された場合に発生します。Backup for GKE は、主に Persistent Disk ボリュームからのデータのバックアップをサポートしています。PersistentVolumeClaim が Persistent Disk ではない PersistentVolume にバインドされている場合、PersistentVolumeClaim のデータのバックアップ オペレーションは失敗します。

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

  1. kubectl get pvc コマンドを実行して、すべての PersistentVolumeClaims と、それらにバインドされている PersistentVolumes を一覧表示します。このリストを確認して、サポートされていないボリューム タイプでバックアップされている PersistentVolumes を特定します。

    kubectl get pvc --all-namespaces -o wide
    
  2. kubectl describe pv コマンドを実行して、Backup for GKE でサポートされていないボリューム タイプでバックアップされた PersistentVolume のボリューム タイプを特定します。

    kubectl describe pv PERSISTENT_VOLUME_NAME
    

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

    PERSISTENT_VOLUME_NAME: 前の手順の出力で列 VOLUME として一覧表示されているサポートされていないボリューム タイプの PersistentVolume の名前。

    出力で、Source フィールドと Driver フィールドを使用して、ボリューム プロビジョナーの詳細を取得します。

    • サポートされている Persistent Disk の場合: 出力は Source.Driver: pd.csi.storage.gke.io または Source.Type:GCEPersistentDisk のようになります。

    • エラーの原因となっているサポートされていないタイプの場合: 出力は Persistent Disk ドライバ以外(Source.Driver:filestore.csi.storage.gke.io など)になります。

  3. 次のいずれかの方法でエラーを解決します。

    • Persistent Disk ボリュームに移行する: この方法は、データのフル バックアップにおすすめします。実際のボリューム データをバックアップする必要がある場合は、Persistent Disk を使用する必要があります。これには、サポートされていないボリューム タイプから新しい Persistent Disk CSI ボリュームへのデータの移行が含まれます。Persistent Disk ボリュームの移行に関するサポートが必要な場合は、Cloud カスタマーケアにお問い合わせください。

    • Backup for GKE で制約なしモードを有効にする: サポートされていないボリュームでデータ バックアップが不要な場合は、この方法をおすすめします。データの移行が実現不可能または不要な場合(ボリュームが外部サービスによってバックアップされ、復元オペレーション中に再アタッチする予定の場合など)、Backup for GKE バックアップ プランを構成して、バックアップが制約なしモードで続行されるようにできます。制約なしモードを有効にする方法については、バックアップ プランで制約なしモードを有効にするをご覧ください。

  4. Backup for GKE オペレーションを再試行します。エラーの解決方法に応じて、Backup for GKE オペレーションは次のように動作します。

    • Persistent Disk ボリュームに移行した場合、データを含むボリュームに対するバックアップが成功します。

    • 制約なしモードを有効にしている場合、バックアップ オペレーションが成功しますが、サポートされていないボリュームのデータはバックアップされません。

オペレーションが引き続き失敗する場合は、Cloud カスタマーケアにお問い合わせください。

エラー 100020104: PersistentVolumeClaim のバックアップに失敗しました - PersistentVolumeClaim が PersistentVolume にバインドされていません

100020104 エラーは、PersistentVolumeClaimPersistentVolume にバインドされていないことが原因で、PersistentVolumeClaim のバックアップの試行が失敗した場合に発生します。このエラーにより、次のエラー メッセージが表示されます: Failed to backup PVC - PVC Not Bound to a Persistent Volume

このエラーは、Backup for GKE オペレーションが PersistentVolume に正常にバインドされていない PersistentVolumeClaim のバックアップを試みた場合に発生します。PersistentVolumeClaim を消費ワークロード(Pod など)で使用し、Backup for GKE でバックアップできるようにするには、PersistentVolume にバインドする必要があります。PersistentVolumeClaimPending 状態のままの場合、適切な PersistentVolume が利用できないか、プロビジョニングまたはバインドできないことを示します。これにより、バックアップ オペレーションが失敗します。PersistentVolumeClaim がバインドされない一般的な理由は、関連付けられた StorageClassWaitForFirstConsumer バインディング モードを使用しているにもかかわらず、Pod や他のワークロードが PersistentVolumeClaim を消費しようとしていない場合です。

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

  1. クラスタ内のすべての PersistentVolumeClaims のステータスを確認し、バインドされていない PersistentVolumeClaim を特定するには、kubectl get pvc コマンドを実行します。

    kubectl get pvc --all-namespaces | grep `Pending`
    
  2. PersistentVolume にバインドされていない PersistentVolumeClaim を特定したら、kubectl describe pvc コマンドを実行して、バインドされていない PersistentVolumeClaim に関する情報を取得します。

    kubectl describe pvc PVC_NAME -n NAMESPACE_NAME
    

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

    • PVC_NAME: バックアップに失敗した PersistentVolumeClaim の名前。

    • NAMESPACE_NAME: PersistentVolumeClaim が存在する名前空間の名前。

    説明が表示されたら、Status フィールドと Events フィールドを使用して、PersistentVolumeClaimPersistentVolume にバインドされているかどうかを判断します。PersistentVolumeClaimPersistentVolume にバインドされていない理由を特定できない場合や、特定された問題を解決できない場合は、バックアップ プランで制約なしモードを有効にできます。制約なしモードを有効にする方法については、バックアップ プランで制約なしモードを有効にするをご覧ください。

次のステップ