Шифрование пользовательских данных

API диспетчера данных поддерживает шифрование данных с использованием следующих служб управления ключами:

Поддержка некоторых вариантов использования различается в зависимости от службы управления ключами (KMS):

Категория Вариант использования Google Cloud KMS AWS KMS
Аудитория Отправить участников аудитории
События Офлайн-конверсии или улучшенные конверсии для лидов
События События, отправленные в качестве дополнительного источника данных в пункт назначения Google Ads
События События, отправляемые как дополнительный источник данных в пункт назначения Google Analytics

Настройте Google Cloud KMS

Ниже приведены шаги по настройке ресурсов Google Cloud KMS для шифрования.

Настройте интерфейс командной строки Google Cloud

  1. Установите и инициализируйте интерфейс командной строки Google Cloud.

  2. Чтобы выбрать или создать новый проект Google Cloud и включить службу управления ключами Cloud , нажмите Включить Cloud KMS .

    Включить облачный KMS
  3. Чтобы настроить проект в вашей среде, используйте команду gcloud config set . Чтобы проверить, настроен ли проект в вашей среде, выполните gcloud config list .

    Если project не установлен или вы хотите использовать другой проект для своего ключа, выполните gcloud config set :

    gcloud config set project PROJECT_ID
    

Создать ключ

Более подробную информацию см. в обзоре Cloud Key Management Service .

  1. Создайте связку ключей.

    gcloud kms keyrings create KEY_RING_NAME \
        --location KEY_RING_LOCATION
    

    Более подробную информацию см. в разделе Создание брелока .

  2. Создайте ключ в связке ключей. Параметр ROTATION_PERIOD указывает интервал ротации ключа, а параметр NEXT_ROTATION_TIME — дату и время первой ротации.

    Например, чтобы ротировать ключ каждые 30 дней и выполнять первую ротацию через 1 неделю, установите ROTATION_PERIOD на 30d и NEXT_ROTATION_TIME на $(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"
    

    Более подробную информацию см. в разделе Создание ключа .

Создайте поставщика пула удостоверений рабочей нагрузки

В этом разделе представлен краткий обзор Workload Identity Federation. Подробнее см. Workload Identity Federation .

  1. Создайте пул идентификаторов рабочей нагрузки (WIP). location пула должно быть global .

    gcloud iam workload-identity-pools create WIP_ID \
       --location=global \
       --display-name="WIP_DISPLAY_NAME" \
       --description="WIP_DESCRIPTION"
    

    Дополнительную информацию см. в разделе Управление пулами удостоверений рабочей нагрузки и поставщиками .

  2. Создайте поставщика пула удостоверений рабочей нагрузки. Аргумент --attribute-condition проверяет, является ли вызывающая сторона конфиденциальной учётной записью службы сопоставления.

    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. Предоставьте роль расшифровщика ключей поставщику WIP.

    # 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. Если вы хотите зашифровать данные событий для офлайн-конверсий и расширенных конверсий для лидов, предоставьте роль расшифровщика ключей учетной записи службы 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"
    

Перейдите в раздел Шифрование данных .

Настройка AWS KMS

Ниже приведены шаги по настройке ресурсов AWS KMS для шифрования.

Настройте интерфейс командной строки AWS

  1. Установите интерфейс командной строки AWS .
  2. Для проверки установки выполните следующую команду:

    aws --version
    

    Вот фрагмент вывода при успешной установке:

    aws-cli/2.31.12 Python/3.13.7 ...
    

Создайте пользователя AWS и войдите в систему.

  1. Выполните предварительные требования для использования интерфейса командной строки AWS .
  2. Войдите в сеанс Центра идентификации IAM.

Создать ключ

  1. Создайте симметричный ключ KMS (KEK) .

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

    Обратите внимание на Arn в поле KeyMetadata в выходных данных. Это имя ресурса Amazon (ARN) понадобится вам на других этапах.

    AWS_KEY_ARN
    
  2. Необязательно: создайте псевдоним ключа , используя имя псевдонима по вашему выбору.

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

    Псевдоним не является обязательным, но он полезен для создания команд интерфейса командной строки AWS. Например, вы можете получить ARN ключа, используя псевдоним:

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

Создайте поставщика удостоверений OpenID Connect

Создайте поставщика удостоверений OpenID Connect (OIDC) . Этот шаг необходимо выполнить только один раз для каждой учётной записи AWS.

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

Запишите ARN поставщика OIDC из выходных данных. Он понадобится вам на следующих этапах.

AWS_OIDC_PROVIDER_ARN

Создать политику IAM

  1. Создайте JSON-файл с именем kms-decrypt-policy.json со следующим содержимым:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "kms:Decrypt",
          "Resource": "AWS_KEY_ARN"
        }
      ]
    }
    
  2. Создайте политику IAM, используя файл JSON и имя политики по вашему выбору.

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

    Обратите внимание на ARN IAM-политики в результатах. Он понадобится вам на следующих этапах.

    AWS_IAM_POLICY_ARN
    

Создайте и прикрепите роль IAM

  1. Создайте JSON-файл с именем role-trust-policy.json со следующим содержимым и ARN-номером поставщика OIDC из предыдущего шага:

    {
        "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. Создайте роль IAM с именем по вашему выбору.

    aws iam create-role \
      --role-name "AWS_IAM_ROLE_NAME" \
      --assume-role-policy-document file://role-trust-policy.json
    
  3. Прикрепите политику ролей к политике IAM.

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

Шифровать данные

Для шифрования в API диспетчера данных требуется ключ шифрования данных (DEK). DEK — это симметричный ключ, используемый для шифрования данных. Ваш DEK шифруется с помощью ключа Google Cloud или AWS KMS. Вы отправляете зашифрованный DEK вместе с запросом.

Чтобы подготовить данные в запросе к шифрованию, следуйте тем же правилам форматирования и хеширования, которые вы используете для незашифрованных данных.

Не шифруйте нехешированные значения. Например, region_code или postal_code в AddressInfo .

После того как данные для каждого поля отформатированы и хешированы, зашифруйте хешированное значение, выполнив следующие шаги:

  1. Закодируйте байты хеша с помощью кодировки Base64.
  2. Зашифруйте хэш в кодировке Base64, используя ваш DEK.
  3. Закодируйте выходные данные процесса шифрования с помощью шестнадцатеричного кодирования или кодирования Base64.
  4. Используйте закодированное значение для поля.
  5. Установите encryption_info и encoding в запросе.

Чтобы завершить последний шаг, измените IngestAudienceMembersRequest или IngestEventsRequest чтобы указать, что вы зашифровали свои данные:

  • Установите поле encryption_info .
  • Установите поле encoding в соответствии с кодировкой, используемой для кодирования зашифрованных значений поля.

Вот фрагмент запроса с использованием ключа Google Cloud KMS и установленными полями шифрования и кодирования:

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

Чтобы использовать библиотеку и утилиты API Data Manager для создания и отправки запроса, см. пример кода IngestAudienceMembersWithEncryption для Java или пример кода ingest_audience_members_with_encryption для Python.