데이터 관리자 API는 다음 키 관리 서비스를 사용하여 데이터 암호화를 지원합니다.
일부 사용 사례에 대한 지원은 키 관리 서비스 (KMS)에 따라 다릅니다.
| 카테고리 | 사용 사례 | Google Cloud KMS | AWS KMS |
|---|---|---|---|
| 잠재고객 | 잠재고객 회원 보내기 | ||
| 이벤트 | 오프라인 전환 또는 리드 확보용 향상된 전환 | ||
| 이벤트 | Google Ads 대상으로 전송되는 이벤트(추가 데이터 소스) | ||
| 이벤트 | Google 애널리틱스 대상으로 전송되는 이벤트(추가 데이터 소스) |
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
키 만들기
자세한 내용은 Cloud Key Management Service 개요를 참고하세요.
키링을 만듭니다.
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"출력의
KeyMetadata아래에 있는Arn를 확인합니다. 이 Amazon 리소스 이름 (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 ID 공급업체 만들기
OpenID Connect (OIDC) ID 공급업체 만들기 AWS 계정당 이 단계를 한 번만 수행하면 됩니다.
aws iam create-open-id-connect-provider \
--url https://confidentialcomputing.googleapis.com \
--client-id-list AUDIENCE \
--thumbprint-list "08745487e891c19e3078c1f2a07e452950ef36f6"
출력에서 OIDC 제공업체 ARN을 확인합니다. 이 값은 다른 단계에서 필요합니다.
AWS_OIDC_PROVIDER_ARN
IAM 정책을 만듭니다.
다음 콘텐츠로
kms-decrypt-policy.json이라는 JSON 파일을 만듭니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "AWS_KEY_ARN" } ] }JSON 파일과 원하는 정책 이름을 사용하여 IAM 정책을 만듭니다.
aws iam create-policy \ --policy-name "AWS_POLICY_NAME" \ --policy-document file://kms-decrypt-policy.json출력에서 IAM 정책 ARN을 확인합니다. 이 값은 다른 단계에서 필요합니다.
AWS_IAM_POLICY_ARN
IAM 역할 만들기 및 연결
다음 콘텐츠와 이전 단계의 OIDC 제공자 ARN을 사용하여
role-trust-policy.json이라는 JSON 파일을 만듭니다.{ "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.jsonIAM 정책에 역할 정책을 연결합니다.
aws iam attach-role-policy \ --role-name "AWS_IAM_ROLE_NAME" \ --policy-arn "AWS_IAM_POLICY_ARN"
데이터 암호화
Data Manager API에서 암호화를 사용하려면 데이터 암호화 키 (DEK)가 필요합니다. DEK는 데이터를 암호화하는 데 사용하는 대칭 키입니다. DEK는 Google Cloud 또는 AWS KMS 키를 사용하여 암호화됩니다. 암호화된 DEK를 요청의 일부로 전송합니다.
암호화 요청의 데이터를 준비하려면 암호화되지 않은 데이터에 사용하는 것과 동일한 형식 지정 및 해싱 가이드라인을 따르세요.
해시되지 않은 값을 암호화하지 마세요. 예를 들어 AddressInfo의 region_code 또는 postal_code입니다.
각 필드의 데이터가 형식이 지정되고 해싱되면 다음 단계에 따라 해싱된 값을 암호화합니다.
- Base64 인코딩을 사용하여 해시 바이트를 인코딩합니다.
- DEK를 사용하여 Base64로 인코딩된 해시를 암호화합니다.
- 16진수 또는 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 라이브러리 및 유틸리티를 사용하여 요청을 구성하고 전송하려면 Java용 IngestAudienceMembersWithEncryption 코드 샘플 또는 Python용 ingest_audience_members_with_encryption 코드 샘플을 참고하세요.