Вот как отправлять зашифрованные данные в запросах на получение информации от участников аудитории.
Настройте интерфейс командной строки Google Cloud
Установите и инициализируйте интерфейс командной строки Google Cloud.
Чтобы убедиться, что ваши компоненты
gcloud
обновлены, выполните следующую команду.gcloud components update
Чтобы выбрать или создать новый проект Google Cloud и включить службу управления облачными ключами , нажмите Включить Cloud KMS .
Включить облачный KMSЧтобы установить проект в вашей среде, используйте команду
gcloud config set
. Чтобы проверить, установлен ли уже проект в вашей среде, запуститеgcloud config list
.Если
project
не установлен или вы хотите использовать другой проект для своего ключа, выполнитеgcloud config set
:gcloud config set project PROJECT_ID
Создать ключ
Более подробную информацию см. в документации по службе управления ключами .
Создайте брелок для ключей.
gcloud kms keyrings create KEY_RING_NAME \ --location KEY_RING_LOCATION
Для получения дополнительной информации создайте связку ключей .
Создайте ключ в связке ключей. 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 .
Создайте пул удостоверений рабочей нагрузки (WIP).
location
пула должно бытьglobal
.gcloud iam workload-identity-pools create WIP_ID \ --location=global \ --display-name="WIP_DISPLAY_NAME" \ --description="WIP_DESCRIPTION"
Для получения дополнительной информации см. раздел Управление пулами и поставщиками удостоверений рабочей нагрузки .
Создайте поставщика пула удостоверений рабочей нагрузки. Аргумент
--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"
Предоставьте роль расшифровщика ключей поставщику 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
.
После того как данные для каждого поля отформатированы и хешированы, зашифруйте хешированное значение, выполнив следующие шаги:
- Закодируйте байты хеша с помощью кодировки Base64.
- Зашифруйте хэш в кодировке Base64, используя ваш DEK.
- Закодируйте выходные данные процесса шифрования с помощью шестнадцатеричного кодирования или кодирования Base64.
- Используйте закодированное значение для поля.
- Установите
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.