Kullanıcı verilerini şifreleme

Şifrelenmiş verileri göndermek için:

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. gcloud bileşenlerinizin güncel olduğundan emin olmak için aşağıdaki komutu çalıştırın.

    gcloud components update
    
  3. 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
  4. 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 Key Management Service belgelerini 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şturun. 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 belgelerine bakın.

  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"
    

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 KMS anahtarınız kullanılarak şifrelenir. Şifrelenmiş DEK'yi istek kapsamında 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 öğ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 kodlama olarak ayarlayın.

Şifreleme ve kodlama alanlarının ayarlandığı bir isteğin snippet'i aşağıda 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 IngestAudienceMembersWithEncryption kod örneğine veya Python için ingest_audience_members_with_encryption kod örneğine bakın.