Data Manager API, aşağıdaki anahtar yönetim hizmetlerini kullanarak verilerin şifrelenmesini destekler:
Bazı kullanım alanları için destek, anahtar yönetim hizmetine (KMS) göre farklılık gösterir:
| Kategori | Kullanım alanı | Google Cloud KMS | AWS KMS |
|---|---|---|---|
| Kitleler | Kitle üyelerini gönderme | ||
| Etkinlikler | Çevrimdışı dönüşümler veya potansiyel müşteriler için gelişmiş dönüşümler | ||
| Etkinlikler | Google Ads mağaza satışı dönüşümleri | ||
| Etkinlikler | Google Ads çok kaynaklı dönüşümleri | ||
| Etkinlikler | Google Analytics çok kaynaklı etkinlikleri |
Google Cloud KMS'yi ayarlama
Google Cloud KMS kaynaklarını şifreleme için ayarlama adımları aşağıda verilmiştir.
Google Cloud komut satırı arayüzünü ayarlama
Google Cloud komut satırı arayüzünü yükleyin ve ilk kullanıma hazırlayın.
Yeni bir Google Cloud projesi seçmek veya oluşturmak ve Cloud Key Management Service'i etkinleştirmek için Cloud KMS'yi etkinleştir'i tıklayın.
Cloud KMS'yi etkinleştirmeProjenizi ortamınızda ayarlamak için
gcloud config setkomutunu kullanın. Projenin ortamınızda ayarlanıp ayarlanmadığını kontrol etmek içingcloud config listkomutunu çalıştırın.projectayarlanmamışsa veya anahtarınız için farklı bir proje kullanmak istiyorsanızgcloud config setkomutunu çalıştırın:gcloud config set project PROJECT_ID
Anahtar oluştur
Daha fazla bilgi için Cloud Key Management Service'e genel bakış başlıklı makaleyi inceleyin.
Anahtarlık oluşturun.
gcloud kms keyrings create KEY_RING_NAME \ --location KEY_RING_LOCATIONDaha fazla bilgi için Anahtarlık oluşturma başlıklı makaleyi inceleyin.
Anahtarlıkta bir anahtar oluşturun. ROTATION_PERIOD, anahtarın rotasyon aralığını, NEXT_ROTATION_TIME ise ilk rotasyonun gerçekleşeceği tarih ve saati gösterir.
Örneğin, anahtarı 30 günde bir rotasyona tabi tutmak ve ilk rotasyonu 1 hafta içinde gerçekleştirmek için ROTATION_PERIOD değerini
30d, NEXT_ROTATION_TIME değerini ise$(date --utc --date="next week" --iso-8601=seconds)olarak ayarlayın.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"Daha fazla bilgi için Anahtar oluşturma başlıklı makaleyi inceleyin.
Workload Identity havuzu sağlayıcısı oluşturma
Bu bölümde, Workload Identity Federasyonu'na kısa bir genel bakış sunulmaktadır. Daha fazla bilgi için Workload Identity Federasyonu başlıklı makaleyi inceleyin.
Workload Identity Havuzu (WIP) oluşturun. Havuzun
locationdeğeriglobalolmalıdır.gcloud iam workload-identity-pools create WIP_ID \ --location=global \ --display-name="WIP_DISPLAY_NAME" \ --description="WIP_DESCRIPTION"Daha fazla bilgi için Workload Identity Pool'ları ve sağlayıcılarını yönetme başlıklı makaleyi inceleyin.
Workload Identity havuzu sağlayıcısı oluşturma
--attribute-conditionbağımsız değişkeni, arayanın gizli eşleşme hizmet hesabı olduğunu doğrular.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 sağlayıcısına anahtar şifre çözücü rolü verme
# 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"Çevrimdışı dönüşümler ve potansiyel müşteriler için gelişmiş dönüşümlerle ilgili etkinlik verilerini şifrelemek istiyorsanız Google hizmet hesabına (
datamanager-api@datamanager-ga.iam.gserviceaccount.com) anahtar şifre çözücü rolünü verin.# 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"
Verileri şifreleme bölümüne gidin.
AWS KMS'yi ayarlama
Şifreleme için AWS KMS kaynaklarını ayarlama adımları aşağıda verilmiştir.
AWS komut satırı arayüzünü ayarlama
- AWS Komut Satırı Arayüzü'nü yükleyin.
Yüklemeyi doğrulamak için aşağıdaki komutu çalıştırın:
aws --versionBaşarılı bir yükleme işleminin çıkış snippet'i aşağıda verilmiştir:
aws-cli/2.31.12 Python/3.13.7 ...
AWS kullanıcısı oluşturma ve oturum açma
- AWS Komut Satırı Arayüzü'nü kullanmayla ilgili ön koşulları tamamlayın.
- IAM Identity Center oturumunda oturum açın.
Anahtar oluştur
Simetrik KMS anahtarı (KEK) oluşturun.
aws kms create-key \ --key-usage ENCRYPT_DECRYPT \ --key-spec SYMMETRIC_DEFAULT \ --description "KEK for Confidential Matching Data Encryption"Çıkışta
KeyMetadataaltındakiArndeğerine dikkat edin. Diğer adımlarda bu Amazon Kaynak Adı'na (ARN) ihtiyacınız olacak.AWS_KEY_ARNİsteğe bağlı: İstediğiniz bir takma adı kullanarak anahtar takma adı oluşturun.
aws kms create-alias \ --alias-name "alias/AWS_KEY_ALIAS" \ --target-key-id AWS_KEY_ARNTakma ad zorunlu değildir ancak AWS Komut Satırı Arayüzü komutları oluşturmak için kullanışlıdır. Örneğin, anahtar ARN'sini takma adı kullanarak alabilirsiniz:
aws kms describe-key --key-id "alias/AWS_KEY_ALIAS" \ --query 'KeyMetadata.Arn' \ --output text
OpenID Connect kimlik sağlayıcısı oluşturma
OpenID Connect (OIDC) kimlik sağlayıcısı oluşturun. Bu adımı her AWS hesabı için yalnızca bir kez uygulamanız gerekir.
aws iam create-open-id-connect-provider \
--url https://confidentialcomputing.googleapis.com \
--client-id-list AUDIENCE \
--thumbprint-list "08745487e891c19e3078c1f2a07e452950ef36f6"
Çıkıştaki OIDC sağlayıcı ARN'sini not edin. Diğer adımlarda bu bilgiye ihtiyacınız olacak.
AWS_OIDC_PROVIDER_ARN
IAM politikası oluşturma
Aşağıdaki içeriklerle
kms-decrypt-policy.jsonadlı bir JSON dosyası oluşturun:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "AWS_KEY_ARN" } ] }JSON dosyasını ve seçtiğiniz bir politika adını kullanarak bir IAM politikası oluşturun.
aws iam create-policy \ --policy-name "AWS_POLICY_NAME" \ --policy-document file://kms-decrypt-policy.jsonÇıkıştaki IAM politikası ARN'sini not edin. Diğer adımlarda bu bilgiye ihtiyacınız olacak.
AWS_IAM_POLICY_ARN
IAM rolü oluşturma ve ekleme
Aşağıdaki içeriklerle ve önceki adımda elde ettiğiniz OIDC sağlayıcı ARN'siyle
role-trust-policy.jsonadlı bir JSON dosyası oluşturun:{ "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*" } } } ] }İstediğiniz rol adıyla bir IAM rolü oluşturun.
aws iam create-role \ --role-name "AWS_IAM_ROLE_NAME" \ --assume-role-policy-document file://role-trust-policy.jsonRol politikasını IAM politikasına ekleyin.
aws iam attach-role-policy \ --role-name "AWS_IAM_ROLE_NAME" \ --policy-arn "AWS_IAM_POLICY_ARN"
Verileri şifreleme
Data Manager API'de şifreleme için veri şifreleme anahtarı (DEK) gerekir. DEK, verileri şifrelemek için kullandığınız simetrik bir anahtardır. DEK'iniz, Google Cloud veya AWS KMS anahtar şifreleme anahtarınız (KEK) kullanılarak şifrelenir. Şifrelenmiş DEK, KEK URI'si ve WIP sağlayıcısını isteğin bir parçası olarak gönderirsiniz.
İstekteki verileri şifrelemeye hazırlamak için şifrelenmemiş verilerde kullandığınız biçimlendirme ve karma oluşturma kurallarını uygulayın.
Karma oluşturma işlemi uygulanmamış değerleri şifrelemeyin. Örneğin, bir AddressInfo'nin region_code, postal_code, city veya administrative_area değerlerini karma oluşturma işlemine tabi tutmayın.
Her alanın verileri biçimlendirilip karma oluşturma işlemi uygulandıktan sonra, aşağıdaki adımları uygulayarak karma oluşturma işlemi uygulanmış değeri şifreleyin:
Karma baytları Base64 kodlaması kullanarak kodlayın.
DEK'inizi kullanarak Base64 olarak kodlanmış karmayı şifreleyin. Gerekli şifre
XCHACHA20_POLY1305olduğundan Tink'inencrypt()işlevi için ilişkili bir veri parametresi gerekir. Bu parametre boş olmalıdır (örneğin, Python'dab""veya Java'danew byte[0]).nullveya boş olmayan bir değer iletirseniz Data Manager API'si verilerin şifresini çözemez.Şifreleme işleminden elde edilen çıkışı onaltılık veya Base64 kodlaması kullanarak kodlayın.
Alan için kodlanmış değeri kullanın.
İstekte
encryption_infoveencodingdeğerlerini ayarlayın.
Son adımı tamamlamak için IngestAudienceMembersRequest veya IngestEventsRequest öğesini değiştirerek verilerinizi şifrelediğinizi belirtin:
encryption_infoalanını ayarlayın.encodingalanını, şifrelenmiş alan değerlerini kodlamak için kullanılan kodlamaya ayarlayın.
Aşağıda, Google Cloud KMS anahtarı kullanan ve şifreleme ile kodlama alanları ayarlanmış bir istek snippet'i verilmiştir:
{
...
"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"
}
İstek oluşturmak ve göndermek için Data Manager API kitaplığını ve yardımcı programlarını kullanmak istiyorsanız Java için IngestAudienceMembers kod örneğine veya Python için ingest_audience_members kod örneğine bakın.
Şifreleme sorunları için teşhisleri kontrol etme
Şifrelenmiş verileri yükledikten sonra teşhis özelliğini kullanarak şifrelemeyle ilgili uyarılar (ör. PROCESSING_WARNING_REASON_KEK_PERMISSION_DENIED veya PROCESSING_WARNING_REASON_DEK_DECRYPTION_ERROR) olup olmadığını kontrol edin. Teşhisteki uyarıları giderin, istekleri tekrar gönderin ve değişikliklerinizden sonra teşhisin artık uyarı döndürmediğini doğrulayın.