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 informacji o członkach grupy odbiorców
Zdarzenia Konwersje offline lub konwersje rozszerzone dotyczące potencjalnych klientów
Zdarzenia Zdarzenia wysyłane jako dodatkowe źródło danych do miejsca docelowego 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 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 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 polecenia gcloud config set. Aby sprawdzić, czy projekt jest już skonfigurowany w Twoim środowisku, uruchom polecenie 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 usługi 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. 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 30dNEXT_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ń. Wartość location puli musi być równa 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 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ę 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"
    
  4. Jeśli chcesz zaszyfrować dane o zdarzeniach na potrzeby konwersji offline i konwersji rozszerzonych dotyczących potencjalnych klientów, przyznaj rolę odszyfrowywania 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 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 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ę w sesji 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 sekcję Arn w sekcji KeyMetadata. Nazwa zasobu Amazon (ARN) będzie potrzebna w kolejnych 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 przydaje się 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 wartość ARN dostawcy OIDC z danych wyjściowych. Będzie on potrzebny w innych krokach.

AWS_OIDC_PROVIDER_ARN

Tworzenie 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 zasady IAM, używając pliku JSON i wybranej nazwy zasad.

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

    Zwróć uwagę na ARN zasad IAM 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 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 uprawnienia roli do 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 Google Cloud lub AWS 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:

  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 pola.
  5. Ustaw w żądaniu wartości encryption_infoencoding.

Aby wykonać ostatni krok, zmień IngestAudienceMembersRequest lub IngestEventsRequest tak, aby wskazywało, że dane zostały zaszyfrowane:

  • Ustaw pole encryption_info.
  • W polu encoding ustaw kodowanie użyte do zakodowania wartości zaszyfrowanego pola.

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 Data Manager API do tworzenia i wysyłania żądań, zapoznaj się z przykładowym kodem w języku Java IngestAudienceMembersWithEncryption lub Python ingest_audience_members_with_encryption.