Kullanıcı verilerini şifreleme

Veri Yöneticisi API'si, aşağıdaki anahtar yönetimi 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 hedefi için ek veri kaynağı olarak gönderilen etkinlikler
Etkinlikler Google Analytics hedefi için ek veri kaynağı olarak gönderilen etkinlikler

Google Cloud KMS'yi ayarlama

Şifreleme için Google Cloud KMS kaynaklarını ayarlama adımlarını burada bulabilirsiniz.

Google Cloud komut satırı arayüzünü ayarlama

  1. Google Cloud komut satırı arayüzünü yükleyin ve başlatı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 şu komutu çalıştırın: gcloud config list.

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

    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 anahtar oluşturma ROTATION_PERIOD, anahtarın döndürülme aralığını, NEXT_ROTATION_TIME ise ilk döndürmenin gerçekleşmesi gereken tarihi ve saati gösterir.

    Örneğin, anahtarı 30 günde bir döndürmek ve ilk döndürmeyi 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 Pool sağlayıcısı oluşturma

Bu bölümde, Workload Identity Federation'a kısa bir genel bakış sunulmaktadır. Daha fazla bilgi için Workload Identity Federation başlıklı makaleyi inceleyin.

  1. Workload Identity Pool (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 Pool sağlayıcısı oluşturun. --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ünü verin.

    # 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 şifrele bölümüne gidin.

AWS KMS'yi ayarlama

Şifreleme için AWS KMS kaynaklarını ayarlama adımlarını aşağıda bulabilirsiniz.

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 kurulumun çıktısından bir snippet 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. Bir 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 öğesini inceleyin. Bu Amazon Kaynak Adı'na (ARN) diğer adımlarda ihtiyacınız olacak.

    AWS_KEY_ARN
    
  2. İsteğe bağlı: İstediğiniz takma ad adını kullanarak bir 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ını oluşturmak için yararlıdır. Örneğin, anahtar ARN'sini alias 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ı AWS hesabı başına yalnızca bir kez gerçekleştirmeniz gerekir.

aws iam create-open-id-connect-provider \
  --url https://confidentialcomputing.googleapis.com \
  --client-id-list AUDIENCE \
  --thumbprint-list "08745487e891c19e3078c1f2a07e452950ef36f6"

Çıktıdaki OIDC sağlayıcı ARN'sini not edin. Bu bilgiye diğer adımlarda ihtiyacınız olacaktır.

AWS_OIDC_PROVIDER_ARN

IAM politikası oluşturma

  1. Aşağıdaki içeriklere sahip 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 IAM politikası oluşturun.

    aws iam create-policy \
      --policy-name "AWS_POLICY_NAME" \
      --policy-document file://kms-decrypt-policy.json
    

    Çıktıdaki IAM politikası ARN'sini not edin. Bu bilgiye diğer adımlarda ihtiyacınız olacaktır.

    AWS_IAM_POLICY_ARN
    

IAM rolü oluşturma ve ekleme

  1. Aşağıdaki içeriklere ve önceki adımdaki OIDC sağlayıcı ARN'sine sahip 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. Seçtiğiniz bir rol adıyla IAM rolü oluşturun.

    aws iam create-role \
      --role-name "AWS_IAM_ROLE_NAME" \
      --assume-role-policy-document file://role-trust-policy.json
    
  3. IAM politikasına rol politikasını ekleyin.

    aws iam attach-role-policy \
      --role-name "AWS_IAM_ROLE_NAME" \
      --policy-arn "AWS_IAM_POLICY_ARN"
    

Verileri şifreleme

Veri Yöneticisi API'sinde şifreleme için veri şifreleme anahtarı (DEK) gerekir. DEK, verileri şifrelemek için kullandığınız simetrik bir anahtardır. DEK'niz, Google Cloud veya AWS KMS anahtarınız kullanılarak şifrelenir. Şifrelenmiş DEK'yi isteğin bir parçası olarak gönderirsiniz.

İsteklerdeki 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, AddressInfo öğesinin region_code veya postal_code.

Her alanın verileri biçimlendirilip karma oluşturma işlemi uygulandıktan sonra, aşağıdaki adımları kullanarak karma oluşturma işlemi uygulanmış değeri şifreleyin:

  1. Karma baytlarını Base64 kodlaması kullanarak kodlayın.
  2. Base64 olarak kodlanmış karmayı DEK'nizle şifreleyin.
  3. Şifreleme işleminden elde edilen çıktıyı onaltılık veya Base64 kodlaması kullanarak kodlayın.
  4. Alan için kodlanmış değeri kullanın.
  5. İstek için encryption_info ve encoding değerlerini ayarlayın.

Son adımı tamamlamak için IngestAudienceMembersRequest veya IngestEventsRequest simgesini 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 kodlama olarak ayarlayın.

Google Cloud KMS anahtarı kullanılan ve şifreleme ile kodlama alanlarının ayarlandığı bir isteğin snippet'ini aşağıda bulabilirsiniz:

{
  ...
  "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şturup göndermek için Data Manager API kitaplığını ve yardımcı programlarını kullanmak istiyorsanız Java için IngestAudienceMembersWithEncryption kod örneğine veya Python için ingest_audience_members_with_encryption kod örneğine bakın.