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.