Memecahkan masalah error setelan default dan CMEK

Dokumen ini menjelaskan cara menemukan dan memitigasi error konfigurasi CMEK yang umum, serta cara mengidentifikasi error yang terjadi saat menetapkan lokasi resource default.

Memecahkan masalah saat menetapkan lokasi resource default

Anda mencoba memperbarui lokasi penyimpanan default untuk organisasi atau folder, tetapi perintah gagal dengan error yang mirip dengan berikut:

ERROR: (gcloud.logging.settings.update) INVALID_ARGUMENT: The KMS key location must match the storage location. Received KMS key location: us-central1, storage location: us-west1
- '@type': type.googleapis.com/google.rpc.DebugInfo
  detail: '[ORIGINAL ERROR] generic::invalid_argument: The KMS key location must match
    the storage location. Received KMS key location: us-central1, storage location:
    us-west1 [google.rpc.error_details_ext] { message: "The KMS key location must
    match the storage location. Received KMS key location: us-central1, storage location:
    us-west1" }'

Untuk mengatasi error ini, tetapkan lokasi penyimpanan default untuk organisasi atau folder agar sesuai dengan lokasi kunci Cloud Key Management Service untuk organisasi atau folder.

Memecahkan masalah Kontrol Layanan VPC dan berbagi yang dibatasi domain

Anda telah mengonfigurasi CMEK sebagai setelan resource default untuk organisasi, untuk folder, atau membuat bucket log dengan CMEK yang diaktifkan. Anda kemudian mengonfigurasi Kontrol Layanan VPC. Setelah mengonfigurasi Kontrol Layanan VPC, Anda dapat membatasi akses ke Cloud Key Management Service di Kontrol Layanan VPC atau mengaktifkan berbagi yang dibatasi domain.

Setidaknya salah satu dari hal berikut terjadi:

  • Anda menerima notifikasi dari Cloud Logging tentang masalah akses CMEK.

  • Anda melihat bahwa CMEK tidak diaktifkan untuk bucket log _Default dan _Required saat membuat project Google Cloud baru di organisasi atau dalam folder.

  • Anda akan menerima error saat membaca dari bucket log dengan CMEK diaktifkan. Error yang Anda lihat mirip dengan error berikut:

    ERROR: (gcloud.logging.read) FAILED_PRECONDITION: service account `cmek-PROJECT_IDgcp-sa-logging.iam.gserviceaccount.com` must have both encrypt and decrypt access to the CMEK KMS key `projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY`
    
  • Anda akan menerima error saat membuat atau memperbarui bucket log dengan CMEK diaktifkan. Error yang Anda lihat mirip dengan error berikut:

    ERROR: (gcloud.logging.buckets.create) service account `cmek-PROJECT_ID@gcp-sa-logging.iam.gserviceaccount.com` must have both encrypt and decrypt access to the CMEK KMS key `projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY`
    - '@type': type.googleapis.com/google.rpc.DebugInfo
      detail: '[ORIGINAL ERROR] generic::permission_denied: Request is prohibited by
      organization's policy. vpcServiceControlsUniqueIdentifier: <var>ERRORID</var>;'
    

Untuk mengetahui apakah masalah ini disebabkan oleh konfigurasi Kontrol Layanan VPC, lakukan langkah berikut:

  1. Identifikasi setelan Cloud Logging untuk resource yang berisi konfigurasi CMEK. Resource dapat berupa project, folder, atau organisasi. Jika Anda membuat bucket log dengan CMEK yang diaktifkan, pilih resource PROJECT.

    PROYEK

    gcloud logging settings describe --project=PROJECT_ID
    

    Sebelum menjalankan perintah, ganti PROJECT_ID dengan project ID yang berisi bucket log.

    FOLDER

    gcloud logging settings describe --folder=FOLDER_ID
    

    Sebelum menjalankan perintah, ganti FOLDER_ID dengan ID folder.

    ORGANISASI

    gcloud logging settings describe --organization=ORGANIZATION_ID
    

    Sebelum menjalankan perintah, ganti ORGANIZATION_ID dengan ID organisasi.

    Perintah sebelumnya menampilkan informasi yang mirip dengan berikut ini:

    kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
    loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
    

    Untuk organisasi dan folder, kolom berikut juga ditampilkan:

    kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
    

    Nilai kolom kmsKeyName mencakup project Google Cloud yang menyimpan kunci.

  2. Tentukan apakah Anda perlu memigrasikan akun layanan:

    • Jika nilai kolom kmsServiceAccountId memiliki awalan service-, Anda tidak perlu memigrasikan akun layanan. Untuk mengetahui informasi tentang error konfigurasi CMEK, lihat bagian Memecahkan masalah CMEK dalam dokumen ini.

    • Jika nilai kmsServiceAccountId memiliki awalan cmek-, lanjutkan ke langkah berikutnya.

  3. Konfirmasi bahwa Anda harus memigrasikan akun layanan dengan menonaktifkan berbagi yang dibatasi domain atau dengan menghapus Cloud Key Management Service dari daftar layanan terbatas Kontrol Layanan VPC.

    Jika error telah teratasi, Anda harus memigrasikan resource yang terpengaruh ke akun layanan yang baru untuk mengatasi kegagalan tersebut. Untuk mengetahui informasi tentang langkah-langkah ini, lihat bagian berikutnya.

Memigrasikan akun layanan CMEK

Proses berikut menjelaskan cara mengubah akun layanan yang digunakan Cloud Logging untuk mengakses kunci Cloud Key Management Service yang dikonfigurasi. Perubahan pada akun layanan ini menyelesaikan masalah umum terkait Kontrol Layanan VPC dan aktivitas berbagi yang dibatasi domain.

  1. Identifikasi loggingServiceAccountId untuk resource Anda. Resource dapat berupa project, folder, atau organisasi. Jika Anda membuat bucket log dengan CMEK yang diaktifkan, pilih resource PROJECT.

    PROYEK

    gcloud logging settings describe --project=PROJECT_ID
    

    Sebelum menjalankan perintah, ganti PROJECT_ID dengan project ID yang berisi bucket log.

    FOLDER

    gcloud logging settings describe --folder=FOLDER_ID
    

    Sebelum menjalankan perintah, ganti FOLDER_ID dengan ID folder.

    ORGANISASI

    gcloud logging settings describe --organization=ORGANIZATION_ID
    

    Sebelum menjalankan perintah, ganti ORGANIZATION_ID dengan ID organisasi.

    Perintah sebelumnya menampilkan informasi yang mirip dengan berikut ini:

    kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
    loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
    

    Untuk organisasi dan folder, kolom berikut juga ditampilkan:

    kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
    

    Nilai kolom kmsKeyName mencakup project Google Cloud yang menyimpan kunci.

  2. Jika Anda mengonfigurasi setelan resource default untuk organisasi atau untuk folder, lakukan hal berikut:

    1. Di KMS_PROJECT_ID, berikan peran Cloud Key Management Service CryptoKey Encrypter/Decrypter ke akun layanan yang diidentifikasi oleh kolom loggingServiceAccountId.

    2. Jalankan perintah curl berikut untuk mengubah akun layanan Cloud Key Management Service yang digunakan oleh resource.

      PROYEK

      Tidak berlaku.

      FOLDER

      curl -X PATCH -H "Authorization: Bearer \"$(gcloud auth print-access-token)\"" -H "Content-Type: application/json; charset=utf-8" -d '{"kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"}' https://logging.googleapis.com/v2/folders/FOLDER_ID/settings?updateMask=kmsServiceAccountId
      

      Sebelum menjalankan perintah, lakukan hal berikut:

      • Ganti FOLDER_ID dengan ID folder.
      • Ganti SERVICE_ACCT_NAME dengan loggingServiceAccountId yang diidentifikasi sebelumnya.

      ORGANISASI

      curl -X PATCH -H "Authorization: Bearer \"$(gcloud auth print-access-token)\"" -H "Content-Type: application/json; charset=utf-8" -d '{"kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"}' https://logging.googleapis.com/v2/organizations/ORGANIZATION_ID/settings?updateMask=kmsServiceAccountId
      

      Sebelum menjalankan perintah, lakukan hal berikut:

      • Ganti ORGANIZATION_ID dengan ID organisasi.
      • Ganti SERVICE_ACCT_NAME dengan loggingServiceAccountId yang diidentifikasi sebelumnya.

      Hasil dari perintah sebelumnya mirip dengan berikut ini;

      {
        "name": ".../settings",
        "kmsKeyName": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY",
        "kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com",
        "storageLocation": "...",
        "loggingServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"
      }
      
  3. Untuk setiap project atau folder Google Cloud yang berisi bucket log yang diaktifkan dengan CMEK, lakukan hal berikut:

    1. Dalam project atau folder, untuk setiap bucket log yang diaktifkan dengan CMEK, lakukan tindakan berikut:

      1. Identifikasi project Google Cloud yang menyimpan kunci Cloud Key Management Service:

        PROYEK

        gcloud logging buckets describe BUCKET_ID --location=LOCATION --project=PROJECT_ID
        

        Sebelum menjalankan perintah, lakukan hal berikut:

        • Ganti PROJECT_ID dengan project ID yang berisi bucket log.
        • Ganti LOCATION dengan lokasi bucket log.

        FOLDER

        gcloud logging buckets describe BUCKET_ID --location=LOCATION --folder=FOLDER_ID
        

        Sebelum menjalankan perintah, lakukan hal berikut:

        • Ganti FOLDER_ID dengan ID folder.
        • Ganti LOCATION dengan lokasi bucket log.

        Hasil dari perintah sebelumnya mirip dengan berikut ini:

        cmekSettings:
          kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
          kmsKeyVersionName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY/cryptoKeyVersions/1
          serviceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
        createTime: '2022-10-31T12:00:00.0000000Z'
        lifecycleState: ACTIVE
        name: projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_ID
        retentionDays: 30
        createTime: '2022-10-31T13:00:00.0000000Z'
        
      2. Buka project Google Cloud yang memiliki kunci Cloud Key Management Service, KMS_PROJECT_ID, dan berikan peran Cloud Key Management Service CryptoKey Encrypter/Decrypter ke akun layanan yang diidentifikasi oleh kolom loggingServiceAccountId.

    2. Untuk project, jalankan perintah curl berikut, yang mengubah akun layanan Cloud Key Management Service:

      PROYEK

      curl -X PATCH -H "Authorization: Bearer \"$(gcloud auth print-access-token)\"" -H "Content-Type: application/json; charset=utf-8" -d '{"kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"}' https://logging.googleapis.com/v2/projects/PROJECT_ID/settings?updateMask=kmsServiceAccountId
      

      Sebelum menjalankan perintah, lakukan hal berikut:

      • Ganti PROJECT_ID dengan project ID yang berisi bucket log.
      • Ganti SERVICE_ACCT_NAME dengan loggingServiceAccountId yang diidentifikasi sebelumnya.

      FOLDER

      Tidak perlu tindakan apa pun karena Anda mengubah akun layanan Cloud Key Management Service yang digunakan oleh folder di langkah sebelumnya.

      Hasil dari perintah sebelumnya mirip dengan berikut ini;

      {
        "name": ".../settings",
        "kmsServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com",
        "loggingServiceAccountId": "SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com"
      }
      
  4. Untuk setiap bucket log dengan CMEK diaktifkan, lakukan tindakan berikut:

    1. Merotasi kunci Cloud KMS.

    2. Konfirmasi migrasi. Resource induk untuk bucket log menentukan perintah Google Cloud CLI yang akan dijalankan. Induknya dapat berupa project, folder, atau organisasi.

      PROYEK

      gcloud logging buckets describe BUCKET_ID --location=LOCATION --project=PROJECT_ID
      

      Sebelum menjalankan perintah, lakukan hal berikut:

      • Ganti PROJECT_ID dengan project ID yang berisi bucket log.
      • Ganti LOCATION dengan lokasi bucket log.

      FOLDER

      gcloud logging buckets describe BUCKET_ID --location=LOCATION --folder=FOLDER_ID
      

      Sebelum menjalankan perintah, lakukan hal berikut:

      • Ganti FOLDER_ID dengan ID folder.
      • Ganti LOCATION dengan lokasi bucket log.

      Untuk sebuah project, hasil perintah sebelumnya mirip dengan berikut:

      cmekSettings:
        kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
        kmsKeyVersionName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY/cryptoKeyVersions/1
        serviceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
      createTime: '2022-10-31T12:00:00.0000000Z'
      lifecycleState: ACTIVE
      name: projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_ID
      retentionDays: 30
      createTime: '2022-10-31T13:00:00.0000000Z'
      

      Pastikan serviceAccountId cocok dengan loggingServiceAccountId yang diidentifikasi sebelumnya.

  5. Tunggu setidaknya 30 menit sebelum mencabut izin pada akun layanan sebelumnya. Jika Anda mengalami masalah setelah mencabut izin pada akun layanan sebelumnya, pulihkan izin tersebut dan hubungi Dukungan Cloud.

Memecahkan masalah CMEK

Saat Anda mengonfigurasi CMEK, project Google Cloud yang berisi kunci Cloud KMS akan diberi tahu tentang masalah terkait. Misalnya, update akan gagal jika KMS_KEY_NAME tidak valid, jika akun layanan terkait tidak memiliki peran Cloud Key Management Service CryptoKey Encrypter/Decrypter yang diperlukan, atau jika akses ke kunci tersebut dinonaktifkan.

Setelah Anda mengonfigurasi CMEK, setidaknya hal berikut akan terjadi:

  • Anda menerima notifikasi dari Cloud Logging tentang masalah akses CMEK.

  • Anda melihat bahwa CMEK tidak diaktifkan untuk bucket log _Default dan _Required saat membuat project Google Cloud baru di organisasi atau dalam folder.

  • Anda akan menerima error saat membaca dari bucket log dengan CMEK yang diaktifkan, atau jika Anda mencoba membuat atau memperbarui bucket log.

Notifikasi ini memberikan informasi tentang kegagalan dan berisi informasi yang dapat Anda lakukan untuk mengurangi masalah:

Error Rekomendasi
Izin kunci kriptografi ditolak

Akun layanan Logging yang terkait dengan project Google Cloud Anda tidak memiliki izin IAM yang memadai untuk beroperasi pada kunci Cloud KMS yang ditentukan. Ikuti petunjuk dalam error atau lihat dokumen berikut:

Kunci kriptografi dinonaktifkan Kunci Cloud KMS yang ditentukan telah dinonaktifkan. Ikuti petunjuk dalam error tersebut untuk mengaktifkan kembali kunci.
Kunci kriptografi dimusnahkan

Kunci Cloud KMS yang ditentukan telah dihancurkan. Ikuti petunjuknya atau lihat dokumen berikut:

Mengidentifikasi project yang berisi kunci Cloud KMS

Untuk mengidentifikasi ID project Google Cloud yang berisi kunci enkripsi yang digunakan oleh bucket log, folder, atau organisasi, lakukan tindakan berikut:

PROYEK

gcloud logging settings describe --project=PROJECT_ID

Sebelum menjalankan perintah, ganti PROJECT_ID dengan project ID yang berisi bucket log.

FOLDER

gcloud logging settings describe --folder=FOLDER_ID

Sebelum menjalankan perintah, ganti FOLDER_ID dengan ID folder.

ORGANISASI

gcloud logging settings describe --organization=ORGANIZATION_ID

Sebelum menjalankan perintah, ganti ORGANIZATION_ID dengan ID organisasi.

Perintah sebelumnya menampilkan informasi yang mirip dengan berikut ini:

kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com

Untuk organisasi dan folder, kolom berikut juga ditampilkan:

kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY

Nilai kolom kmsKeyName mencakup project Google Cloud yang menyimpan kunci.

Memverifikasi kegunaan utama

Untuk memverifikasi kegunaan kunci, jalankan perintah berikut untuk menampilkan semua kunci:

gcloud kms keys list \
--location=KMS_KEY_LOCATION \
--keyring=KMS_KEY_RING

Perintah ini menampilkan informasi tentang setiap kunci dalam format tabel. Baris pertama dari output adalah daftar nama kolom:

NAME PURPOSE ...

Pastikan kunci Cloud KMS tercantum dalam output perintah sebagai ENABLED, dan tujuan kunci tersebut adalah enkripsi simetris: kolom PURPOSE harus berisi ENCRYPT_DECRYPT dan kolom PRIMARY_STATE harus berisi ENABLED.

Jika perlu, buat kunci baru.

Verifikasi konfigurasi izin

Akun layanan yang terkait dengan setelan CMEK organisasi harus memiliki peran Encrypter/Decrypter Cloud KMS CryptoKey untuk kunci yang dikonfigurasi.

Untuk menampilkan kebijakan IAM kunci, jalankan perintah berikut:

gcloud kms keys get-iam-policy KMS_KEY_NAME

Jika perlu, tambahkan akun layanan yang berisi peran Encrypter/Decrypter Cloud KMS ke kunci tersebut.