Używanie kluczy szyfrowania zarządzanych przez klienta (CMEK)

Na tej stronie opisano, jak wykonywać zadania związane z kluczami szyfrowania zarządzanymi przez klienta (CMEK) w Cloud Firestore. Więcej informacji o kluczach CMEK, w tym o tym, kiedy i dlaczego warto je włączyć, znajdziesz w dokumentacji Cloud KMS.

Przygotowanie kluczy CMEK

Zanim utworzysz bazę danych Cloud Firestore chronioną kluczami CMEK, musisz wykonać te czynności:

  1. Poproś o dostęp do funkcji klucza CMEK Cloud Firestore.
  2. Utwórz (lub pobierz) agenta usługi Cloud Firestore.
  3. Utwórz klucz CMEK.
  4. Skonfiguruj ustawienia uprawnień dla tego klucza.

Wykonaj te czynności w przypadku każdego projektu, który będzie zawierać bazy danych Cloud Firestore chronione kluczami CMEK. Jeśli później utworzysz nowy klucz CMEK, musisz skonfigurować dla niego ustawienia uprawnień.

Poproś o dostęp

Zanim utworzysz agenta usługi Cloud Firestore, poproś o dostęp do funkcji kluczy CMEK, wypełniając formularz prośby o dostęp.

Tworzenie agenta usługi Cloud Firestore

Zanim utworzysz klucz CMEK, musisz mieć Cloud Firestore agenta usługi, który jest typem zarządzanego przez Google konta usługi używanego przez Cloud Firestore do uzyskiwania dostępu do klucza.

Uruchom polecenie services identity create, aby utworzyć agenta usługi, którego Cloud Firestore używa do uzyskiwania dostępu do klucza CMEK w Twoim imieniu. To polecenie tworzy konto usługi, jeśli jeszcze nie istnieje, a następnie je wyświetla.

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

Zastąp FIRESTORE_PROJECT projektem, którego chcesz używać w przypadku baz danych Cloud Firestore.

Polecenie wyświetli identyfikator agenta usługi, który ma format adresu e-mail. Zapisz ciąg znaków adresu e-mail, ponieważ będzie on potrzebny w późniejszym kroku.

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

Utwórz klucz

Możesz użyć klucza utworzonego bezpośrednio w Cloud KMS lub klucza zarządzanego zewnętrznie, który udostępniasz za pomocą Cloud External Key Manager.

Lokalizacja klucza Cloud KMS musi być taka sama jak lokalizacja bazy danych Cloud Firestore, z którą będzie on używany.

  • W przypadku regionalnych lokalizacji baz danych użyj tej samej nazwy lokalizacji dla pęku kluczy, klucza i bazy danych, ponieważ nazwy lokalizacji są mapowane w relacji jeden do jednego.

    Jeśli na przykład chcesz utworzyć bazę danych chronioną kluczem CMEK w regionie us-west1, utwórz pęk kluczy i klucz w regionie us-west1.

  • W przypadku lokalizacji baz danych w wielu regionach użyj nazwy lokalizacji lokalizacji KMS w wielu regionach:

    • Użyj lokalizacji Cloud KMS w wielu regionach us dla lokalizacji Cloud Firestore nam5 w wielu regionach.

    • Użyj lokalizacji Cloud KMS w wielu regionach europe dla lokalizacji Cloud Firestore eur3 w wielu regionach.

W projekcie Google Cloud, w którym chcesz zarządzać kluczami, wykonaj te czynności:

  1. Włącz interfejs Cloud KMS API.

  2. Utwórz pęk kluczy i klucz, korzystając z jednej z tych opcji:

Konfigurowanie ustawień uprawnień dla klucza

Konsola

Aby przypisać rolę Cloud KMS do agenta usługi, wykonaj te czynności. Jeśli chcesz uzyskać mniejszą szczegółowość, możesz też przyznać uprawnienia na poziomie klucza lub pęku kluczy.

  1. W konsoli Google Cloud otwórz stronę Uprawnienia.

    Otwórz stronę Uprawnienia

  2. Kliknij Dodaj.

  3. Wpisz identyfikator agenta usługi Cloud Firestore w formacie adresu e-mail.

  4. Wybierz rolę Szyfrujący i odszyfrowujący klucze CryptoKey Cloud KMS.

  5. Kliknij Zapisz.

gcloud

Przypisz rolę cloudkms.cryptoKeyEncrypterDecrypter do agenta usługi:

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

Zastąp następujące elementy:

  • KMS_KEY nazwą przypisaną do klucza,
  • KMS_KEYRING pękiem kluczy KMS zawierającym klucz,
  • KMS_LOCATION regionem zawierającym pęk kluczy,
  • SERVICE_AGENT_EMAIL z identyfikatorem w formacie adresu e-mail agenta usługi, któremu przyznajesz dostęp.
  • KMS_PROJECT z projektem zawierającym klucz,

Terminal powinien wyświetlić odpowiedź podobną do tej:

Updated IAM policy for key KMS_KEY.
bindings:
- members:
- serviceAccount:
service-{project-number}@gcp-sa-firestore.
role: roles/cloudkms.cryptoKeyEncrypterDecrypter

Tworzenie bazy danych obsługującej klucze CMEK

Po utworzeniu i skonfigurowaniu kluczy CMEK możesz utworzyć bazę danych chronioną kluczem CMEK. Istniejących baz danych Cloud Firestore chronionych domyślnym szyfrowaniem Google nie można przekonwertować na bazy danych korzystające z kluczy CMEK.

Typ szyfrowania i klucz możesz wybrać tylko podczas tworzenia bazy danych z obsługą kluczy CMEK.

Konsola

  1. W konsoli Google Cloud otwórz stronę Bazy danych.

    Otwórz stronę Bazy danych

  2. Kliknij Utwórz bazę danych Firestore.

  3. Wpisz identyfikator bazy danych.

  4. Wybierz wersję Enterprise.

  5. Wybierz lokalizację bazy danych.

  6. Kliknij Pokaż opcje szyfrowania, a następnie wybierz Klucz Cloud KMS.

  7. Wybierz lub wpisz nazwę zasobu klucza CMEK, którego chcesz używać w bazie danych.

  8. Lista kluczy jest ograniczona do bieżącego projektu Google Cloud i wybranej lokalizacji bazy danych. Aby użyć klucza z innego projektu Google Cloud, kliknij Przełącz projekt lub Wpisz klucz ręcznie.

  9. Jeśli pojawi się prośba o przyznanie uprawnień do klucza kontu usługi Cloud Firestore, kliknij Przyznaj. Aby utworzyć bazę danych CMEK, Twoje konto usługi Cloud Firestore musi mieć przypisaną rolę cloudkms.cryptoKeyEncrypterDecrypter.

  10. Wybierz reguły zabezpieczeń dla klientów mobilnych i internetowych.

  11. Kliknij Utwórz bazę danych.

Po utworzeniu bazy danych możesz sprawdzić, czy jest ona chroniona kluczem CMEK, wyświetlając Szczegóły bazy danych:

  • Jeśli baza danych jest chroniona przez CMEK, pole Typ szyfrowania ma wartość Zarządzane przez klienta, a pole Klucz szyfrowania zawiera odpowiedni klucz Cloud KMS i wersję klucza używaną do ochrony tej bazy danych.
  • Jeśli baza danych nie jest chroniona przez CMEK, w polu Typ szyfrowania wyświetla się Zarządzane przez Google.

gcloud

Zanim utworzysz bazę danych obsługującą klucze CMEK za pomocą Google Cloud CLI, zainstaluj najnowszą wersję i autoryzuj gcloud CLI. Więcej informacji znajdziesz w artykule Instalowanie gcloud CLI.

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

Zastąp następujące elementy:

  • FIRESTORE_DATABASE_LOCATION z lokalizacją bazy danych.
  • DATABASE_ID identyfikatorem bazy danych,
  • KMS_KEY_NAME nazwą przypisaną do klucza. Użyj pełnej nazwy zasobu klucza w tym formacie:

    projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID

  • FIRESTORE_PROJECT z projektem, który ma być używany w bazie danych Cloud Firestore

Uzyskiwanie dostępu do bazy danych chronionej kluczem CMEK

Wszystkie operacje odczytu, zapisu i zapytania wysyłane do bazy danych chronionej kluczem CMEK powinny działać tak samo jak w przypadku bazy danych zaszyfrowanej domyślnie przez Google. Na przykład nie musisz podawać klucza w każdym żądaniu.

Przywracanie bazy danych chronionej kluczem CMEK

Zanim przywrócisz bazę danych chronioną kluczem CMEK z kopii zapasowej:

  • Zdecyduj, czy chcesz przywrócić bazę danych do szyfrowania CMEK, do domyślnego szyfrowania Google (innego niż CMEK) czy do tego samego szyfrowania co kopia zapasowa.
  • Przygotuj klucz (wersję podstawową) i wersję klucza, której użyto do zaszyfrowania kopii zapasowej. Włącz klucz i wersję klucza.

gcloud

Przywracanie bazy danych chronionej kluczem CMEK do szyfrowania CMEK

Aby przywrócić szyfrowanie CMEK, uruchom polecenie gcloud firestore databases restore z opcjonalnymi flagami encryption-type i kms-key-name, aby skonfigurować typ szyfrowania przywróconej bazy danych. Jeśli nie określisz typu szyfrowania, przywrócona baza danych będzie używać tej samej konfiguracji szyfrowania co kopia zapasowa.

gcloud firestore databases restore \
--encryption-type=customer-managed-encryption \
--kms-key-name=KMS_KEY_NAME

Zastąp KMS_KEY_NAME nazwą przypisaną do klucza. Użyj pełnej nazwy zasobu klucza w tym formacie:

projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID

Przywracanie domyślnego szyfrowania bazy danych chronionej kluczem CMEK

Aby przywrócić domyślne szyfrowanie Google (inne niż CMEK), ustaw flagę encryption-type w ten sposób:

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

Przywracanie bazy danych chronionej kluczem CMEK do tego samego typu szyfrowania co kopia zapasowa

Aby przywrócić ten sam typ szyfrowania co w kopii zapasowej, ustaw flagę encryption-type w ten sposób:

gcloud firestore databases restore --encryption-type=use-source-encryption

wiersz poleceń Firebase

Przywracanie bazy danych chronionej kluczem CMEK do szyfrowania CMEK

Aby przywrócić szyfrowanie CMEK, użyj opcjonalnych flag encryption-type i kms-key-name. Jeśli nie określisz typu szyfrowania, przywrócona baza danych będzie używać tej samej konfiguracji szyfrowania co kopia zapasowa.

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

Zastąp następujące elementy:

  • DATABASE_ID identyfikatorem bazy danych,
  • FIRESTORE_PROJECT z projektem, który ma być używany w bazie danych Cloud Firestore
  • FIRESTORE_LOCATION, podając lokalizację bazy danych Cloud Firestore.
  • BACKUP_ID identyfikatorem kopii zapasowej.
  • KMS_PROJECT z projektem, który zawiera klucz CMEK;
  • KMS_LOCATION lokalizacją zawierającą klucz CMEK i pęk kluczy,
  • KMS_KEYRING_ID identyfikatorem pęku kluczy CMEK,

Sprawdź, czy przywrócona baza danych Cloud Firestore jest zaszyfrowana kluczami CMEK:

firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT

Przywracanie domyślnego szyfrowania bazy danych chronionej kluczem CMEK

Aby przywrócić domyślne szyfrowanie Google (inne niż CMEK), ustaw flagę encryption-type w ten sposób:

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

Zastąp następujące elementy:

  • DATABASE_ID identyfikatorem bazy danych,
  • FIRESTORE_PROJECT z projektem, który ma być używany w bazie danych Cloud Firestore
  • FIRESTORE_LOCATION, podając lokalizację bazy danych Cloud Firestore.
  • BACKUP_ID identyfikatorem kopii zapasowej.

Przywracanie bazy danych chronionej kluczem CMEK do tego samego typu szyfrowania co kopia zapasowa

Aby przywrócić ten sam typ szyfrowania co w kopii zapasowej, ustaw flagę encryption-type w ten sposób:

firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type USE_SOURCE_ENCRYPTION

Zastąp następujące elementy:

  • DATABASE_ID identyfikatorem bazy danych,
  • FIRESTORE_PROJECT z projektem, który ma być używany w bazie danych Cloud Firestore
  • FIRESTORE_LOCATION, podając lokalizację bazy danych Cloud Firestore.
  • BACKUP_ID identyfikatorem kopii zapasowej.

Klonowanie bazy danych chronionej kluczem CMEK

Zanim sklonujesz bazę danych chronioną kluczem CMEK:

  • Zdecyduj, czy chcesz sklonować bazę danych do szyfrowania CMEK, do domyślnego szyfrowania Google (bez CMEK) czy do tego samego szyfrowania co źródłowa baza danych.
  • Przygotuj klucz (wersja podstawowa) i wersję klucza, które zostały użyte do zaszyfrowania źródłowej bazy danych. Włącz klucz i wersję klucza.

gcloud

Klonowanie bazy danych chronionej kluczem CMEK do szyfrowania CMEK

Aby sklonować do szyfrowania CMEK, uruchom polecenie gcloud firestore databases clone z opcjonalnymi flagami encryption-type i kms-key-name, aby skonfigurować typ szyfrowania sklonowanej bazy danych. Jeśli nie określisz typu szyfrowania, sklonowana baza danych będzie używać tej samej konfiguracji szyfrowania co źródłowa baza danych.

gcloud firestore databases clone \
--encryption-type=customer-managed-encryption \
--kms-key-name=KMS_KEY_NAME

Zastąp KMS_KEY_NAME nazwą przypisaną do klucza. Użyj pełnej nazwy zasobu klucza w tym formacie:

projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID

Klonowanie bazy danych chronionej kluczem CMEK do domyślnego szyfrowania

Aby sklonować do domyślnego szyfrowania Google (bez CMEK), ustaw flagę encryption-type w ten sposób:

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

Klonowanie bazy danych chronionej kluczem CMEK do tego samego typu szyfrowania co źródłowa baza danych

Aby sklonować do tego samego typu szyfrowania co źródłowa baza danych, ustaw flagę encryption-type w następujący sposób:

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

Jest to też działanie domyślne, jeśli parametr --encryption-type nie jest określony.

wiersz poleceń Firebase

Klonowanie bazy danych chronionej kluczem CMEK do szyfrowania CMEK

Aby sklonować do szyfrowania CMEK, uruchom polecenie firebase firestore:databases:clone z opcjonalnymi flagami encryption-type i kms-key-name, aby skonfigurować typ szyfrowania sklonowanej bazy danych. Jeśli nie określisz typu szyfrowania, sklonowana baza danych będzie używać tej samej konfiguracji szyfrowania co źródłowa baza danych.

firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name=KMS_KEY_NAME

Zastąp KMS_KEY_NAME nazwą przypisaną do klucza. Użyj pełnej nazwy zasobu klucza w tym formacie:

projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID

Klonowanie bazy danych chronionej kluczem CMEK do domyślnego szyfrowania

Aby sklonować do domyślnego szyfrowania Google (bez CMEK), ustaw flagę encryption-type w ten sposób:

firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=GOOGLE_DEFAULT_ENCRYPTION

Klonowanie bazy danych chronionej kluczem CMEK do tego samego typu szyfrowania co źródłowa baza danych

Aby sklonować do tego samego typu szyfrowania co źródłowa baza danych, ustaw flagę encryption-type w następujący sposób:

  firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=USE_SOURCE_ENCRYPTION

Jest to też działanie domyślne, jeśli parametr --encryption-type nie jest określony.

Wyświetlanie używanego klucza

gcloud

Aby sprawdzić konfigurację kluczy CMEK bazy danych, możesz użyć polecenia gcloud CLI databases describe:

gcloud firestore databases describe \
  --database=DATABASE_ID \
  --project=FIRESTORE_PROJECT

W odpowiedzi w polu cmekConfig powinny pojawić się informacje o kluczach CMEK podobne do tych:

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

Odpowiedź zawiera te informacje:

  • kmsKeyName: pełna nazwa zasobu klucza używanego do szyfrowania bazy danych chronionej przez CMEK.
  • activeKeyVersion: lista wszystkich wersji kluczy używanych przez bazę danych chronioną kluczem CMEK. Podczas rotacji kluczy możesz mieć wiele aktywnych wersji klucza. Podczas rotacji kluczy muszą być dostępne zarówno stara, jak i nowa wersja klucza. Nie wyłączaj starej wersji klucza, dopóki nie przestanie się ona pojawiać w polu activeKeyVersion.

Interfejs API typu REST

Żądanie HTTP:

GET https://firestore.googleapis.com/v1/{name=projects/FIRESTORE_PROJECT/databases/DATABASE_ID}

W treści żądania skonfiguruj klucz CMEK w polu cmek_config.kms_key_name. Ustaw pełny identyfikator zasobu klucza Cloud KMS. Dozwolony jest tylko klucz w tej samej lokalizacji co ta baza danych.

Ta wartość powinna być identyfikatorem zasobu klucza Cloud KMS w formacie projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}.

Więcej informacji o innych polach znajdziesz na stronie database create.

Przykładowe żądanie:

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"

Przykładowa odpowiedź:

{
  "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"
    ]
  },
  ...
}

Wyłączanie klucza

Aby wyłączyć klucz powiązany z bazą danych, wykonaj te czynności:

  1. Wyświetlanie wersji kluczy używanych w bazie danych
  2. Wyłącz te wersje kluczy
  3. Poczekaj, aż zmiana zostanie wprowadzona, i sprawdź, czy dane nie są już dostępne. Zmiany zwykle zaczynają obowiązywać w ciągu kilku minut, ale ich zastosowanie może potrwać do 3 godzin.

Gdy klucz używany przez bazę danych jest wyłączony, możesz otrzymać wyjątek INVALID_ARGUMENT z dodatkowymi szczegółami w komunikacie o błędzie, na przykład:

{
  "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."
      }
    ]
  }
}

Włączanie klucza

Aby ponownie włączyć klucz powiązany z bazą danych, wykonaj te czynności:

  1. Wyświetlanie wersji kluczy używanych w bazie danych
  2. Włącz te wersje klucza
  3. Poczekaj, aż zmiana zostanie wprowadzona, i sprawdź, czy dane nie są już dostępne. Zmiany zwykle zaczynają obowiązywać w ciągu kilku minut, ale ich zastosowanie może potrwać do 3 godzin.

Wyświetlanie logów kontrolnych klucza Cloud KMS

Zanim włączysz logi kontrolne dostępu do danych w Cloud KMS, zapoznaj się z logami kontrolnymi Cloud.

Logi kontrolne dostępu do danych Cloud KMS pokazują, kiedy Cloud Firestore lub inne usługi skonfigurowane do korzystania z klucza CMEK wywołują Cloud KMS w celu szyfrowania lub odszyfrowywania. Cloud Firestore nie wysyła wywołania szyfrowania ani odszyfrowywania przy każdym żądaniu danych, ale utrzymuje proces, który okresowo sprawdza klucz. Wyniki ankiety pojawią się w dziennikach kontrolnych.

Logi kontrolne możesz skonfigurować i korzystać z nich w konsoli Google Cloud:

  1. Upewnij się, że w projekcie włączone jest logowanie dla interfejsu Cloud KMS API.

  2. W konsoli Google Cloud otwórz Cloud Logging.

    Otwórz: Cloud Logging

  3. Ogranicz wpisy logu do klucza Cloud KMS, dodając do kreatora zapytań te wiersze:

    resource.type="cloudkms_cryptokey"
    resource.labels.key_ring_id = KMS_KEYRING
    resource.labels.crypto_key_id = KMS_KEY
    resource.labels.location=KMS_LOCATION
    

    Zastąp następujące elementy:

    • KMS_KEY na nazwę klucza CMEK,
    • KMS_KEYRING pękiem kluczy KMS zawierającym klucz,
    • KMS_LOCATION z lokalizacją klucza i pęku kluczy.

    Dziennik zawiera kilka wpisów logu co około 5 minut na bazę danych. Wpisy logu wyglądają podobnie do tych przykładów:

    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."
    

Szczegółowe informacje o interpretowaniu logów kontrolnych znajdziesz w artykule Informacje o logach kontrolnych.

Konfigurowanie zasady organizacji dotyczącej kluczy CMEK

Aby określić wymagania dotyczące zgodności szyfrowania baz danych Cloud Firestore w organizacji, użyj ograniczenia zasad organizacji dotyczącego CMEK.

Wymagaj ochrony kluczem CMEK

Skonfiguruj constraints/gcp.restrictNonCmekServices, aby wymagać kluczy CMEK do tworzenia baz danych Cloud Firestore. Ustaw ograniczenie na deny i dodaj firestore.googleapis.com do listy odrzuconych, na przykład:

gcloud resource-manager org-policies deny gcp.restrictNonCmekServices  is:firestore.googleapis.com --project=FIRESTORE_PROJECT

Zastąp FIRESTORE_PROJECT projektem, który chcesz ograniczyć.

Więcej informacji o konfigurowaniu zasad organizacji znajdziesz w artykule o tworzeniu i edytowaniu zasad.

Po wejściu zasady w życie, jeśli spróbujesz utworzyć bazę danych bez klucza CMEK w projekcie, którego dotyczy zasada, otrzymasz wyjątek FAILED_PRECONDITION i komunikat o błędzie. Wyjątek wygląda na przykład tak:

{
  "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."
          }
        ]

Ograniczanie użycia kluczy CMEK

Aby ograniczyć klucze Cloud KMS używane do zabezpieczenia za pomocą klucza CMEK, skonfiguruj ograniczenie constraints/gcp.restrictCmekCryptoKeyProjects.

W przypadku ograniczenia listy akceptowane wartości to wskaźniki hierarchii zasobów (np. projects/PROJECT_ID, under:folders/FOLDER_ID i under:organizations/ORGANIZATION_ID). Aby użyć tego ograniczenia, skonfiguruj listę wskaźników hierarchii zasobów i ustaw ograniczenie na Zezwalaj. Ta konfiguracja ogranicza obsługiwane usługi, dzięki czemu klucze CMEK można wybierać tylko z wymienionych projektów, folderów i organizacji. Żądania utworzenia zasobów chronionych kluczem CMEK w skonfigurowanych usługach nie powiodą się bez klucza Cloud Firestore z jednego z dozwolonych zasobów.

Poniższy przykład zezwala tylko na klucze z ALLOWED_KEY_PROJECT_ID w przypadku baz danych chronionych za pomocą klucza CMEK w określonym projekcie:

gcloud resource-manager org-policies allow gcp.restrictCmekCryptoKeyProjects \
under:projects/<var>ALLOWED_KEY_PROJECT_ID</var> \
--project=<var>FIRESTORE_PROJECT</var>

Gdy zasada zacznie obowiązywać, w przypadku naruszenia ograniczenia otrzymasz wyjątek FAILED_PRECONDITION i komunikat o błędzie. Wyjątek wygląda tak:

{
  "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."
          }
        ]
      }
    ]
  }
}

Co dalej?