Müşteri tarafından yönetilen şifreleme anahtarlarını (CMEK) kullanma

Bu sayfada, MongoDB uyumluluğu ile Cloud Firestore için müşteri tarafından yönetilen şifreleme anahtarları (CMEK) ile ilgili görevlerin nasıl yapılacağı açıklanmaktadır. CMEK'nin ne zaman ve neden etkinleştirileceği de dahil olmak üzere genel olarak CMEK hakkında daha fazla bilgi için Cloud KMS belgelerine bakın.

CMEK anahtarlarınızı hazırlama

MongoDB uyumluluğu olan CMEK korumalı bir Cloud Firestore veritabanı oluşturabilmek için aşağıdaki adımları tamamlamanız gerekir:

  1. MongoDB uyumluluğu CMEK özelliğiyle Cloud Firestore'a erişim isteğinde bulunun.
  2. MongoDB uyumluluğu olan bir Cloud Firestore hizmet aracısı oluşturun (veya alın).
  3. CMEK anahtarı oluşturun.
  4. Söz konusu anahtar için IAM ayarlarını yapılandırın.

CMEK ile korunan ve MongoDB uyumluluğu olan Cloud Firestore veritabanlarını içerecek her proje için bu adımları tamamlayın. Daha sonra yeni bir CMEK anahtarı oluşturursanız bu anahtar için IAM ayarlarını yapılandırmanız gerekir.

Erişim iste

MongoDB uyumluluğu olan bir Cloud Firestore hizmet aracısı oluşturmadan önce erişim isteği formunu doldurarak CMEK özelliğine erişim isteğinde bulunun.

MongoDB uyumluluğu olan bir Cloud Firestore hizmet aracısı oluşturma

CMEK anahtarı oluşturmadan önce, MongoDB uyumluluğu olan bir Cloud Firestore hizmet aracınızın olması gerekir. Bu, MongoDB uyumluluğu olan Cloud Firestore'un anahtara erişmek için kullandığı, Google tarafından yönetilen bir hizmet hesabıdır.

Cloud Firestore'un MongoDB uyumluluğu ile 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, hizmet hesabı mevcut değilse oluşturur ve ardından görüntüler.

gcloud beta services identity create \
    --service=firestore.googleapis.com \
    --project FIRESTORE_PROJECT

FIRESTORE_PROJECT kısmını, MongoDB uyumluluğu olan Cloud Firestore veritabanlarınız için kullanmayı planladığınız projeyle değiştirin.

Komut, e-posta adresi gibi biçimlendirilmiş hizmet aracısı kimliğini gösterir. Çıkış e-posta dizesini kaydedin. Bu dizeyi sonraki adımlardan birinde kullanacaksınız.

Service identity created:
service-xxx@gcp-sa-firestore.

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, MongoDB uyumluluğu olan Cloud Firestore veritabanının konumuyla aynı olmalıdır.

  • Bölgesel veritabanı konumları için anahtarlık, anahtar ve veritabanında aynı konum adını kullanın. Bunun nedeni, konum adlarının bire bir eşlemeye sahip olmasıdır.

    Örneğin, us-west1 içinde CMEK ile korunan bir veritabanı oluşturmak istiyorsanız us-west1 içinde bir anahtarlık ve anahtar oluşturun.

  • Çoklu bölge veritabanı konumları için KMS çoklu bölge konumunun konum adını kullanın:

    • us MongoDB uyumluluğu ile Cloud Firestore us çok bölgeli konumu için Cloud KMS çok bölgeli konumunu kullanın.nam5

    • europe MongoDB uyumluluğu ile Cloud Firestore europe çok bölgeli konumu için Cloud KMS çok bölgeli konumunu kullanın.eur3

Anahtarlarınızı yönetmek istediğiniz Google Cloud projesinde aşağıdakileri yapın:

  1. Cloud KMS API'yi etkinleştirin.

  2. Aşağıdaki seçeneklerden birini kullanarak anahtarlık ve anahtar oluşturun:

Anahtar için IAM ayarlarını yapılandırma

Console

Hizmet aracınıza Cloud KMS rolü atamak 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.

  1. Google Cloud Console'da IAM sayfasına gidin.

    IAM sayfasına gidin

  2. Ekle'yi tıklayın.

  3. MongoDB uyumluluğu hizmet aracısı ile Cloud Firestore'unuzun e-posta biçimli kimliğini girin.

  4. Cloud KMS CryptoKey Şifreleyici/Şifre Çözücü rolünü seçin.

  5. Kaydet'i tıklayın.

gcloud

Hizmet 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
  • KMS_KEYRING anahtarı içeren KMS anahtarlığıyla
  • KMS_LOCATION ile anahtarlığı içeren bölge
  • SERVICE_AGENT_EMAIL ile erişim izni verdiğiniz hizmet aracısının e-posta biçimli tanımlayıcısı
  • KMS_PROJECT ile 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.
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, MongoDB uyumluluğu olan mevcut Cloud Firestore veritabanları CMEK kullanacak şekilde dönüştürülemez.

Yalnızca CMEK özellikli bir veritabanı oluştururken şifreleme türü ve anahtarı seçebilirsiniz.

Console

  1. Google Cloud Console'da Veritabanları sayfasına gidin.

    Veritabanları sayfasına gidin

  2. Create a Firestore Database'i (Firestore veritabanı oluştur) tıklayın.

  3. Bir veritabanı kimliği girin.

  4. Enterprise sürümünü seçin.

  5. Veritabanınız için bir konum seçin.

  6. Şifreleme Seçeneklerini Göster'i tıklayın ve ardından Cloud KMS anahtarı'nı seçin.

  7. Veritabanı için kullanmak istediğiniz CMEK anahtarının kaynak adını seçin veya girin.

  8. Anahtar listesi, mevcut Google Cloud projesi ve seçtiğiniz veritabanı konumuyla sınırlıdır. Farklı bir Google Cloud projedeki anahtarı kullanmak için Projeyi Değiştir'i veya Anahtarı Manuel Olarak Gir'i tıklayın.

  9. MongoDB uyumluluğu ile Cloud Firestore hizmet hesabına anahtar izni vermeniz istenirse Ver'i tıklayın. CMEK veritabanı oluşturmak için MongoDB uyumluluğu olan Cloud Firestore hizmet hesabınıza cloudkms.cryptoKeyEncrypterDecrypter rolü verilmelidir.

  10. Mobil ve web istemcileri için güvenlik kurallarını seçin.

  11. Veritabanı oluştur'u tıklayın.

Veritabanı oluşturulduktan sonra Veritabanı ayrıntıları'nı görüntüleyerek veritabanının CMEK etkin olduğunu doğrulayabilirsiniz:

  • Veritabanınız CMEK ile korunuyorsa Şifreleme türü alanı Müşteri tarafından yönetilen olarak gösterilir ve Şifreleme anahtarı alanında, bu veritabanını korumak için kullanılan ilgili Cloud KMS ve anahtar sürümü listelenir.
  • Veritabanınız CMEK ile 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'ı yetkilendirin. Daha fazla bilgi için gcloud CLI yükleme başlıklı makaleyi inceleyin.

gcloud firestore databases create \
    --location=FIRESTORE_DATABASE_LOCATION \
    --database=DATABASE_ID \
    --edition=enterprise \
    --kms-key-name=KMS_KEY_NAME \
    --project=FIRESTORE_PROJECT

Aşağıdakini değiştirin:

  • FIRESTORE_DATABASE_LOCATION ve veritabanının konumu
  • Veritabanı için kimlik içeren DATABASE_ID
  • KMS_KEY_NAME ile anahtara atadığınız ad. 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

  • FIRESTORE_PROJECT ile Cloud Firestore'un MongoDB uyumluluğu veritabanı için kullanılacak proje

CMEK ile korunan bir veritabanına erişme

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 ile korunan bir veritabanını geri yükleme

CMEK ile korunan veritabanını yedekten geri yüklemeden önce:

  • Veritabanını CMEK şifrelemeye, Google'ın varsayılan şifrelemesine (CMEK olmayan) veya yedeklemeyle 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 şifrelemeye 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ı, yedekle aynı şifreleme yapılandırmasını kullanır.

gcloud firestore databases restore \
--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 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:

gcloud firestore databases restore \
--encryption-type=google-default-encryption

CMEK ile korunan bir veritabanını yedekle aynı şifreleme türüne geri yükleme

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 ile korunan bir veritabanını CMEK şifrelemesine geri yükleme

CMEK şifrelemesine geri dönmek için isteğe bağlı encryption-type ve kms-key-name işaretini 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:

  • DATABASE_ID yerine veritabanınızın kimliğini yazın.
  • FIRESTORE_PROJECT ile Cloud Firestore'un MongoDB uyumluluğu veritabanı için kullanılacak proje
  • FIRESTORE_LOCATION ile Cloud Firestore'un MongoDB uyumluluğu veritabanının konumu
  • BACKUP_ID ile yedeğinizin kimliği
  • KMS_PROJECT ile CMEK anahtarınızı içeren proje
  • CMEK anahtarınızı ve anahtarlığınızı içeren konumla KMS_LOCATION
  • KMS_KEYRING_ID kısmını CMEK anahtar zincirinizin kimliğiyle değiştirin.

MongoDB uyumluluğu ile 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:

  • DATABASE_ID yerine veritabanınızın kimliğini yazın.
  • FIRESTORE_PROJECT ile Cloud Firestore'un MongoDB uyumluluğu veritabanı için kullanılacak proje
  • FIRESTORE_LOCATION ile Cloud Firestore'un MongoDB uyumluluğu veritabanının konumu
  • BACKUP_ID ile yedeğinizin kimliği

CMEK ile korunan bir veritabanını yedekle aynı şifreleme türüne geri yükleme

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_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type USE_SOURCE_ENCRYPTION

Aşağıdakini değiştirin:

  • DATABASE_ID yerine veritabanınızın kimliğini yazın.
  • FIRESTORE_PROJECT ile Cloud Firestore'un MongoDB uyumluluğu veritabanı için kullanılacak proje
  • FIRESTORE_LOCATION ile Cloud Firestore'un MongoDB uyumluluğu veritabanının konumu
  • BACKUP_ID ile yedeğinizin kimliği

CMEK ile korunan bir veritabanını klonlama

CMEK ile korunan 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.
  • Anahtarı (birincil sürüm) ve kaynak veritabanını şifrelemek için kullandığınız 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 klonlama

CMEK şifrelemesine klonlamak için gcloud alpha firestore databases clone komutunu çalıştırın. Klonlanan 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 klonlanan veritabanı, kaynak veritabanıyla aynı şifreleme yapılandırmasını kullanır.

gcloud alpha firestore databases clone \
--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 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 alpha firestore databases clone \
--encryption-type=google-default-encryption

CMEK ile korunan bir veritabanını kaynak veritabanasıyla aynı şifreleme türüne klonlama

Kaynak veritabanasıyla aynı şifreleme türüne klonlamak için encryption-type işaretini aşağıdaki şekilde ayarlayın:

gcloud alpha firestore databases clone \
--encryption-type=use-source-encryption

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 aşağıdakine benzer bir CMEK bilgisi görmelisiniz:

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 kaynak adı.
  • activeKeyVersion: CMEK ile korunan veritabanı tarafından kullanılan tüm anahtar sürümlerinin listesi. Anahtar rotasyonu 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ü, activeKeyVersion alanı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'yi yapılandırın. Cloud KMS anahtarının tam kaynak kimliğine ayarlanır. Yalnızca 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 alanlarla ilgili daha fazla bilgi için database create sayfasını inceleyin.

Örnek istek:

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"

Örnek yanıt:

{
  "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:

  1. Bir veritabanı için kullanılan anahtar sürümlerini görüntüleme
  2. Bu anahtar sürümlerini devre dışı bırakın
  3. 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 INVALID_ARGUMENT istisnası almayı bekleyin. Örneğin:

{
  "error": {
    "code": 400,
    "message": "Failed: (InvalidArgument) The customer-managed encryption key required by the requested resource is not accessible. Error reason: projects/{FIRESTORE_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1 is not enabled, current state is: DISABLED.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.DebugInfo",
        "detail": "Failed: (InvalidArgument) The customer-managed encryption key required by the requested resource is not accessible. Error reason: projects/{FIRESTORE_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1 is not enabled, current state is: DISABLED."
      }
    ]
  }
}

Anahtar etkinleştirme

Bir veritabanıyla ilişkili anahtarı yeniden etkinleştirmek için aşağıdakileri yapın:

  1. Bir veritabanı için kullanılan anahtar sürümlerini görüntüleme
  2. Bu anahtar sürümlerini etkinleştirin.
  3. 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.

Cloud KMS anahtarı için denetleme günlüklerini görüntüleme

Cloud KMS Veri Erişimi denetleme günlüklerini etkinleştirmeden önce Cloud Denetleme Günlükleri hakkında bilgi sahibi olmanız gerekir.

Cloud KMS Veri Erişimi denetim günlükleri, MongoDB uyumluluğu ile Cloud Firestore veya CMEK anahtarınızı kullanacak şekilde yapılandırılmış diğer ürünler Cloud KMS'ye şifreleme veya şifre çözme çağrıları yaptığında size gösterir. MongoDB uyumluluğu olan Cloud Firestore, her veri isteğinde şifreleme veya şifre çözme çağrısı yapmaz. Bunun yerine, anahtarı düzenli olarak kontrol eden bir yoklayıcıyı korur. Yoklama sonuçları denetleme günlüklerinde görünür.

Denetleme günlüklerini Google Cloud Console'da ayarlayabilir ve bu günlüklerle etkileşimde bulunabilirsiniz:

  1. Projenizde Cloud KMS API için günlüğün etkinleştirildiğinden emin olun.

  2. Google Cloud Console'da Cloud Logging simgesine gidin.

    Cloud Logging adresine gidin.

  3. 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_LOCATION
    

    Aşağıdakini değiştirin:

    • KMS_KEY ile CMEK anahtarının adı
    • KMS_KEYRING anahtarı içeren KMS anahtarlığıyla
    • Anahtarın ve anahtarlığın konumuyla birlikte KMS_LOCATION

    Günlükte, veritabanı başına yaklaşık beş dakikada bir birkaç günlük girişi gösterilir. 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.
    audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-firestore."
    
    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.
    audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-firestore."
    

Denetleme günlüklerini yorumlama hakkında ayrıntılı bilgi için Denetleme günlüklerini anlama başlıklı makaleyi inceleyin.

CMEK kuruluş politikası yapılandırma

Kuruluşunuzdaki MongoDB uyumlu Cloud Firestore veritabanları için şifreleme uygunluğu şartlarını belirtmek üzere CMEK kuruluş politikası kısıtlaması kullanın.

CMEK koruması gerektirme

constraints/gcp.restrictNonCmekServices'yı, MongoDB uyumluluğu veritabanı oluşturma ile Cloud Firestore 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 yerine kısıtlanacak projeyi yazın.

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 üzere constraints/gcp.restrictCmekCryptoKeyProjects kısıtlamasını yapılandırın.

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östergelerinden oluşan bir liste yapılandırıp 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 ile korunan kaynak oluşturma istekleri, izin verilen kaynaklardan birinden alınan MongoDB uyumluluğu anahtarı içeren bir Cloud Firestore 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/<var>ALLOWED_KEY_PROJECT_ID</var> \
--project=<var>FIRESTORE_PROJECT</var>

Politika yürürlüğe girdikten sonra kısıtlamayı ihlal ederseniz FAILED_PRECONDITION istisnası ve 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."
          }
        ]
      }
    ]
  }
}

Sırada ne var?