Aktifkan Kunci Enkripsi yang Dikelola Pelanggan untuk Secret Manager

Topik ini membahas dukungan untuk Kunci Enkripsi yang Dikelola Pelanggan (CMEK) di Secret Manager.

Ringkasan

Secret Manager menyediakan alat untuk menyimpan, mengelola, dan mengakses data sensitif di aplikasi Anda.

Secara default, secret yang disimpan di Secret Manager dienkripsi dengan enkripsi default Google. Dengan enkripsi default Google, payload rahasia dienkripsi oleh kunci yang dikelola oleh Google sebelum ditulis ke penyimpanan persisten, tanpa memerlukan konfigurasi. Enkripsi default Google adalah pilihan terbaik untuk banyak organisasi.

Bagi organisasi yang menginginkan kontrol lebih besar, dukungan CMEK untuk Secret Manager memungkinkan Anda mengonfigurasi kunci Cloud KMS yang melindungi data dalam penyimpanan di Secret Manager.

Cara kerja CMEK di Secret Manager

Sebelum menulis versi secret ke penyimpanan persisten di lokasi tertentu, Secret Manager mengenkripsi data dengan kunci enkripsi data unik (DEK). DEK ini kemudian dienkripsi dengan kunci khusus replika, yang disebut kunci enkripsi kunci (KEK) yang dimiliki oleh layanan Secret Manager.

Jika menggunakan CMEK untuk Secret Manager, KEK disebut sebagai kunci CMEK dan merupakan kunci simetris yang Anda kelola dalam Cloud KMS. Kunci CMEK harus berada di lokasi Google Cloud yang sama dengan replika versi rahasia yang dienkripsinya. Anda juga dapat menggunakan kunci Cloud EKM dalam kebijakan CMEK untuk enkripsi dan dekripsi.

Panduan ini membahas cara mengonfigurasi Secret Manager untuk menggunakan CMEK. Untuk mengetahui informasi selengkapnya tentang CMEK secara umum, termasuk waktu dan alasan mengaktifkannya, lihat dokumentasi Cloud Key Management Service.

Batasan

CMEK hanya tersedia di Secret Manager v1 API dan gCloud.

Sebelum memulai

Anda dapat memilih untuk menyimpan semua resource di project yang sama atau menyimpan secret dan kunci dalam project terpisah. Baca Pemisahan tugas Cloud KMS untuk lebih memahami keputusan ini.

Selesaikan prasyarat berikut untuk menyiapkan Secret Manager dan Cloud KMS:

  • Secret Manager:

    • Buat atau gunakan project yang sudah ada untuk menyimpan resource Secret Manager Anda.
    • Jika perlu, selesaikan langkah-langkah di bagian Mengonfigurasi Secret Manager pada panduan memulai Secret Manager.
  • Cloud KMS:

    • Buat atau gunakan project yang ada untuk menyimpan resource Cloud KMS Anda.
    • Jika perlu, aktifkan Cloud KMS API.

Tetapkan variabel berikut ke project ID dari project Secret Manager dan Cloud KMS Anda.

This is an editable variable. Set it to your Secret Manager project ID and the
value will be used in all commands on this page.
SM_PROJECT_ID

This is an editable variable. Set it to your Cloud KMS project ID and the value
will be used in all commands on this page.
KMS_PROJECT_ID

Autentikasi ke Google Cloud:

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud auth login

Membuat identitas agen layanan

Anda perlu membuat identitas agen layanan untuk setiap project yang memerlukan kunci enkripsi yang dikelola pelanggan.

Untuk membuat identitas layanan dengan Google Cloud CLI, jalankan perintah berikut:

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud beta services identity create \
    --service "secretmanager.googleapis.com" \
    --project "SM_PROJECT_ID"

Yang akan menampilkan nama identitas layanan dalam format berikut:

service-PROJECT_NUMBER@gcp-sa-secretmanager.iam.gserviceaccount.com

Simpan nama identitas layanan:

The following variable is editable. Click on it to update the value, and it will
be reflected throughout this documentation page.

SM_SERVICE_IDENTITY

Anda akan memberikan akses identitas layanan ini ke kunci Cloud KMS CMEK yang digunakan untuk mengenkripsi dan mendekripsi rahasia Anda.

CMEK dengan replikasi otomatis

Bagian ini membahas secret yang dikonfigurasi melalui kebijakan replikasi otomatis.

Untuk secret yang menggunakan kebijakan replikasi otomatis, kunci CMEK Anda harus berada di multi-region Cloud KMS global. Jika menggunakan kunci Cloud EKM, Anda tidak dapat mengonfigurasi secret untuk menggunakan replikasi otomatis karena kunci Cloud EKM tidak tersedia di region global. Untuk mempelajari lebih lanjut cara menggunakan kunci Cloud EKM, lihat Menambahkan kunci Cloud EKM ke kebijakan CMEK.

Buat kunci Cloud KMS simetris di region Cloud KMS global, atau gunakan kunci yang sudah ada. Contoh ini membuat key ring baru bernama secret-manager-cmek, lalu membuat kunci baru bernama my-cmek-key di dalamnya.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "global"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Berikan identitas layanan untuk akses Secret Manager guna mengenkripsi dan mendekripsi menggunakan kunci CMEK. Perintah ini memberikan peran Cloud KMS Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter) pada kunci Cloud KMS my-cmek-key ke identitas layanan.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Buat secret dengan replikasi otomatis. Nama resource kunci CMEK disimpan sebagai metadata pada rahasia.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud secrets create "SECRET_ID" \
    --replication-policy "automatic" \
    --kms-key-name "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key" \
    --project "SM_PROJECT_ID"

API

Contoh ini menggunakan curl untuk mendemonstrasikan penggunaan API. Anda dapat membuat token akses dengan gcloud auth print-access-token. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

Tetapkan nilai replication.automatic.customerManagedEncryption.kmsKeyName ke nama resource untuk kunci CMEK.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets?secretId=SECRET_ID" \
    --request "POST" \
    --header "Content-Type: application/json" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --data-binary @- <<EOF
{
  "replication":{
    "automatic":{
      "customerManagedEncryption":{
        "kmsKeyName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
      }
    }
  }
}
EOF

Sekarang, setiap kali versi secret dibuat dalam rahasia tersebut, payload versi secret secara otomatis dienkripsi menggunakan kunci sebelum ditulis ke penyimpanan persisten, selama identitas layanan memiliki akses ke kunci CMEK. Jika identitas layanan kehilangan akses atau jika kunci menjadi tidak tersedia, upaya untuk membuat versi rahasia baru atau mengakses versi yang sudah ada akan menampilkan error.

Tambahkan versi secret baru. Perhatikan bahwa Anda tidak menentukan nama resource kunci Cloud KMS karena kunci tersebut dibaca dari metadata rahasia.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

echo -n "SECRET_DATA" | gcloud secrets versions add "SECRET_ID" \
    --project "SM_PROJECT_ID" \
    --data-file -

Versi rahasia dibuat, meskipun jika pemanggil tidak memiliki akses langsung untuk menggunakan kunci CMEK. Identitas layanan untuk Secret Manager, bukan pemanggil, bertanggung jawab untuk mengenkripsi dan mendekripsi secret saat membaca atau menulisnya.

Demikian pula, Anda tidak memerlukan akses langsung ke kunci CMEK untuk mengakses secret. Identitas layanan mengakses kunci dan mengenkripsi atau mendekripsi rahasia atas nama Anda.

Akses versi secret yang baru saja Anda buat:

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud secrets versions access "latest" \
    --project "SM_PROJECT_ID" \
    --secret "SECRET_ID"

Memperbarui konfigurasi CMEK

Buat kunci KMS simetris baru di multi-region Cloud KMS global.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Berikan identitas layanan untuk akses Secret Manager guna mengenkripsi dan mendekripsi menggunakan kunci CMEK baru. Perintah ini memberikan peran Cloud KMS Encrypter / Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter) pada kunci Cloud KMS my-other-key ke identitas layanan.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "global" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Ubah konfigurasi CMEK suatu secret dengan memperbarui replikasi secret tersebut menggunakan nama resource kunci Cloud KMS yang baru.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud secrets replication update "SECRET_ID" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --project "SM_PROJECT_ID"

API

Contoh ini menggunakan curl untuk mendemonstrasikan penggunaan API. Anda dapat membuat token akses dengan gcloud auth print-access-token. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/SECRET_ID?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication": {
    "automatic":{
      "customerManagedEncryption":{
        "kmsKeyName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
      }
    }
  }
}
EOF

CMEK dengan replikasi yang dikelola pengguna

Bagian ini membahas secret yang dikonfigurasi dengan kebijakan replikasi yang dikelola pengguna. Dengan kebijakan replikasi yang dikelola pengguna, Anda mengontrol lokasi Google Cloud tempat rahasia disimpan. Secret selalu dapat diakses dari setiap lokasi Google Cloud.

Secret dengan kebijakan replikasi yang dikelola pengguna harus menggunakan kunci Cloud KMS yang dipetakan secara persis ke lokasi tempat versi secret disimpan. Contoh dalam panduan ini menyimpan secret di dua lokasi terpisah: us-east1, us-central1. Permintaan untuk mengakses rahasia dirutekan ke salah satu lokasi ini.

Di kedua region tersebut, buat key ring dan kunci Cloud KMS dengan tujuan enkripsi, atau gunakan kunci yang sudah ada. Contoh ini membuat key ring baru yang disebut "secret-manager-cmek", lalu membuat kunci yang disebut "my-cmek-key" di setiap region.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"
gcloud kms keyrings create "secret-manager-cmek" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1"
gcloud kms keys create "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Berikan identitas layanan untuk izin Secret Manager guna mengenkripsi dan mendekripsi menggunakan kunci CMEK dengan memberikan peran Cloud KMS Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter) untuk setiap kunci CMEK satu per satu atau untuk semua kunci dalam project.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
gcloud kms keys add-iam-policy-binding "my-cmek-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Membuat secret yang didukung CMEK dengan replikasi yang dikelola pengguna. Nama resource kunci CMEK disimpan sebagai metadata di rahasia.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

cat <<EOF > ./replication-policy.json
{
  "userManaged":{
    "replicas":[
      {
        "location":"us-east1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
        }
      },
      {
        "location":"us-central1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
        }
      }
    ]
  }
}
EOF
gcloud secrets create "my-ummr-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

API

Contoh ini menggunakan curl untuk mendemonstrasikan penggunaan API. Anda dapat membuat token akses dengan gcloud auth print-access-token. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

Setel nilai replication.userManaged.replicas.customerManagedEncryption.kmsKeyName ke nama resource untuk kunci CMEK.

curl "https://secretmanager.googleapis.com/v1/projects/SM_PROJECT_ID/secrets?secretId=my-ummr-secret" \
--request "POST" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--data-binary @- <<EOF
{
  "replication":{
    "userManaged":{
      "replicas":[
        {
          "location":"us-east1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
          }
        },
        {
          "location":"us-central1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
          }
        }
      ]
    }
  }
}
EOF

Sekarang, setiap kali versi secret dibuat dalam rahasia tersebut, payload versi secret secara otomatis dienkripsi menggunakan kunci sebelum ditulis ke penyimpanan persisten, selama identitas layanan memiliki akses ke kunci CMEK. Jika identitas layanan kehilangan akses atau jika kunci menjadi tidak tersedia, upaya untuk membuat versi rahasia baru atau mengakses versi yang sudah ada akan menampilkan error.

Tambahkan versi secret baru. Perhatikan bahwa Anda tidak menentukan nama resource kunci Cloud KMS karena kunci tersebut dibaca dari metadata rahasia.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

echo -n "SECRET_DATA" | gcloud secrets versions add "my-ummr-secret" \
    --project "SM_PROJECT_ID" \
    --data-file -

Versi rahasia dibuat, meskipun jika pemanggil tidak memiliki akses langsung untuk menggunakan kunci CMEK. Identitas layanan untuk Secret Manager, bukan pemanggil, bertanggung jawab untuk mengenkripsi dan mendekripsi secret saat membaca atau menulisnya.

Demikian pula, Anda tidak memerlukan akses langsung ke kunci CMEK untuk mengakses secret. Identitas layanan mengakses kunci dan mengenkripsi atau mendekripsi rahasia atas nama Anda.

Mengakses versi secret yang baru saja Anda buat.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud secrets versions access "latest" \
    --project "SM_PROJECT_ID" \
    --secret "my-ummr-secret"

Memperbarui konfigurasi CMEK

Buat dua kunci KMS simetris baru di region yang sama dengan secret.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"
gcloud kms keys create "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --purpose "encryption"

Berikan identitas layanan untuk akses Secret Manager guna mengenkripsi dan mendekripsi menggunakan kunci CMEK baru. Perintah ini memberikan peran Cloud KMS Encrypter / Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter) pada kunci Cloud KMS my-other-key ke identitas layanan.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-east1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
gcloud kms keys add-iam-policy-binding "my-other-key" \
    --project "KMS_PROJECT_ID" \
    --location "us-central1" \
    --keyring "secret-manager-cmek" \
    --member "serviceAccount:SM_SERVICE_IDENTITY" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Ubah konfigurasi CMEK suatu secret dengan memperbarui replikasi secret tersebut menggunakan nama resource kunci Cloud KMS yang baru.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud secrets replication update "my-ummr-secret" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --location us-east1 \
    --project "SM_PROJECT_ID"
gcloud secrets replication update "my-ummr-secret" \
    --set-kms-key "projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key" \
    --location us-central1 \
    --project "SM_PROJECT_ID"

Untuk memperbarui beberapa kunci secara rahasia secara bersamaan, Anda dapat memperoleh dan menetapkan kebijakan replikasi melalui file.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud secrets replication get "my-ummr-secret" \
    --project "SM_PROJECT_ID" \
    --format=json > ./replication-policy.json

Update file untuk mencerminkan konfigurasi CMEK yang diinginkan di editor pilihan Anda. Kemudian, tetapkan kebijakan baru:

gcloud secrets replication set "my-ummr-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

API

Contoh ini menggunakan curl untuk mendemonstrasikan penggunaan API. Anda dapat membuat token akses dengan gcloud auth print-access-token. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/my-ummr-secret?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication":{
    "userManaged":{
      "replicas":[
        {
          "location":"us-east1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-east1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
          }
        },
        {
          "location":"us-central1",
          "customerManagedEncryption":{
            "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek/cryptoKeys/my-other-key"
          }
        }]
      }
    }
  }
EOF

Lihat konfigurasi CMEK versi secret

Untuk memeriksa metadata versi secret, termasuk apakah versi secret tersebut mendukung CMEK dan nama resource versi kunci CMEK, lihat metadatanya.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud secrets versions describe "latest" \
    --secret "SECRET_ID" \
    --project "SM_PROJECT_ID"

API

Contoh ini menggunakan curl untuk mendemonstrasikan penggunaan API. Anda dapat membuat token akses dengan gcloud auth print-access-token. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/SM_PROJECT_ID/secrets/SECRET_ID/versions/latest" \
    --request "GET" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json"

Tindakan ini akan menampilkan nama lengkap resource Cloud KMS dari versi kunci yang digunakan untuk mengenkripsi versi rahasia.

{
  "name": "projects/PROJECT_NUMBER/secrets/SECRET_ID/versions/1",
  "createTime": "2021-07-...",
  "state": "ENABLED",
  "replicationStatus": {
    "automatic": {
      "customerManagedEncryption": {
        "kmsKeyVersionName": "projects/KMS_PROJECT_ID/locations/global/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key/cryptoKeyVersions/1"
      }
    }
  }
}

Menambahkan kunci Cloud EKM ke kebijakan CMEK

Bagian ini membahas cara menambahkan kunci Cloud EKM ke kebijakan CMEK. Langkah-langkah ini memungkinkan kunci Cloud EKM digunakan untuk mengenkripsi atau mendekripsi secret.

Karena Cloud EKM saat ini tidak mendukung multi-region global, kunci Cloud EKM hanya dapat digunakan dengan secret yang dikonfigurasi untuk replikasi yang dikelola pengguna.

Buat kunci simetris di region Cloud KMS us-central1 (atau region apa pun selain global). Contoh ini akan membuat key ring baru bernama secret-manager-cmek-ekm, lalu membuat kunci baru yang disebut my-ekm-key di key ring tersebut.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

Buat key ring baru:

gcloud kms keyrings create "secret-manager-cmek-ekm" \
  --project "KMS_PROJECT_ID" \
  --location "us-central1"

Buat kunci di key ring tersebut:

gcloud kms keys create "my-ekm-key" \
  --keyring "secret-manager-cmek-ekm" \
  --location "us-central1" \
  --purpose "encryption" \
  --protection-level "external" \
  --skip-initial-version-creation \
  --default-algorithm "external-symmetric-encryption"

Selanjutnya, buat versi baru my-ekm-key menggunakan URI eksternal kunci. Untuk informasi selengkapnya tentang URI eksternal untuk kunci Cloud EKM, lihat Membuat kunci eksternal.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud kms keys versions create \
  --key "my-ekm-key" \
  --keyring "secret-manager-cmek-ekm" \
  --location "us-central1" \
  --external-key-uri EXTERNAL_KEY_URI \
  --primary

Berikan identitas layanan agar Secret Manager dapat mengakses untuk mengenkripsi dan mendekripsi menggunakan kunci eksternal. Perintah ini memberikan peran Cloud KMS Encrypter / Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter) di my-ekm-key ke identitas layanan.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud kms keys add-iam-policy-binding "my-ekm-key" \
  --project "KMS_PROJECT_ID" \
  --location "us-central1" \
  --keyring "secret-manager-cmek-ekm" \
  --member "serviceAccount:SM_SERVICE_IDENTITY" \
  --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Buat rahasia dengan CMEK aktif yang menggunakan kunci Cloud EKM.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

cat <<EOF > ./replication-policy.json
{
  "userManaged":{
    "replicas":[
      {
        "location":"us-central1",
        "customerManagedEncryption":{
          "kmsKeyName":"projects/KMS_PROJECT_ID/locations/us-central1/keyRings/secret-manager-cmek-ekm/cryptoKeys/my-ekm-key"
        }
      }
    ]
  }
}
EOF
gcloud secrets create "my-ekm-secret" \
    --replication-policy-file ./replication-policy.json \
    --project "SM_PROJECT_ID"

Sekarang, setiap kali versi secret dibuat di my-ekm-secret, payload versi secret secara otomatis dienkripsi menggunakan kunci Cloud EKM sebelum ditulis ke penyimpanan persisten, selama identitas layanan memiliki akses ke kunci tersebut. Jika identitas layanan kehilangan akses atau jika kunci menjadi tidak tersedia, upaya untuk membuat versi rahasia baru atau mengakses versi yang sudah ada akan menampilkan error.

Tambahkan versi secret baru. Perhatikan bahwa nama resource kunci dibaca dari metadata secret.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

echo -n "SECRET_DATA" | gcloud secrets versions add "my-ekm-secret" \
    --project "SM_PROJECT_ID" \
    --data-file -

Versi rahasia dibuat, meskipun pemanggil tidak memiliki akses langsung untuk menggunakan kunci tersebut. Identitas layanan untuk Secret Manager, bukan pemanggil, bertanggung jawab untuk mengenkripsi dan mendekripsi secret saat membaca atau menulisnya.

Mengakses versi secret yang baru saja Anda buat. Di sinilah identitas layanan mengakses kunci tersebut dan mengenkripsi atau mendekripsi rahasia atas nama Anda.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud secrets versions access "latest" \
  --project "SM_PROJECT_ID" \
  --secret "my-ekm-secret"

Nonaktifkan CMEK

Menghapus konfigurasi CMEK dari secret dengan memperbarui kebijakan replikasi.

gcloud

Untuk menggunakan Secret Manager di command line, Instal atau upgrade Google Cloud CLI ke versi 378.0.0 atau yang lebih baru. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

gcloud secrets replication update "SECRET_ID" --remove-cmek \
    --project "SM_PROJECT_ID"

API

Contoh ini menggunakan curl untuk mendemonstrasikan penggunaan API. Anda dapat membuat token akses dengan gcloud auth print-access-token. Di Compute Engine atau GKE, Anda harus melakukan autentikasi dengan cakupan cloud-platform.

curl "https://secretmanager.googleapis.com/v1/projects/${SM_PROJECT_ID}/secrets/SECRET_ID?updateMask=replication" \
    --request "PATCH" \
    --header "Authorization: Bearer ACCESS_TOKEN" \
    --header "Content-Type: application/json" \
    --data-binary @- <<EOF
{
  "replication":{
    "automatic":{}
  }
}
EOF

Langkah selanjutnya

  • Pelajari CMEK lebih lanjut.