Kullanıcı verilerini şifreleme

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

  1. Google Cloud komut satırı arayüzünü yükleyin ve ilk kullanıma hazırlayın.

  2. 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ştirme
  3. Projenizi ortamınızda ayarlamak için gcloud config set komutunu kullanın. Projenin ortamınızda ayarlanıp ayarlanmadığını kontrol etmek için gcloud config list komutunu çalıştırın.

    project ayarlanmamışsa veya anahtarınız için farklı bir proje kullanmak istiyorsanız gcloud config set komutunu ç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.

  1. Anahtarlık oluşturun.

    gcloud kms keyrings create KEY_RING_NAME \
        --location KEY_RING_LOCATION
    

    Daha fazla bilgi için Anahtarlık oluşturma başlıklı makaleyi inceleyin.

  2. 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.

  1. Workload Identity Havuzu (WIP) oluşturun. Havuzun location değeri global olmalı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.

  2. Workload Identity havuzu sağlayıcısı oluşturma --attribute-condition bağı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"
    
  3. 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"
    
  4. Ç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

  1. AWS Komut Satırı Arayüzü'nü yükleyin.
  2. Yüklemeyi doğrulamak için aşağıdaki komutu çalıştırın:

    aws --version
    

    Baş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

  1. AWS Komut Satırı Arayüzü'nü kullanmayla ilgili ön koşulları tamamlayın.
  2. IAM Identity Center oturumunda oturum açın.

Anahtar oluştur

  1. 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 KeyMetadata altındaki Arn değerine dikkat edin. Diğer adımlarda bu Amazon Kaynak Adı'na (ARN) ihtiyacınız olacak.

    AWS_KEY_ARN
    
  2. İ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_ARN
    

    Takma 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

  1. Aşağıdaki içeriklerle kms-decrypt-policy.json adlı bir JSON dosyası oluşturun:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "kms:Decrypt",
          "Resource": "AWS_KEY_ARN"
        }
      ]
    }
    
  2. 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

  1. Aşağıdaki içeriklerle ve önceki adımda elde ettiğiniz OIDC sağlayıcı ARN'siyle role-trust-policy.json adlı 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*"
                    }
                }
            }
        ]
    }
    
  2. İ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.json
    
  3. Rol 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:

  1. Karma baytları Base64 kodlaması kullanarak kodlayın.

  2. DEK'inizi kullanarak Base64 olarak kodlanmış karmayı şifreleyin. Gerekli şifre XCHACHA20_POLY1305 olduğundan Tink'in encrypt() işlevi için ilişkili bir veri parametresi gerekir. Bu parametre boş olmalıdır (örneğin, Python'da b"" veya Java'da new byte[0]). null veya boş olmayan bir değer iletirseniz Data Manager API'si verilerin şifresini çözemez.

  3. Şifreleme işleminden elde edilen çıkışı onaltılık veya Base64 kodlaması kullanarak kodlayın.

  4. Alan için kodlanmış değeri kullanın.

  5. İstekte encryption_info ve encoding değerlerini ayarlayın.

Son adımı tamamlamak için IngestAudienceMembersRequest veya IngestEventsRequest öğesini değiştirerek verilerinizi şifrelediğinizi belirtin:

  • encryption_info alanını ayarlayın.

  • encoding alanı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.