Bu sayfada, Cloud Firestore için müşteri tarafından yönetilen şifreleme anahtarları (CMEK) ile ilgili görevlerin nasıl gerçekleştirileceği açıklanmaktadır. Ne zaman ve neden etkinleştirileceği de dahil olmak üzere CMEK hakkında daha fazla bilgi için Cloud KMS belgelerine bakın.
CMEK anahtarlarınızı hazırlama
CMEK ile korunan bir Cloud Firestore veritabanı oluşturabilmeniz için aşağıdaki adımları tamamlamanız gerekir:
- Cloud Firestore CMEK özelliğine erişim isteğinde bulunun.
- Cloud Firestore hizmet aracısı oluşturun (veya alın).
- CMEK anahtarı oluşturun.
- Bu anahtar için IAM ayarlarını yapılandırın.
CMEK ile korunan veritabanlarını içerecek her proje için bu adımları tamamlayın. Cloud Firestore Daha sonra yeni bir CMEK anahtarı oluşturursanız bu anahtar için IAM ayarlarını yapılandırmanız gerekir.
Erişim iste
Cloud Firestore hizmet aracısı oluşturmadan önce bu formu doldurarak CMEK özelliğine erişim isteğinde bulunun.
Cloud Firestore hizmet temsilcisi oluşturma
Bir CMEK anahtarı oluşturmadan önce, Cloud Firestore tarafından anahtara erişmek için kullanılan bir tür Google tarafından yönetilen hizmet hesabı olan Cloud Firestore hizmet aracısına sahip olmanız gerekir.
Cloud Firestore'nin sizin adınıza CMEK anahtarına erişmek için kullandığı hizmet aracısını oluşturmak üzere services identity create komutunu çalıştırın. Bu komut, eğer henüz mevcut değilse servis hesabını oluşturur ve daha sonra görüntüler.
gcloud beta services identity create \
--service=firestore.googleapis.com \
--project FIRESTORE_PROJECT
FIRESTORE_PROJECT yerine Cloud Firestore veritabanlarınız için kullanmayı planladığınız projeyi girin.
Komut, e-posta adresi gibi biçimlendirilmiş olan servis aracısı kimliğini görüntüler. Çıktı e-posta dizesini kaydedin, çünkü bunu daha sonraki bir adımda kullanacaksınız.
Service identity created: service-xxx@gcp-sa-firestore.iam.gserviceaccount.com
Anahtar oluştur
Doğrudan Cloud KMS'de oluşturulan bir anahtarı veya Cloud External Key Manager ile kullanıma sunduğunuz harici olarak yönetilen bir anahtarı kullanabilirsiniz.
Cloud KMS anahtar konumu, birlikte kullanılacağı Cloud Firestore veritabanının konumuyla aynı olmalıdır.
Bölgesel veritabanı konumları için anahtarlık, anahtar ve veritabanı için aynı konum adını kullanın çünkü konum adları birebir eşlemeye sahiptir.
Örneğin,
us-west1içinde CMEK korumalı bir veritabanı oluşturmak istiyorsanız, bir anahtarlık oluşturun veus-west1içine anahtar yazın.Çoklu bölge veritabanı konumları için KMS çoklu bölge konumunun konum adını kullanın:
- Cloud Firestore
nam5çok bölgeli konumu için Cloud KMSusçok bölgeli konumunu kullanın. europeçok bölgeli konumu için Cloud KMS Cloud Firestoreeur3çok bölgeli konumunu kullanın.
- Cloud Firestore
Anahtarlarınızı yönetmek istediğiniz Google Cloud projesinde aşağıdakileri tamamlayın:
Aşağıdaki seçeneklerden birini kullanarak anahtarlık ve anahtar oluşturun:
- Anahtarlığı ve anahtarı doğrudan Cloud KMS'de oluşturun.
- Harici olarak yönetilen bir anahtar kullanın. Harici anahtarı oluşturun ve ardından anahtarı Cloud KMS aracılığıyla kullanılabilir hale getirmek için bir Cloud EKM anahtarı oluşturun.
Anahtar için IAM ayarlarını yapılandırın
Console
Servis aracınıza bir Cloud KMS rolü vermek için aşağıdakileri yapın. Daha düşük ayrıntı düzeyi istiyorsanız anahtar veya anahtarlık düzeyinde de izin verebilirsiniz.
Google Cloud konsolunda IAM sayfasına gidin.
Ekle'yi tıklayın.
Cloud Firestore servis temsilciniz için e-posta biçimindeki kimliği girin.
Cloud KMS CryptoKey Şifreleyici/Şifre Çözücü rolünü seçin.
Kaydet'i tıklayın.
gcloud
Servis temsilcinize cloudkms.cryptoKeyEncrypterDecrypter rolünü verin:
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
Aşağıdakini değiştirin:
- Anahtara atadığınız adın bulunduğu
KMS_KEY - Anahtarı içeren KMS anahtarlığıyla
KMS_KEYRING KMS_LOCATIONile anahtarlığı içeren bölgeSERVICE_AGENT_EMAILile erişim izni verdiğiniz servis aracısının e-posta biçimli tanımlayıcısıKMS_PROJECTile anahtarı içeren proje
Terminalde aşağıdakine benzer bir yanıt gösterilmelidir:
Updated IAM policy for key KMS_KEY.
bindings:
- members:
- serviceAccount:
service-{project-number}@gcp-sa-firestore.iam.gserviceaccount.com
role: roles/cloudkms.cryptoKeyEncrypterDecrypter
CMEK özellikli bir veritabanı oluşturma
CMEK anahtarlarınız oluşturulup yapılandırıldıktan sonra CMEK ile korunan bir veritabanı oluşturabilirsiniz. Google'ın varsayılan şifrelemesiyle korunan mevcut Cloud Firestore veritabanları, CMEK kullanacak şekilde dönüştürülemez.
Şifreleme türünü ve anahtarını yalnızca CMEK özellikli bir veritabanı oluştururken seçebilirsiniz.
Console
Google Cloud Console'da Veritabanları sayfasına gidin.
Veritabanı oluştur'u tıklayın.
Veritabanı modunuzu seçin. Devam'ı tıklayın.
Veritabanınızı yapılandırın sayfasında bir veritabanı kimliği girin.
Bir yer seçin.
Şifreleme Seçeneklerini Göster'e tıklayın ve ardından Cloud KMS anahtarı'nı seçin.
Veritabanı için kullanmak istediğiniz CMEK anahtarının kaynak adını seçin veya girin.
Anahtar listesi geçerli Google Cloud projesi ve seçtiğiniz veritabanı konumuyla sınırlıdır. Farklı bir Google Cloud projesindeki anahtarı kullanmak için Projeyi Değiştir veya Anahtarı Manuel Olarak Gir'i tıklayın.
Cloud Firestore hizmet hesabına anahtar izni vermeniz istenirse İzin ver'i tıklayın. CMEK veritabanı oluşturmak için Cloud Firestore hizmet hesabınıza
cloudkms.cryptoKeyEncrypterDecrypterrolü verilmelidir.Mobil ve web istemcileri için güvenlik kurallarını seçin.
Veritabanı oluştur'u tıklayın.
Veritabanı oluşturulduktan sonra, Veritabanı ayrıntılarını görüntüleyerek veritabanının CMEK özellikli olduğunu doğrulayabilirsiniz:
- Veritabanınız CMEK tarafından korunuyorsa, Şifreleme türü alanı Müşteri tarafından yönetilen olarak gösterilir ve Şifreleme anahtarı alanı, ilgili Cloud KMS'yi ve bu veritabanını korumak için kullanılan anahtar sürümünü listeler.
- Veritabanınız CMEK tarafından korunmuyorsa Şifreleme türü alanı Google tarafından yönetilen olarak gösterilir.
gcloud
Google Cloud CLI ile CMEK özellikli bir veritabanı oluşturmadan önce, en son sürümü yükleyin ve gcloud CLI'i yetkilendirin. Daha fazla bilgi için gcloud CLI'yi yükleme bölümüne bakın.
gcloud firestore databases create --location=FIRESTORE_DATABASE_LOCATION \
--database=DATABASE_ID \
--kms-key-name=KMS_KEY_NAME \
--project=FIRESTORE_PROJECT
Aşağıdakini değiştirin:
- Veritabanı için Cloud Firestore konumuyla
FIRESTORE_DATABASE_LOCATION - Veritabanı için bir kimlikle
DATABASE_ID Anahtara atadığınız isimle
KMS_KEY_NAME. Anahtar için tam kaynak adını aşağıdaki biçimde kullanın:projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_IDFIRESTORE_PROJECTile Cloud Firestore veritabanınız için kullanılacak proje
REST API
HTTP isteği:
POST https://firestore.googleapis.com/v1/projects/{FIRESTORE_PROJECT}/databases
İstek gövdesinde cmek_config.kms_key_name alanında CMEK'i yapılandırın.
Bir Cloud KMS anahtarının tam kaynak kimliğine ayarlayın. Sadece bu veritabanıyla aynı konumdaki bir anahtara izin verilir.
Bu değer, projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID} biçiminde Cloud KMS anahtar kaynak kimliği olmalıdır.
Diğer alanlar hakkında daha fazla bilgi için database create sayfasını inceleyin.
Örnek istek:
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
CMEK özellikli bir veritabanı oluşturmak için KMS Anahtar Adı alanını kullanın. --kms-key-name parametresini belirtmezseniz Cloud Firestore varsayılan olarak CMEK olmayan bir veritabanı oluşturur.
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
Aşağıdakini değiştirin:
- Veritabanınızın kimliğiyle
DATABASE_ID LOCATIONile veritabanınızın konumuKMS_PROJECTile CMEK anahtarınızı içeren projeKMS_LOCATIONile CMEK anahtarınızı ve anahtarlığınızı içeren konum- CMEK anahtarlığınızın kimliğiyle
KMS_KEYRING_ID - Cloud Firestore veritabanınız için kullanılacak projeyle
FIRESTORE_PROJECT
Cloud Firestore veritabanınızın Firebase CLI ile korunduğunu onaylayın:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
Yanıt mesajında aşağıdaki CMEK bilgileri gösterilir:
- KMS Anahtar Adı alanı, Cloud Firestore CMEK veritabanınızı şifrelemek için kullanılan tam anahtar kaynağı adını sağlar.
- Etkin Anahtar Sürümleri alanı, bu CMEK veritabanı tarafından şu anda kullanılan tüm anahtar sürümlerinin listesini sağlar. Anahtar rotasyonu sırasında birden fazla etkin anahtar sürümünüz olabilir.
Terraform
CMEK'nin etkinleştirildiği bir veritabanı oluşturmak için google_firestore_database kaynağını kullanın. Daha fazla bilgi ve örnek için google_firestore_database konusuna bakın.
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"
}
}
Aşağıdakini değiştirin:
FIRESTORE_PROJECTile Cloud Firestore veritabanınız için kullanılacak proje- Veritabanı için kimlik içeren
DATABASE_ID - Veritabanı için Cloud Firestore konumuyla
FIRESTORE_DATABASE_LOCATION DATABASE_TYPEileFIRESTORE_NATIVE(Native mode için) veyaDATASTORE_MODE(Datastore mode için)Anahtara atadığınız isimle
KMS_KEY_NAME. Anahtar için şu biçimde tam kaynak adını kullanın:projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
CMEK korumalı bir veritabanına erişin
CMEK ile korunan bir veritabanına gönderilen tüm okuma, yazma ve sorgu işlemleri, Google'ın varsayılan olarak şifrelenmiş bir veritabanında olduğu gibi çalışmalıdır. Örneğin, her istek için anahtar sağlamanız gerekmez.
CMEK korumalı bir veritabanını geri yükleyin
CMEK korumalı veritabanını yedekten geri yüklemeden önce:
- Veritabanını CMEK şifrelemeye, Google'ın varsayılan şifrelemesine (CMEK olmayan) veya yedekle aynı şifrelemeye geri yüklemek isteyip istemediğinize karar verin.
Yedeklemeyi şifrelemek için kullandığınız anahtarı (birincil sürüm) ve anahtar sürümünü hazırlayın. Hem anahtarı hem de anahtar sürümünü etkinleştirin.
gcloud
CMEK ile korunan bir veritabanını CMEK şifrelemesine geri yükleme
CMEK şifrelemesine geri yüklemek için gcloud firestore databases restore komutunu çalıştırın. Geri yüklenen veritabanının şifreleme türünü yapılandırmak için isteğe bağlı encryption-type ve kms-key-name işaretlerini kullanın. Şifreleme türünü belirtmezseniz, geri yüklenen veritabanı yedeklemeyle aynı şifreleme yapılandırmasını kullanacaktır.
gcloud firestore databases restore
--encryption-type=customer-managed-encryption
--kms-key-name=KMS_KEY_NAME
KMS_KEY_NAME ifadesini anahtara atadığınız adla değiştirin. Anahtar için aşağıdaki biçimde tam kaynak adını kullanın:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
CMEK korumalı bir veritabanını varsayılan şifrelemeye geri yükleyin
Google'ın varsayılan şifrelemesini (CMEK olmayan) geri yüklemek için encryption-type işaretini aşağıdaki şekilde ayarlayın:
gcloud firestore databases restore
--encryption-type=google-default-encryption
CMEK korumalı bir veritabanını yedeklemeyle aynı şifreleme türüne geri yükleyin
Yedeklemeyle aynı şifreleme türüne geri yüklemek için encryption-type işaretini aşağıdaki şekilde ayarlayın:
gcloud firestore databases restore --encryption-type=use-source-encryption
Firebase CLI
CMEK korumalı bir veritabanını CMEK şifrelemesine geri yükleyin
CMEK şifrelemesine geri dönmek için isteğe bağlı encryption-type ve kms-key-name bayraklarını kullanın.
Şifreleme türünü belirtmezseniz geri yüklenen veritabanı, yedekle aynı şifreleme yapılandırmasını kullanır.
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
Aşağıdakini değiştirin:
- Veritabanınızın kimliğiyle
DATABASE_ID FIRESTORE_PROJECTile Cloud Firestore veritabanınız için kullanılacak proje- Cloud Firestore veritabanınızın konumuyla
FIRESTORE_LOCATION BACKUP_IDile yedeğinizin kimliğiKMS_PROJECTile CMEK anahtarınızı içeren projeKMS_LOCATIONile CMEK anahtarınızı ve anahtarlığınızı içeren konum- CMEK anahtarlığınızın kimliğiyle
KMS_KEYRING_ID
Geri yüklenen Cloud Firestore veritabanınızın CMEK ile şifrelendiğini doğrulayın:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
CMEK ile korunan bir veritabanını varsayılan şifrelemeye geri yükleme
Google'ın varsayılan şifrelemesine (CMEK olmayan) geri yüklemek için encryption-type işaretini aşağıdaki şekilde ayarlayın:
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
Aşağıdakini değiştirin:
- Veritabanınızın kimliğiyle
DATABASE_ID FIRESTORE_PROJECTile Cloud Firestore veritabanınız için kullanılacak proje- Cloud Firestore veritabanınızın konumuyla
FIRESTORE_LOCATION - Yedeklemenizin kimliğiyle
BACKUP_ID
CMEK korumalı bir veritabanını yedeklemeyle aynı şifreleme türüne geri yükleyin
Yedeklemeyle aynı şifreleme türüne geri yüklemek için encryption-type işaretini aşağıdaki şekilde ayarlayın:
firebase firestore:databases:restore \
--database DATABASE_IDD \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type USE_SOURCE_ENCRYPTION
Aşağıdakini değiştirin:
- Veritabanınızın kimliğiyle
DATABASE_ID FIRESTORE_PROJECTile Cloud Firestore veritabanınız için kullanılacak proje- Cloud Firestore veritabanınızın konumuyla
FIRESTORE_LOCATION - Yedeklemenizin kimliğiyle
BACKUP_ID
CMEK korumalı bir veritabanını klonlayın
CMEK korumalı bir veritabanını klonlamadan önce:
- Veritabanını CMEK şifrelemeye, Google'ın varsayılan şifrelemesine (CMEK olmayan) veya kaynak veritabanıyla aynı şifrelemeye klonlamak isteyip istemediğinize karar verin.
Kaynak veritabanını şifrelemek için kullandığınız anahtarı (birincil sürüm) ve anahtar sürümünü hazırlayın. Hem anahtarı hem de anahtar sürümünü etkinleştirin.
gcloud
CMEK korumalı bir veritabanını CMEK şifrelemesine kopyalayın
CMEK şifrelemesine klonlamak için, klonlanan veritabanı için şifreleme türünü yapılandırmak üzere isteğe bağlı encryption-type ve kms-key-name bayraklarıyla gcloud firestore databases clone komutunu çalıştırın. Şifreleme türünü belirtmezseniz, klonlanan veritabanı kaynak veritabanıyla aynı şifreleme yapılandırmasını kullanacaktır.
gcloud firestore databases clone \
--encryption-type=customer-managed-encryption \
--kms-key-name=KMS_KEY_NAME
KMS_KEY_NAME ifadesini anahtara atadığınız adla değiştirin. Anahtar için tam kaynak adını aşağıdaki biçimde kullanın:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
CMEK ile korunan bir veritabanını varsayılan şifrelemeye klonlama
Google'ın varsayılan şifrelemesine (CMEK olmayan) klonlamak için encryption-type işaretini aşağıdaki şekilde ayarlayın:
gcloud firestore databases clone \
--encryption-type=google-default-encryption
CMEK korumalı bir veritabanını kaynak veritabanıyla aynı şifreleme türüne kopyalayın
Kaynak veritabanasıyla aynı şifreleme türüne klonlamak için encryption-type işaretini aşağıdaki şekilde ayarlayın:
gcloud firestore databases clone \
--encryption-type=use-source-encryption
--encryption-type belirtilmemişse bu aynı zamanda varsayılan davranıştır.
Firebase CLI
CMEK korumalı bir veritabanını CMEK şifrelemesine kopyalayın
CMEK şifrelemesine klonlamak için firebase firestore:databases:clone
komutunu, klonlanan veritabanının şifreleme türünü yapılandırmak üzere isteğe bağlı encryption-type ve kms-key-name işaretleriyle birlikte çalıştırın. Şifreleme türünü belirtmezseniz klonlanan veritabanı, kaynak veritabanasıyla aynı şifreleme yapılandırmasını kullanır.
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name=KMS_KEY_NAME
KMS_KEY_NAME yerine anahtara atadığınız adı yazın. Anahtar için aşağıdaki biçimde tam kaynak adını kullanın:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
CMEK korumalı bir veritabanını varsayılan şifrelemeye kopyalayın
Google'ın varsayılan şifrelemesine (CMEK olmayan) kopyalamak için encryption-type işaretini aşağıdaki şekilde ayarlayın:
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=GOOGLE_DEFAULT_ENCRYPTION
CMEK korumalı bir veritabanını kaynak veritabanıyla aynı şifreleme türüne kopyalayın
Kaynak veritabanasıyla aynı şifreleme türüne klonlamak için encryption-type işaretini aşağıdaki şekilde ayarlayın:
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=USE_SOURCE_ENCRYPTION
--encryption-type belirtilmediyse de varsayılan davranış budur.
Kullanımdaki anahtarı görüntüleme
gcloud
Veritabanı CMEK yapılandırmasını onaylamak için databases describe gcloud CLI komutunu kullanabilirsiniz:
gcloud firestore databases describe --database=DATABASE_ID --project=FIRESTORE_PROJECT
Yanıtın cmekConfig alanında CMEK bilgilerini görmelisiniz. Örneğin:
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
Yanıt aşağıdaki bilgileri içerir:
kmsKeyName: CMEK ile korunan veritabanınızı şifrelemek için kullanılan anahtarın tam anahtar kaynak adı.activeKeyVersion: CMEK ile korunan veritabanı tarafından şu anda kullanılan tüm anahtar sürümlerinin listesi. Anahtar döndürme sırasında birden fazla etkin anahtar sürümüne sahip olabilirsiniz. Anahtar rotasyonu sırasında hem eski hem de yeni anahtar sürümünün kullanılabilir olması gerekir. Eski anahtar sürümünü,activeKeyVersionalanında görünmeyene kadar devre dışı bırakmayın.
REST API
HTTP isteği:
GET https://firestore.googleapis.com/v1/{name=projects/FIRESTORE_PROJECT/databases/DATABASE_ID}
İstek gövdesinde cmek_config.kms_key_name alanında CMEK'i yapılandırın.
Bir Cloud KMS anahtarının tam kaynak kimliğine ayarlayın. Sadece bu veritabanıyla aynı konumdaki bir anahtara izin verilir.
Bu değer, projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID} biçimindeki Cloud KMS anahtar kaynak kimliği olmalıdır
Diğer alanlar hakkında daha fazla bilgi için database create sayfasına bakın.
Örnek istek ve yanıt:
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"
]
},
……
}
Anahtarı devre dışı bırakma
Bir veritabanıyla ilişkili anahtarı devre dışı bırakmak için aşağıdakileri yapın:
- Bir veritabanı için kullanılan anahtar sürümlerini görüntüleyin.
- Kullanımdaki bu anahtar sürümlerini devre dışı bırakın.
- Değişikliğin geçerlilik kazanmasını bekleyin ve verilere artık erişilemediğinden emin olun. Değişiklikler genellikle birkaç dakika içinde geçerlilik kazansa da bu süre 3 saati bulabilir.
Bir veritabanı tarafından kullanılan anahtar devre dışı bırakıldığında, hata mesajında ek ayrıntılar içeren bir FAILED_PRECONDITION istisnası almayı bekleyin. Örneğin:
{ "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)" } ] } }
Anahtar etkinleştirme
Bir veritabanıyla ilişkili bir anahtarı yeniden etkinleştirmek için aşağıdakileri tamamlayın:
- Bir veritabanı için kullanılan anahtar sürümlerini görüntüleme
- Kullanımdaki bu anahtar sürümlerini etkinleştirin
- Değişikliğin geçerlilik kazanmasını bekleyin ve verilere artık erişilemediğinden emin olun. Değişiklikler genellikle birkaç dakika içinde geçerlilik kazansa da bu süre 3 saati bulabilir.
Bir Cloud KMS anahtarı için denetim günlüklerini görüntüleyin
Cloud KMS Veri Erişimi denetim günlüklerini etkinleştirmeden önce Cloud Denetim Günlükleri hakkında bilgi sahibi olmanız gerekir.
Cloud KMS Veri Erişimi denetim günlükleri, Cloud Firestore veya CMEK anahtarınızı kullanacak şekilde yapılandırılmış diğer ürünler Cloud KMS'ye şifreleme/şifre çözme çağrıları yaptığında size gösterir. Cloud Firestore, her veri isteğinde şifreleme/şifre çözme çağrısı yapmaz. Bunun yerine, anahtarı düzenli olarak kontrol eden bir yoklama aracı kullanır. Yoklama sonuçları denetleme günlüklerinde görünür.
Denetleme günlüklerini Google Cloud Console'da ayarlayabilir ve bunlarla etkileşimde bulunabilirsiniz:
Projenizde Cloud KMS API için günlük kaydının etkinleştirildiğinden emin olun.
Google Cloud konsolunda Cloud Logging adresine gidin.
Sorgu oluşturucuya aşağıdaki satırları ekleyerek günlük girişlerini Cloud KMS anahtarınızla sınırlayın:
resource.type="cloudkms_cryptokey" resource.labels.key_ring_id = KMS_KEYRING resource.labels.crypto_key_id = KMS_KEY resource.labels.location=KMS_LOCATIONAşağıdakini değiştirin:
KMS_KEYCMEK anahtarının adıyla birlikteKMS_KEYRINGanahtarı içeren KMS anahtarlığı ile- Anahtarın ve anahtarlığın konumuyla birlikte
KMS_LOCATION
Günlük, veritabanı başına yaklaşık her beş dakikada bir birkaç günlük girişi gösterir. Günlük girişleri aşağıdaki örneklere benzer:
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"
Denetim günlüklerinin yorumlanmasıyla ilgili ayrıntılar için Denetim günlüklerini anlama bölümüne bakın.
CMEK kuruluş politikası yapılandırma
Kuruluşunuzdaki Cloud Firestore veritabanları için şifreleme uyumluluğu gereksinimlerini belirtmek üzere bir CMEK kuruluş politikası kısıtlaması kullanın.
CMEK koruması gerektirir
constraints/gcp.restrictNonCmekServices, Cloud Firestore veritabanı oluşturma işlemi için CMEK gerektirecek şekilde yapılandırın. Kısıtlamayı deny olarak ayarlayın ve reddetme listesine firestore.googleapis.com ekleyin, örneğin:
gcloud resource-manager org-policies deny gcp.restrictNonCmekServices is:firestore.googleapis.com --project=FIRESTORE_PROJECT
FIRESTORE_PROJECT ifadesini kısıtlanacak projeyle değiştirin.
Kuruluş politikalarını yapılandırma hakkında daha fazla bilgi edinmek için Politika oluşturma ve düzenleme başlıklı makaleyi inceleyin.
Politika yürürlüğe girdikten sonra, etkilenen proje altında CMEK olmayan bir veritabanı oluşturmaya çalışırsanız FAILED_PRECONDITION istisna ve hata mesajı alırsınız. Örneğin, bir istisna şu şekilde görünür:
{ "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." } ]
CMEK için anahtar kullanımını sınırlama
CMEK koruması için hangi Cloud KMS anahtarlarının kullanılacağını sınırlamak için constraints/gcp.restrictCmekCryptoKeyProjects kısıtlamasını yapılandırın.
Bir liste kısıtlaması olarak kabul edilen değerler kaynak hiyerarşisi göstergeleridir (örneğin, projects/PROJECT_ID, under:folders/FOLDER_ID ve under:organizations/ORGANIZATION_ID). Kaynak hiyerarşisi göstergelerinin bir listesini yapılandırarak ve kısıtlamayı İzin Ver olarak ayarlayarak bu kısıtlamayı kullanın.
Bu yapılandırma, desteklenen hizmetleri kısıtlayarak CMEK anahtarlarının yalnızca listelenen projeler, klasörler ve kuruluşlar arasından seçilebilmesini sağlar. Yapılandırılmış hizmetlerde CMEK korumalı kaynaklar oluşturma istekleri, izin verilen kaynaklardan birinden Cloud Firestore anahtarı olmadan başarılı olmaz.
Aşağıdaki örnekte, belirtilen projedeki CMEK ile korunan veritabanları için yalnızca ALLOWED_KEY_PROJECT_ID anahtarlarına izin verilir:
gcloud resource-manager org-policies allow gcp.restrictCmekCryptoKeyProjects \ under:projects/ALLOWED_KEY_PROJECT_ID \ --project=FIRESTORE_PROJECT
Politika yürürlüğe girdikten sonra, kısıtlamayı ihlal ederseniz bir FAILED_PRECONDITION istisnası ve bir hata mesajı alırsınız. Bir istisna aşağıdaki gibi görünür:
{ "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." } ] } ] } }