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 usługi zarządzania kluczami (KMS):

Kategoria Przypadek użycia Google Cloud KMS AWS KMS
Odbiorcy Wysyłanie kont należących do grupy odbiorców
Zdarzenia Konwersje offline lub konwersje rozszerzone dotyczące potencjalnych klientów
Zdarzenia Konwersje Google Ads polegające na sprzedaży w sklepie
Zdarzenia Zdarzenia wysyłane jako dodatkowe źródło danych do miejsca docelowego w Google Ads
Zdarzenia Zdarzenia wysyłane jako dodatkowe źródło danych do miejsca docelowego w Google Analytics

Konfigurowanie Google Cloud KMS

Oto czynności, które należy wykonać, aby skonfigurować zasoby Google Cloud KMS do 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łącz Cloud KMS
  3. Aby ustawić projekt w środowisku, użyj gcloud config set polecenia. Aby sprawdzić, czy projekt jest już ustawiony w Twoim środowisku, uruchom polecenie gcloud config list.

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

    gcloud config set project PROJECT_ID
    

Tworzenie klucza

Więcej informacji znajdziesz w artykule Omówienie 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. Wartość ROTATION_PERIOD wskazuje interwał rotacji klucza, a wartość NEXT_ROTATION_TIME wskazuje datę i godzinę, kiedy ma nastąpić pierwsza rotacja.

    Aby na przykład rotować klucz co 30 dni i przeprowadzić pierwszą rotację za tydzień, ustaw wartość ROTATION_PERIOD na 30d, a wartość 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 Federacja tożsamości zadań.

  1. Utwórz pulę tożsamości zadań. location puli musi mieć wartość 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. Przyznaj dostawcy puli tożsamości zadań rolę dekryptora klucza.

    # 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ę dekryptora klucza 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 czynności, które należy wykonać, aby skonfigurować zasoby AWS KMS do 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 w przypadku pomyślnej 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ę do sesji IAM Identity Center.

Tworzenie klucza

  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"
    

    Zanotuj wartość Arn w sekcji KeyMetadata w danych wyjściowych. Ten Amazon Resource Name (ARN) będzie potrzebny w kolejnych krokach.

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

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

    Alias nie jest wymagany, ale przydaje się do tworzenia poleceń interfejsu wiersza poleceń AWS. Na przykład możesz 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). Ten krok wystarczy wykonać 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 kolejnych 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ń za pomocą 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 kolejnych krokach.

    AWS_IAM_POLICY_ARN
    

Tworzenie i dołączanie roli uprawnień

  1. Utwórz plik JSON o nazwie role-trust-policy.json z tą zawartością i 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ń z wybraną nazwą roli.

    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. Twój 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ę puli tożsamości zadań.

Aby przygotować dane w żądaniu do szyfrowania, 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 w AddressInfo.

Gdy dane w każdym polu zostaną sformatowane i zaszyfrowane, zaszyfruj zaszyfrowaną wartość, wykonując te czynności:

  1. Zakoduj bajty skrótu za pomocą kodowania Base64.
  2. Zaszyfruj skrót zakodowany w formacie Base64 za pomocą klucza DEK.
  3. Zakoduj dane wyjściowe procesu szyfrowania za pomocą kodowania szesnastkowego lub Base64.
  4. Użyj zakodowanej wartości w polu.
  5. Ustaw w żądaniu wartości encryption_info i encoding.

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

  • Ustaw wartość pola encryption_info.
  • Ustaw wartość pola encoding na kodowanie używane do kodowania zaszyfrowanych wartości pól.

Oto fragment żądania używającego klucza Google Cloud KMS 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 tworzenia i wysyłania żądania, zapoznaj się z przykładowym kodem IngestAudienceMembers w języku Java lub przykładowym kodem ingest_audience_members w języku Python.

Sprawdzanie diagnostyki pod kątem problemów z szyfrowaniem

Po przesłaniu zaszyfrowanych danych użyj diagnostyki, 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 wskazane w ostrzeżeniach diagnostycznych, ponownie wyślij żądania i sprawdź, czy po wprowadzeniu zmian diagnostyka nie zwraca już ostrzeżeń.