API менеджера данных поддерживает шифрование данных с использованием следующих служб управления ключами:
Поддержка некоторых сценариев использования различается в зависимости от службы управления ключами (KMS):
| Категория | Вариант использования | Google Cloud KMS | AWS KMS |
|---|---|---|---|
| Аудитории | Отправьте участников аудитории | ||
| События | Офлайн-конверсии или улучшенные конверсии для лидов | ||
| События | События отправляются в качестве дополнительного источника данных в целевую страницу Google Ads. | ||
| События | События отправляются в качестве дополнительного источника данных в целевую систему Google Analytics. |
Настройка Google Cloud KMS
Ниже описаны шаги по настройке ресурсов Google Cloud KMS для шифрования.
Настройте интерфейс командной строки Google Cloud.
Установите и инициализируйте интерфейс командной строки Google Cloud.
Чтобы выбрать или создать новый проект Google Cloud и включить службу управления ключами Cloud Key Management Service , нажмите кнопку «Включить Cloud KMS» .
Включить Cloud 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"Для получения более подробной информации см. раздел «Создание ключа» .
Создайте поставщика пула удостоверений для рабочих нагрузок.
В этом разделе представлен краткий обзор федерации идентификации рабочих нагрузок. Для получения более подробной информации см. раздел «Федерация идентификации рабочих нагрузок» .
Создайте пул учетных данных для рабочих нагрузок (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 == '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"Предоставьте поставщику 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"Если вы хотите зашифровать данные событий для офлайн-конверсий и расширенных конверсий для лидов, предоставьте роль дешифратора ключей сервисному аккаунту 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
- Установите интерфейс командной строки AWS .
Выполните следующую команду для проверки установки:
aws --versionВот фрагмент вывода, подтверждающий успешную установку:
aws-cli/2.31.12 Python/3.13.7 ...
Создайте пользователя AWS и войдите в систему.
- Выполните необходимые предварительные условия для использования интерфейса командной строки AWS .
- Войдите в сессию IAM Identity Center.
Создать ключ
Создайте симметричный ключ KMS (KEK) .
aws kms create-key \ --key-usage ENCRYPT_DECRYPT \ --key-spec SYMMETRIC_DEFAULT \ --description "KEK for Confidential Matching Data Encryption"Обратите внимание на
Arnв разделеKeyMetadataв выходных данных. Этот Amazon Resource Name (ARN) понадобится вам на следующих этапах.AWS_KEY_ARNНеобязательно: создайте псевдоним ключа , используя имя псевдонима по вашему выбору.
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.
Создайте JSON-файл с именем
kms-decrypt-policy.jsonсо следующим содержимым:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "AWS_KEY_ARN" } ] }Создайте политику 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.
Создайте 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*" } } } ] }Создайте роль IAM с именем по вашему выбору.
aws iam create-role \ --role-name "AWS_IAM_ROLE_NAME" \ --assume-role-policy-document file://role-trust-policy.jsonПривяжите политику роли к политике IAM.
aws iam attach-role-policy \ --role-name "AWS_IAM_ROLE_NAME" \ --policy-arn "AWS_IAM_POLICY_ARN"
Шифрование данных
Для шифрования в API Data Manager требуется ключ шифрования данных (DEK). DEK — это симметричный ключ, используемый для шифрования данных. Ваш DEK шифруется с помощью ключа шифрования KMS (KEK) от Google Cloud или AWS. Зашифрованный DEK, URI KEK и поставщик WIP отправляются в составе запроса.
Для подготовки данных в запросе к шифрованию следуйте тем же правилам форматирования и хеширования, которые вы использовали бы для незашифрованных данных.
Не шифруйте нехешированные значения. Например, region_code или postal_code из AddressInfo .
После форматирования и хеширования данных для каждого поля, зашифруйте хешированное значение, выполнив следующие шаги:
- Закодируйте байты хеша с помощью кодировки Base64.
- Зашифруйте хеш, закодированный в Base64, используя ваш DEK.
- Закодируйте результаты процесса шифрования, используя шестнадцатеричное кодирование или кодирование Base64.
- Используйте закодированное значение для поля.
- Установите параметры
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 и соответствующие утилиты для формирования и отправки запроса, см. пример кода IngestAudienceMembers для Java или пример кода ingest_audience_members для Python.
Проверьте диагностику на наличие проблем с шифрованием.
После загрузки зашифрованных данных используйте диагностику , чтобы проверить наличие предупреждений, связанных с шифрованием , таких как PROCESSING_WARNING_REASON_KEK_PERMISSION_DENIED или PROCESSING_WARNING_REASON_DEK_DECRYPTION_ERROR . Устраните все предупреждения в диагностике, отправьте запросы повторно и убедитесь, что после внесения изменений диагностика больше не выдает предупреждений.