Aby wysłać zaszyfrowane dane:
Konfigurowanie interfejsu wiersza poleceń Google Cloud
Zainstaluj i zainicjuj interfejs wiersza poleceń Google Cloud.
Aby mieć pewność, że komponenty
gcloud
są aktualne, uruchom to polecenie:gcloud components update
Aby wybrać lub utworzyć nowy projekt Google Cloud i włączyć Cloud Key Management Service, kliknij Włącz Cloud KMS.
Aby ustawić projekt w środowisku, użyj polecenia
gcloud config set
. Aby sprawdzić, czy projekt jest już skonfigurowany w Twoim środowisku, uruchom poleceniegcloud config list
.Jeśli nie ustawiono
project
lub chcesz użyć innego projektu dla klucza, uruchomgcloud config set
:gcloud config set project PROJECT_ID
Utwórz klucz
Więcej informacji znajdziesz w dokumentacji usługi zarządzania kluczami.
Utwórz pęk kluczy.
gcloud kms keyrings create KEY_RING_NAME \ --location KEY_RING_LOCATION
Więcej informacji znajdziesz w artykule Tworzenie pęku kluczy.
Utwórz klucz w pęku kluczy. Symbol ROTATION_PERIOD oznacza interwał rotacji klucza, a symbol NEXT_ROTATION_TIME – datę i godzinę pierwszej rotacji.
Jeśli na przykład chcesz obracać klucz co 30 dni i wykonać pierwszą rotację za tydzień, ustaw ROTATION_PERIOD na
30d
i NEXT_ROTATION_TIME na$(date --utc --date="next week" --iso-8601=seconds)
.gcloud kms keys create KEY_NAME \ --keyring KEY_RING_NAME \ --location KEY_RING_LOCATION \ --purpose "encryption" \ --rotation-period ROTATION_PERIOD \ --next-rotation-time "NEXT_ROTATION_TIME"
Więcej informacji znajdziesz w artykule Tworzenie klucza.
Tworzenie dostawcy puli tożsamości zadań
Ta sekcja zawiera krótkie omówienie federacji tożsamości zadań. Więcej informacji znajdziesz w dokumentacji federacji tożsamości zadań.
Utwórz pulę tożsamości zadań. Wartość
location
puli musi być równaglobal
.gcloud iam workload-identity-pools create WIP_ID \ --location=global \ --display-name="WIP_DISPLAY_NAME" \ --description="WIP_DESCRIPTION"
Więcej informacji znajdziesz w artykule Zarządzanie pulami tożsamości zadań i ich dostawcami.
Utwórz dostawcę puli tożsamości zadań. Argument
--attribute-condition
sprawdza, czy elementem wywołującym jest konto usługi poufnego dopasowywania.gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \ --location=global \ --workload-identity-pool=WIP_ID \ --display-name="PROVIDER_DISPLAY_NAME" \ --description="PROVIDER_DESCRIPTION" \ --attribute-mapping="google.subject=assertion.sub,google.groups=[\"PROVIDER_ID\"]" \ --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' && 'STABLE' in assertion.submods.confidential_space.support_attributes && ['cfm-services@admcloud-cfm-services.iam.gserviceaccount.com'].exists( a, a in assertion.google_service_accounts) && 'ECDSA_P256_SHA256:6b1f357b59e9407fb017ca0e3e783b2bd5acbfea6c83dd82971a4150df5b25f9' in assertion.submods.container.image_signatures.map(sig, sig.signature_algorithm+':'+sig.key_id)" \ --issuer-uri="https://confidentialcomputing.googleapis.com" \ --allowed-audiences="https://sts.googleapis.com"
Przyznaj dostawcy puli tożsamości zadań rolę narzędzia do odszyfrowywania kluczy.
# Grants the role to the WIP provider. gcloud kms keys add-iam-policy-binding KEY_NAME \ --keyring KEY_RING_NAME \ --location KEY_RING_LOCATION \ --member "principalSet://iam.googleapis.com/projects/PROJECT_ID/locations/global/workloadIdentityPools/WIP_ID/group/PROVIDER_ID" \ --role "roles/cloudkms.cryptoKeyDecrypter"
Szyfrowanie danych
Szyfrowanie w interfejsie Data Manager API wymaga klucza szyfrującego dane (DEK). DEK to klucz symetryczny, którego używasz do szyfrowania danych. Klucz DEK jest szyfrowany za pomocą klucza Google Cloud KMS. Wysyłasz zaszyfrowany klucz DEK w ramach żądania.
Aby przygotować dane w żądaniu do zaszyfrowania, postępuj zgodnie z tymi samymi wytycznymi dotyczącymi formatowania i szyfrowania, których używasz w przypadku danych niezaszyfrowanych.
Nie szyfruj wartości niezaszyfrowanych. Na przykład region_code
lub postal_code
AddressInfo
.
Po sformatowaniu i zaszyfrowaniu danych w każdym polu zaszyfruj zaszyfrowaną wartość, wykonując te czynności:
- Zakoduj bajty skrótu za pomocą kodowania Base64.
- Zaszyfruj skrót zakodowany w formacie Base64 za pomocą klucza DEK.
- Zakoduj dane wyjściowe procesu szyfrowania za pomocą kodowania szesnastkowego lub Base64.
- Użyj zakodowanej wartości pola.
- Ustaw w żądaniu wartości
encryption_info
iencoding
.
Aby wykonać ostatni krok, zmień
IngestAudienceMembersRequest
lub
IngestEventsRequest
tak, aby wskazywały, że dane są zaszyfrowane:
- Ustaw pole
encryption_info
. - W polu
encoding
ustaw kodowanie użyte do zakodowania wartości zaszyfrowanego pola.
Oto fragment żądania z ustawionymi polami szyfrowania i kodowania:
{
...
"encryptionInfo": {
"gcpWrappedKeyInfo": {
"kekUri": "gcp-kms://projects/PROJECT_ID/locations/KEY_RING_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME",
"wipProvider": "projects/PROJECT_ID/locations/global/workloadIdentityPools/WIP_ID/providers/PROVIDER_ID",
"keyType": "XCHACHA20_POLY1305",
"encryptedDek": "ENCRYPTED_DEK"
}
},
"encoding": "ENCODING"
}
Aby użyć biblioteki i narzędzi interfejsu Data Manager API do utworzenia i wysłania żądania, zapoznaj się z IngestAudienceMembersWithEncryption
przykładowym kodem w języku Java lub ingest_audience_members_with_encryption
przykładowym kodem w języku Python.