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

Вот как отправлять зашифрованные данные в запросах на получение информации от участников аудитории.

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

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

  2. Чтобы убедиться, что ваши компоненты gcloud обновлены, выполните следующую команду.

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

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

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

    gcloud config set project PROJECT_ID
    

Создать ключ

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

  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 == '_SPACE' &&
         'STABLE' in assertion.submods._space.support_attributes &&
         ['[email protected]'].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://computing.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"
    

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

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

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

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

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

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

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

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

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

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