Zaszyfruj dane użytkownika

Interfejs Data Manager API obsługuje szyfrowanie danych za pomocą tych usług zarządzania kluczami:

Obsługa niektórych przypadków użycia różni się w zależności od systemu zarządzania kluczami (KMS):

Kategoria Przypadek użycia Google Cloud KMS AWS KMS
Odbiorcy Wysyłanie informacji o odbiorcach
Zdarzenia Konwersje offline lub konwersje rozszerzone dotyczące potencjalnych klientów
Zdarzenia Konwersje polegające na sprzedaży w sklepie stacjonarnym w Google Ads
Zdarzenia Konwersje w Google Ads z wielu źródeł
Zdarzenia Zdarzenia Google Analytics z wielu źródeł

Konfigurowanie Google Cloud KMS

Oto instrukcje konfigurowania zasobów Google Cloud KMS na potrzeby szyfrowania.

Konfigurowanie interfejsu wiersza poleceń Google Cloud

  1. Zainstaluj i zainicjuj interfejs wiersza poleceń Google Cloud.

  2. Aby wybrać lub utworzyć nowy projekt w chmurze Google Cloud i włączyć Cloud Key Management Service, kliknij Włącz Cloud KMS.

    Włączanie Cloud KMS
  3. Aby ustawić projekt w środowisku, użyj polecenia gcloud config set. Aby sprawdzić, czy projekt jest już ustawiony w Twoim środowisku, uruchom gcloud config list.

    Jeśli nie ustawiono project lub chcesz użyć innego projektu dla klucza, uruchom gcloud config set:

    gcloud config set project PROJECT_ID
    

Utwórz klucz

Więcej informacji znajdziesz w omówieniu Cloud Key Management Service.

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

  2. Utwórz klucz w pęku kluczy. ROTATION_PERIOD wskazuje odstęp czasu, po którym klucz ma zostać poddany rotacji, a NEXT_ROTATION_TIME wskazuje datę i godzinę, kiedy powinna nastąpić pierwsza rotacja.

    Aby na przykład wykonywać rotację klucza co 30 dni, a pierwszą rotację przeprowadzić za tydzień, ustaw ROTATION_PERIOD na 30d, a 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 artykule na temat federacji tożsamości zadań.

  1. Utwórz pulę tożsamości zadań. location dla puli musi być global.

    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.

  2. 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"
    
  3. Przypisz rolę deszyfratora kluczy do dostawcy puli tożsamości zadań.

    # 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"
    
  4. Jeśli chcesz szyfrować dane zdarzeń na potrzeby konwersji offline i konwersji rozszerzonych dotyczących potencjalnych klientów, przyznaj rolę deszyfratora kluczy kontu usługi Google datamanager-api@datamanager-ga.iam.gserviceaccount.com.

    # Grants the role to the Google service account.
    gcloud kms keys add-iam-policy-binding KEY_NAME \
        --keyring KEY_RING_NAME \
        --location KEY_RING_LOCATION \
        --member "serviceAccount:datamanager-api@datamanager-ga.iam.gserviceaccount.com" \
        --role "roles/cloudkms.cryptoKeyDecrypter"
    

Przejdź do sekcji Szyfrowanie danych.

Konfigurowanie AWS KMS

Oto instrukcje konfigurowania zasobów AWS KMS na potrzeby szyfrowania.

Konfigurowanie interfejsu wiersza poleceń AWS

  1. Zainstaluj interfejs wiersza poleceń AWS.
  2. Aby sprawdzić instalację, uruchom to polecenie:

    aws --version
    

    Oto fragment danych wyjściowych po udanej instalacji:

    aws-cli/2.31.12 Python/3.13.7 ...
    

Konfigurowanie użytkownika AWS i logowanie się

  1. Spełnij wymagania wstępne dotyczące korzystania z interfejsu wiersza poleceń AWS.
  2. Zaloguj się na sesję IAM Identity Center.

Utwórz klucz

  1. Utwórz symetryczny klucz KMS (KEK).

    aws kms create-key \
      --key-usage ENCRYPT_DECRYPT \
      --key-spec SYMMETRIC_DEFAULT \
      --description "KEK for Confidential Matching Data Encryption"
    

    W danych wyjściowych zwróć uwagę na Arn w sekcji KeyMetadata. Ta nazwa zasobu Amazon (ARN) będzie potrzebna w innych krokach.

    AWS_KEY_ARN
    
  2. Opcjonalnie: utwórz alias klucza, używając wybranej nazwy aliasu.

    aws kms create-alias \
      --alias-name "alias/AWS_KEY_ALIAS" \
      --target-key-id AWS_KEY_ARN
    

    Alias nie jest wymagany, ale jest przydatny do tworzenia poleceń interfejsu wiersza poleceń AWS. Możesz na przykład pobrać ARN klucza za pomocą aliasu:

    aws kms describe-key --key-id "alias/AWS_KEY_ALIAS" \
      --query 'KeyMetadata.Arn' \
      --output text
    

Tworzenie dostawcy tożsamości OpenID Connect

Utwórz dostawcę tożsamości OpenID Connect (OIDC). Wystarczy wykonać ten krok tylko raz na konto AWS.

aws iam create-open-id-connect-provider \
  --url https://confidentialcomputing.googleapis.com \
  --client-id-list AUDIENCE \
  --thumbprint-list "08745487e891c19e3078c1f2a07e452950ef36f6"

Zanotuj ARN dostawcy OIDC z danych wyjściowych. Będzie on potrzebny w innych krokach.

AWS_OIDC_PROVIDER_ARN

Tworzenie zasady uprawnień

  1. Utwórz plik JSON o nazwie kms-decrypt-policy.json z tą zawartością:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "kms:Decrypt",
          "Resource": "AWS_KEY_ARN"
        }
      ]
    }
    
  2. Utwórz zasadę uprawnień, używając pliku JSON i wybranej nazwy zasady.

    aws iam create-policy \
      --policy-name "AWS_POLICY_NAME" \
      --policy-document file://kms-decrypt-policy.json
    

    Zanotuj ARN zasady uprawnień w danych wyjściowych. Będzie on potrzebny w innych krokach.

    AWS_IAM_POLICY_ARN
    

Tworzenie i dołączanie roli uprawnień

  1. Utwórz plik JSON o nazwie role-trust-policy.json z podaną niżej treścią i nazwą ARN dostawcy OIDC z poprzedniego kroku:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Federated": "AWS_OIDC_PROVIDER_ARN"
                },
                "Action": [
                    "sts:AssumeRoleWithWebIdentity",
                    "sts:TagSession"
                ],
                "Condition": {
                    "StringEquals": {
                        "confidentialcomputing.googleapis.com:aud": "cfm-awsresource",
                        "aws:RequestTag/swname": "CONFIDENTIAL_SPACE",
                        "aws:RequestTag/container.signatures.key_ids": "6b1f357b59e9407fb017ca0e3e783b2bd5acbfea6c83dd82971a4150df5b25f9"
                    },
                    "StringLike": {
                        "aws:RequestTag/confidential_space.support_attributes": "*STABLE*"
                    }
                }
            }
        ]
    }
    
  2. Utwórz rolę uprawnień o wybranej przez siebie nazwie.

    aws iam create-role \
      --role-name "AWS_IAM_ROLE_NAME" \
      --assume-role-policy-document file://role-trust-policy.json
    
  3. Dołącz zasadę roli do zasady uprawnień.

    aws iam attach-role-policy \
      --role-name "AWS_IAM_ROLE_NAME" \
      --policy-arn "AWS_IAM_POLICY_ARN"
    

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 szyfrującego klucze (KEK) Google Cloud lub AWS KMS. W ramach żądania wysyłasz zaszyfrowany klucz DEK, identyfikator URI klucza KEK i dostawcę WIP.

Aby przygotować dane w żądaniu do zaszyfrowania, postępuj zgodnie z tymi samymi wytycznymi dotyczącymi formatowania i haszowania, które obowiązują w przypadku danych niezaszyfrowanych.

Nie szyfruj wartości niezaszyfrowanych. Nie szyfruj na przykład region_code, postal_code, city ani administrative_area elementu AddressInfo.

Po sformatowaniu i zaszyfrowaniu danych w każdym polu zaszyfruj wartość skrótu, wykonując te czynności:

  1. Zakoduj bajty hasha za pomocą kodowania Base64.

  2. Zaszyfruj skrót zakodowany w formacie Base64 za pomocą klucza DEK. Ponieważ wymagany szyfr to XCHACHA20_POLY1305, funkcja encrypt() w Tink wymaga powiązanego parametru danych. Ten parametr musi być pusty (np. b"" w Pythonie lub new byte[0] w Javie). Jeśli przekażesz wartość null lub wartość niepustą, interfejs Data Manager API nie będzie mógł odszyfrować danych.

  3. Zakoduj dane wyjściowe z procesu szyfrowania za pomocą kodowania szesnastkowego lub Base64.

  4. Użyj zakodowanej wartości pola.

  5. Ustaw encryption_info i encoding w żądaniu.

Aby wykonać ostatni krok, zmodyfikuj IngestAudienceMembersRequest lub IngestEventsRequest, aby wskazać, że dane zostały zaszyfrowane:

  • Ustaw pole encryption_info.

  • W polu encoding ustaw kodowanie używane do kodowania zaszyfrowanych wartości pól.

Oto fragment żądania z użyciem klucza Google Cloud KMS i 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 przykładowym kodem IngestAudienceMembers w języku Java lub ingest_audience_members w języku Python.

Sprawdzanie diagnostyki pod kątem problemów z szyfrowaniem

Po przesłaniu zaszyfrowanych danych użyj narzędzia diagnostycznego, aby sprawdzić, czy nie ma ostrzeżeń związanych z szyfrowaniem, takich jak PROCESSING_WARNING_REASON_KEK_PERMISSION_DENIED lub PROCESSING_WARNING_REASON_DEK_DECRYPTION_ERROR. Rozwiąż problemy, których dotyczą ostrzeżenia w diagnostyce, ponownie wyślij żądania i sprawdź, czy po wprowadzeniu zmian diagnostyka nie zwraca już ostrzeżeń.