Menggunakan kunci enkripsi yang dikelola pelanggan (CMEK)
Halaman ini menjelaskan cara melakukan tugas terkait kunci enkripsi yang dikelola pelanggan (CMEK) untuk Firestore. Untuk mengetahui informasi selengkapnya tentang CMEK secara umum, termasuk waktu dan alasan mengaktifkannya, lihat dokumentasi Cloud KMS.
Menyiapkan kunci CMEK
Sebelum dapat membuat database Firestore yang dilindungi CMEK, Anda harus menyelesaikan langkah-langkah berikut:
- Meminta akses ke fitur CMEK Firestore.
- Buat (atau ambil) agen layanan Firestore.
- Buat kunci CMEK.
- Konfigurasikan setelan IAM untuk kunci tersebut.
Selesaikan langkah-langkah ini untuk setiap project yang akan berisi database Firestore yang dilindungi CMEK. Jika nanti Anda membuat kunci CMEK baru, Anda harus mengonfigurasi setelan IAM untuk kunci tersebut.
Minta akses
Sebelum membuat agen layanan Firestore, minta akses ke fitur CMK dengan mengisi formulir ini.
Membuat agen layanan Firestore
Sebelum membuat kunci CMEK, Anda harus memiliki agen layanan Firestore, yang merupakan jenis akun layanan yang dikelola Google yang digunakan Firestore untuk mengakses kunci.
Jalankan perintah services identity create untuk membuat agen layanan yang digunakan Firestore untuk mengakses kunci CMEK atas nama Anda. Perintah ini akan membuat akun layanan jika belum ada, lalu menampilkannya.
gcloud beta services identity create \ --service=firestore.googleapis.com \ --project FIRESTORE_PROJECT
Ganti FIRESTORE_PROJECT
dengan project yang ingin Anda gunakan untuk database Firestore.
Perintah ini akan menampilkan ID agen layanan, yang diformat seperti alamat email. Catat string email output, karena Anda akan menggunakannya di langkah berikutnya.
Service identity created: service-xxx@gcp-sa-firestore.iam.gserviceaccount.com
Buat kunci
Anda dapat menggunakan kunci yang dibuat langsung di Cloud KMS atau kunci yang dikelola secara eksternal yang Anda sediakan dengan Cloud External Key Manager.
Lokasi kunci Cloud KMS harus sama dengan lokasi database Firestore yang akan digunakan.
Untuk lokasi database regional, gunakan nama lokasi yang sama untuk key ring, kunci, dan database karena nama lokasi memiliki pemetaan satu-ke-satu.
Misalnya, jika Anda ingin membuat database yang dilindungi CMEK di
us-west1
, buat key ring dan kunci dius-west1
.Untuk lokasi database multi-region, gunakan nama lokasi lokasi multi-region KMS:
- Gunakan lokasi multi-region
us
Cloud KMS untuk lokasi multi-regionnam5
Firestore. - Gunakan lokasi multi-region
europe
Cloud KMS untuk lokasi multi-regioneur3
Firestore.
- Gunakan lokasi multi-region
Di project Google Cloud tempat Anda ingin mengelola kunci, selesaikan langkah-langkah berikut:
Buat key ring dan kunci menggunakan salah satu opsi berikut:
- Buat key ring dan kunci langsung di Cloud KMS.
- Gunakan kunci yang dikelola secara eksternal. Buat kunci eksternal, lalu buat kunci Cloud EKM untuk menyediakan kunci tersebut melalui Cloud KMS.
Mengonfigurasi setelan IAM untuk kunci
Konsol
Untuk memberikan peran Cloud KMS ke agen layanan Anda, lakukan hal berikut: Anda juga dapat memberikan izin di tingkat kunci atau ring kunci jika menginginkan tingkat perincian yang lebih rendah.
Di konsol Google Cloud, buka halaman IAM.
Klik Tambahkan.
Masukkan ID berformat email untuk agen layanan Firestore Anda.
Pilih peran Cloud KMS CryptoKey Encrypter/Decrypter.
Klik Simpan.
gcloud
Berikan peran cloudkms.cryptoKeyEncrypterDecrypter
ke agen layanan Anda:
gcloud kms keys add-iam-policy-binding KMS_KEY \
--keyring KMS_KEYRING\
--location KMS_LOCATION \
--member serviceAccount:SERVICE_AGENT_EMAIL \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter \
--project KMS_PROJECT
Ganti kode berikut:
KMS_KEY
dengan nama yang Anda tetapkan ke kunciKMS_KEYRING
dengan key ring KMS yang berisi kunciKMS_LOCATION
dengan region yang berisi key ringSERVICE_AGENT_EMAIL
dengan ID berformat email untuk agen layanan yang Anda beri aksesKMS_PROJECT
dengan project yang berisi kunci
Terminal akan menampilkan respons yang mirip dengan berikut:
Updated IAM policy for key KMS_KEY.
bindings:
- members:
- serviceAccount:
service-{project-number}@gcp-sa-firestore.iam.gserviceaccount.com
role: roles/cloudkms.cryptoKeyEncrypterDecrypter
Membuat database yang mendukung CMEK
Setelah kunci CMEK dibuat dan dikonfigurasi, Anda dapat membuat database yang dilindungi CMEK. Database Firestore yang ada dan dilindungi oleh enkripsi default Google tidak dapat dikonversi untuk menggunakan CMEK.
Anda dapat memilih jenis dan kunci enkripsi hanya saat membuat database yang mengaktifkan CMEK.
Konsol
Di konsol Google Cloud, buka halaman Databases.
Klik Create database.
Pilih mode database Anda. Klik Lanjutkan.
Di halaman Konfigurasi database, masukkan ID database.
Pilih lokasi.
Klik Show Encryption Options, lalu pilih Cloud KMS key.
Pilih atau masukkan nama resource untuk kunci CMEK yang ingin Anda gunakan untuk database.
Daftar kunci dibatasi untuk project Google Cloud saat ini dan lokasi database yang Anda pilih. Untuk menggunakan kunci dari project Google Cloud yang berbeda, klik Switch Project atau Enter Key Manually.
Jika Anda diminta untuk memberikan izin kunci ke akun layanan Firestore, klik Berikan. Untuk membuat database CMEK, akun layanan Firestore Anda harus diberi peran
cloudkms.cryptoKeyEncrypterDecrypter
.Pilih aturan keamanan untuk klien seluler dan web.
Klik Create database.
Setelah database dibuat, Anda dapat memverifikasi bahwa database tersebut mengaktifkan CMEK dengan melihat Detail database:
- Jika database Anda dilindungi oleh CMEK, kolom Jenis enkripsi akan ditampilkan sebagai Dikelola pelanggan dan kolom Kunci enkripsi akan mencantumkan Cloud KMS yang sesuai dan versi kunci yang digunakan untuk melindungi database ini.
- Jika database Anda tidak dilindungi oleh CMEK, kolom Encryption type akan ditampilkan sebagai Google-managed.
gcloud
Sebelum membuat database yang mengaktifkan CMEK dengan Google Cloud CLI, instal versi terbaru dan izinkan gcloud CLI. Untuk mengetahui informasi selengkapnya, lihat Menginstal gcloud CLI.
gcloud firestore databases create --location=FIRESTORE_DATABASE_LOCATION \
--database=DATABASE_ID \
--kms-key-name=KMS_KEY_NAME \
--project=FIRESTORE_PROJECT
Ganti kode berikut:
FIRESTORE_DATABASE_LOCATION
dengan lokasi Firestore untuk databaseDATABASE_ID
dengan ID untuk databaseKMS_KEY_NAME
dengan nama yang Anda tetapkan ke kunci. Gunakan nama resource lengkap untuk kunci dalam format berikut:projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
FIRESTORE_PROJECT
dengan project yang akan digunakan untuk database Firestore Anda
REST API
Permintaan HTTP:
POST https://firestore.googleapis.com/v1/projects/{FIRESOTRE_PROJECT}/databases
Di isi permintaan, konfigurasikan CMEK di kolom cmek_config.kms_key_name
.
Tetapkan ke ID resource lengkap kunci Cloud KMS. Hanya kunci di lokasi yang sama dengan database ini yang diizinkan.
Nilai ini harus berupa ID resource kunci Cloud KMS dalam format
projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}
Untuk mengetahui detail selengkapnya tentang kolom lain, lihat halaman database create
.
Contoh permintaan:
curl -X POST 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases?databaseId={DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json" \
-d '{
"type":"FIRESTORE_NATIVE",
"locationId":"{FIRESTORE_DATABASE_LOCATION}",
"cmekConfig": {
"kmsKeyName":"projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID"
}
}'
Firebase CLI
Untuk membuat database yang mengaktifkan CMEK, gunakan kolom KMS Key Name. Jika Anda tidak menentukan parameter --kms-key-name
, Firestore akan membuat database non-CMEK secara default.
firebase firestore:databases:create DATABASE_ID
--location LOCATION
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
--project FIRESTORE_PROJECT
Ganti kode berikut:
DATABASE_ID
dengan ID database AndaLOCATION
dengan lokasi database AndaKMS_PROJECT
dengan project yang berisi kunci CMEK AndaKMS_LOCATION
dengan lokasi yang berisi kunci dan key ring CMEK AndaKMS_KEYRING_ID
dengan ID key ring CMEK AndaFIRESTORE_PROJECT
dengan project yang akan digunakan untuk database Firestore Anda
Pastikan database Firestore Anda dilindungi dengan Firebase CLI:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
Informasi CMEK berikut akan muncul dalam pesan respons:
- Kolom KMS Key Name memberikan nama resource kunci lengkap yang digunakan untuk mengenkripsi database CMEK Firestore Anda.
- Kolom Active Key Versions memberikan daftar semua versi kunci yang saat ini digunakan oleh database CMEK ini. Selama rotasi kunci, Anda dapat memiliki beberapa versi kunci aktif.
Terraform
Untuk membuat database yang mendukung CMEK, gunakan resource google_firestore_database
. Untuk informasi dan contoh selengkapnya, lihat
google_firestore_database
.
resource "google_firestore_database" "database" {
project = "FIRESTORE_PROJECT"
name = "DATABASE_ID"
location_id = "FIRESTORE_DATABASE_LOCATION"
type = "DATABASE_TYPE"
cmek_config {
kms_key_name = "KMS_KEY_NAME"
}
}
Ganti kode berikut:
FIRESTORE_PROJECT
dengan project yang akan digunakan untuk database Firestore AndaDATABASE_ID
dengan ID untuk databaseFIRESTORE_DATABASE_LOCATION
dengan lokasi Firestore untuk databaseDATABASE_TYPE
denganFIRESTORE_NATIVE
untuk mode Native atauDATASTORE_MODE
untuk mode Datastore.KMS_KEY_NAME
dengan nama yang Anda tetapkan ke kunci. Gunakan nama resource lengkap untuk kunci dalam format:projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
Mengakses database yang dilindungi CMEK
Semua operasi baca, tulis, dan kueri yang dikirim ke database yang dilindungi CMEK harus berfungsi sama seperti database terenkripsi default Google. Misalnya, Anda tidak perlu memberikan kunci untuk setiap permintaan.
Memulihkan database yang dilindungi CMEK
Sebelum memulihkan database yang dilindungi CMEK dari cadangan:
- Tentukan apakah Anda ingin memulihkan database ke enkripsi CMEK, ke enkripsi default Google (non-CMEK), atau ke enkripsi yang sama dengan cadangan.
Siapkan kunci (primary-version) dan versi kunci yang Anda gunakan untuk mengenkripsi cadangan. Aktifkan kunci dan versi kunci.
gcloud
Memulihkan database yang dilindungi CMEK ke enkripsi CMEK
Untuk memulihkan ke enkripsi CMEK, jalankan perintah gcloud firestore databases
restore dengan
flag encryption-type
dan kms-key-name
opsional untuk mengonfigurasi
jenis enkripsi untuk database yang dipulihkan. Jika Anda tidak menentukan jenis enkripsi, database yang dipulihkan akan menggunakan konfigurasi enkripsi yang sama dengan cadangan.
gcloud firestore databases restore
--encryption-type=customer-managed-encryption
--kms-key-name=KMS_KEY_NAME
Ganti KMS_KEY_NAME
dengan nama yang Anda tetapkan ke kunci. Gunakan nama resource lengkap untuk kunci dalam format berikut:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
Memulihkan database yang dilindungi CMEK ke enkripsi default
Untuk memulihkan ke enkripsi default Google (non-CMEK), tetapkan tanda encryption-type
dengan cara berikut:
gcloud firestore databases restore
--encryption-type=google-default-encryption
Memulihkan database yang dilindungi CMEK ke jenis enkripsi yang sama dengan cadangan
Untuk memulihkan ke jenis enkripsi yang sama dengan cadangan, tetapkan tanda encryption-type
dengan cara berikut:
gcloud firestore databases restore --encryption-type=use-source-encryption
Firebase CLI
Memulihkan database yang dilindungi CMEK ke enkripsi CMEK
Untuk memulihkan ke enkripsi CMEK, gunakan flag encryption-type
dan kms-key-name
opsional.
Jika Anda tidak menentukan jenis enkripsi, database yang dipulihkan akan menggunakan konfigurasi enkripsi yang sama dengan cadangan.
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID \
--project FIRESTORE_PROJECT
Ganti kode berikut:
DATABASE_ID
dengan ID database AndaFIRESTORE_PROJECT
dengan project yang akan digunakan untuk database Firestore AndaFIRESTORE_LOCATION
dengan lokasi database Firestore AndaBACKUP_ID
dengan ID cadangan AndaKMS_PROJECT
dengan project yang berisi kunci CMEK AndaKMS_LOCATION
dengan lokasi yang berisi kunci dan key ring CMEK AndaKMS_KEYRING_ID
dengan ID key ring CMEK Anda
Pastikan database Firestore yang dipulihkan dienkripsi dengan CMEK:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
Memulihkan database yang dilindungi CMEK ke enkripsi default
Untuk memulihkan ke enkripsi default Google (non-CMEK), tetapkan tanda encryption-type
dengan cara berikut:
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type GOOGLE_DEFAULT_ENCRYPTION \
--project FIRESTORE_PROJECT
Ganti kode berikut:
DATABASE_ID
dengan ID database AndaFIRESTORE_PROJECT
dengan project yang akan digunakan untuk database Firestore AndaFIRESTORE_LOCATION
dengan lokasi database Firestore AndaBACKUP_ID
dengan ID cadangan Anda
Memulihkan database yang dilindungi CMEK ke jenis enkripsi yang sama dengan cadangan
Untuk memulihkan ke jenis enkripsi yang sama dengan cadangan, tetapkan tanda encryption-type
dengan cara berikut:
firebase firestore:databases:restore \
--database DATABASE_IDD \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type USE_SOURCE_ENCRYPTION
Ganti kode berikut:
DATABASE_ID
dengan ID database AndaFIRESTORE_PROJECT
dengan project yang akan digunakan untuk database Firestore AndaFIRESTORE_LOCATION
dengan lokasi database Firestore AndaBACKUP_ID
dengan ID cadangan Anda
Melihat kunci yang digunakan
gcloud
Anda dapat menggunakan perintah gcloud CLI databases describe untuk mengonfirmasi konfigurasi CMEK database:
gcloud firestore databases describe --database=DATABASE_ID --project=FIRESTORE_PROJECT
Anda akan melihat informasi CMEK di kolom cmekConfig
dalam respons
yang mirip dengan berikut:
cmekConfig:
activeKeyVersion:
- projects/PROJECT_ID/locations/us/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME/cryptoKeyVersions/1
kmsKeyName: projects/PROJECT_ID/locations/us/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
locationId: nam5
name: projects/PROJECT_ID/databases/DATABASE_ID
Responsnya mencakup informasi berikut:
kmsKeyName
: nama resource kunci lengkap dari kunci yang digunakan untuk mengenkripsi database yang dilindungi CMEK.activeKeyVersion
: daftar semua versi kunci yang saat ini digunakan oleh database yang dilindungi CMEK. Selama rotasi kunci, Anda dapat memiliki beberapa versi kunci aktif. Versi kunci lama dan versi kunci baru harus tersedia selama rotasi kunci. Jangan nonaktifkan versi kunci lama hingga tidak muncul lagi di kolomactiveKeyVersion
.
REST API
Permintaan HTTP:
GET https://firestore.googleapis.com/v1/{name=projects/FIRESTORE_PROJECT/databases/DATABASE_ID}
Di isi permintaan, konfigurasikan CMEK di kolom cmek_config.kms_key_name
.
Tetapkan ke ID resource lengkap kunci Cloud KMS. Hanya kunci di lokasi
yang sama dengan database ini yang diizinkan.
Nilai ini harus berupa ID resource kunci Cloud KMS dalam format
projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}
Untuk mengetahui detail selengkapnya tentang kolom lain, lihat halaman database create
.
Contoh permintaan dan respons:
curl 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases/{DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json"
—----------------------------------------- Response —--------------------------------------------
{
"name": "projects/FIRESTORE_PROJECT/databases/{DATABASE_ID}",
"locationId": "{FIRESTORE_DATABASE_LOCATION}",
"type": "FIRESTORE_NATIVE",
"cmekConfig": {
"kmsKeyName": "projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}",
"activeKeyVersion": [
"projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1"
]
},
……
}
Menonaktifkan kunci
Untuk menonaktifkan kunci yang terkait dengan database, selesaikan langkah-langkah berikut:
- Melihat versi kunci yang digunakan untuk database
- Nonaktifkan versi kunci tersebut
- Tunggu hingga perubahan diterapkan dan periksa apakah data tidak lagi dapat diakses. Perubahan biasanya diterapkan dalam beberapa menit, tetapi dapat memerlukan waktu hingga 3 jam.
Jika kunci yang digunakan oleh database dinonaktifkan, Anda akan menerima pengecualian FAILED_PRECONDITION
dengan detail tambahan dalam pesan error, misalnya:
{ "error": { "code": 400, "message": "The customer-managed encryption key required by the requested resource is not accessible. Error reason: generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist).", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.DebugInfo", "detail": "The customer-managed encryption key required by the requested resource is not accessible. Error reason: generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist)" } ] } }
Mengaktifkan kunci
Untuk mengaktifkan kembali kunci yang terkait dengan database, selesaikan langkah-langkah berikut:
- Melihat versi kunci yang digunakan untuk database
- Aktifkan versi kunci tersebut
- Tunggu hingga perubahan diterapkan dan periksa apakah data tidak lagi dapat diakses. Perubahan biasanya diterapkan dalam beberapa menit, tetapi dapat memerlukan waktu hingga 3 jam.
Melihat log audit untuk kunci Cloud KMS
Sebelum mengaktifkan log audit Akses Data Cloud KMS, Anda harus memahami Cloud Audit Logs.
Log audit Akses Data Cloud KMS menunjukkan kepada Anda saat Firestore atau produk lain yang dikonfigurasi untuk menggunakan kunci CMEK Anda melakukan panggilan enkripsi/dekripsi ke Cloud KMS. Firestore tidak mengeluarkan panggilan enkripsi/dekripsi pada setiap permintaan data, tetapi mempertahankan poller yang memeriksa kunci secara berkala. Hasil polling akan muncul di log audit.
Anda dapat menyiapkan dan berinteraksi dengan log audit di konsol Google Cloud:
Pastikan logging diaktifkan untuk Cloud KMS API di project Anda.
Buka Cloud Logging di konsol Google Cloud.
Batasi entri log ke kunci Cloud KMS Anda dengan menambahkan baris berikut ke Builder kueri:
resource.type="cloudkms_cryptokey" resource.labels.key_ring_id = KMS_KEYRING resource.labels.crypto_key_id = KMS_KEY resource.labels.location=KMS_LOCATION
Ganti kode berikut:
KMS_KEY
dengan nama kunci CMEKKMS_KEYRING
dengan key ring KMS yang berisi kunciKMS_LOCATION
dengan lokasi kunci dan key ring
Log menampilkan beberapa entri log sekitar setiap lima menit per database. Entri log terlihat mirip dengan contoh berikut:
Info 2021-03-20 08:02:24.869 EDT Cloudkms.googleapis.com Decrypt projects/cloud-kms-project/locations/us-central1/keyRings/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-firestore.iam.gserviceaccount.com" Info 2021-03-20 08:02:24.913 EDT Cloudkms.googleapis.com Encrypt projects/cloud-kms-project/locations/us-central1/keyRings/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com"
Lihat Memahami log audit untuk mengetahui detail tentang cara menafsirkan log audit.
Mengonfigurasi kebijakan organisasi CMEK
Untuk menentukan persyaratan kepatuhan enkripsi untuk database Firestore di organisasi Anda, gunakan batasan kebijakan organisasi CMEK.
Mewajibkan perlindungan CMEK
Konfigurasikan constraints/gcp.restrictNonCmekServices
untuk mewajibkan CMEK untuk pembuatan database Firestore. Tetapkan batasan ke deny
dan
tambahkan firestore.googleapis.com
ke daftar tolak, misalnya:
gcloud resource-manager org-policies deny gcp.restrictNonCmekServices is:firestore.googleapis.com --project=FIRESTORE_PROJECT
Ganti FIRESTORE_PROJECT
dengan project yang akan dibatasi.
Untuk mempelajari lebih lanjut cara mengonfigurasi kebijakan organisasi, lihat Membuat dan mengedit kebijakan.
Setelah kebijakan diterapkan, Anda akan menerima pengecualian FAILED_PRECONDITION
dan pesan error jika mencoba membuat database non-CMEK dalam project yang terpengaruh. Misalnya, pengecualian terlihat seperti:
{ "error": { "code": 400, "message": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.PreconditionFailure", "violations": [ { "type": "constraints/gcp.restrictNonCmekServices", "subject": "orgpolicy:projects/FIRESTORE_PROJECT", "description": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information." } ]
Membatasi penggunaan kunci untuk CMEK
Untuk membatasi kunci Cloud KMS yang digunakan untuk perlindungan CMEK, konfigurasikan batasan constraints/gcp.restrictCmekCryptoKeyProjects
.
Sebagai batasan daftar, nilai yang diterima adalah indikator hierarki resource (misalnya, projects/PROJECT_ID
, under:folders/FOLDER_ID
, dan
under:organizations/ORGANIZATION_ID
). Gunakan batasan ini dengan mengonfigurasi
daftar indikator hierarki resource dan menetapkan batasan ke Izinkan.
Konfigurasi ini membatasi layanan yang didukung sehingga kunci CMEK hanya dapat dipilih
dari project, folder, dan organisasi yang tercantum. Permintaan untuk membuat
resource yang dilindungi CMEK di layanan yang dikonfigurasi tidak akan berhasil tanpa
kunci Firestore dari salah satu resource yang diizinkan.
Contoh berikut hanya mengizinkan kunci dari ALLOWED_KEY_PROJECT_ID untuk database yang dilindungi CMEK dalam project yang ditentukan:
gcloud resource-manager org-policies allow gcp.restrictCmekCryptoKeyProjects \ under:projects/ALLOWED_KEY_PROJECT_ID \ --project=FIRESTORE_PROJECT
Setelah kebijakan diterapkan, Anda akan menerima pengecualian FAILED_PRECONDITION
dan pesan error jika melanggar batasan. Pengecualian akan terlihat seperti berikut:
{ "error": { "code": 400, "message": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.PreconditionFailure", "violations": [ { "type": "constraints/gcp.restrictCmekCryptoKeyProjects", "subject": "orgpolicy:projects/FIRESTORE_PROJECT", "description": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information." } ] } ] } }