تشفير بيانات المستخدمين

في ما يلي كيفية إرسال البيانات المشفّرة في طلبات نقل بيانات أفراد الجمهور.

إعداد واجهة سطر الأوامر في Google Cloud

  1. ثبِّت واجهة سطر الأوامر في Google Cloud و ابدأ استخدامها.

  2. لضمان تحديث مكوّنات gcloud، نفِّذ العبارة التالية:

    gcloud components update
    
  3. لاختيار مشروع جديد على Google Cloud أو إنشائه وتفعيل Cloud Key Management Service، انقر على تفعيل Cloud KMS.

    تفعيل Cloud KMS
  4. لضبط مشروعك في بيئتك، استخدِم الأمر gcloud config set. للتحقّق مما إذا كان المشروع قد تم إعداده في بيئتك، يمكنك تشغيل ملف برمجي مماثل لملف برمجي gcloud config list.

    إذا لم يتم ضبط project أو أردت استخدام مشروع مختلف لمفتاحك، شغِّل gcloud config set:

    gcloud config set project PROJECT_ID
    

إنشاء مفتاح

لمزيد من المعلومات، يُرجى الاطّلاع على مستندات خدمة إدارة مفاتيح التشفير.

  1. أنشئ سلسلة مفاتيح.

    gcloud kms keyrings create KEY_RING_NAME \
        --location KEY_RING_LOCATION
    

    لمزيد من المعلومات، أنشئ سلسلة مفاتيح.

  2. أنشئ مفتاحًا في سلسلة المفاتيح. يشير الرمز ROTATION_PERIOD إلى الفاصل الزمني لتبديل المفتاح، ويشير الرمز NEXT_ROTATION_TIME إلى التاريخ والوقت اللذَين يجب أن تحدث فيهما عملية التبديل الأولى.

    على سبيل المثال، لتبديل المفتاح كل 30 يومًا وتنفيذ عملية التبديل الأولى في أسبوع واحد، اضبط 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"
    

    لمزيد من المعلومات، يُرجى الاطّلاع على مقالة إنشاء مفتاح.

إنشاء موفِّر مجموعة معلومات تعريفية للمعالجة

يقدّم هذا القسم نظرة عامة موجزة عن ميزة "اتحاد هوية العمل". لمزيد من المعلومات، يُرجى الاطّلاع على مستندات مشاركة الهوية في أماكن العمل.

  1. أنشئ مجموعة معلومات تعريفية للمعالجة (WIP). يجب أن تكون قيمة location للمجموعة هي global.

    gcloud iam workload-identity-pools create WIP_ID \
       --location=global \
       --display-name="WIP_DISPLAY_NAME" \
       --description="WIP_DESCRIPTION"
    

    لمزيد من المعلومات، يُرجى الاطّلاع على مقالة إدارة موفّري ومجموعات المعلومات التعريفية.

  2. أنشئ موفِّرًا لمجموعة المعلومات التعريفية للمعالجة. تتحقّق الوسيطة --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"
    
  3. امنح دور أداة فك تشفير المفاتيح لموفّر 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"
    

تشفير البيانات

يتطلّب التشفير في Data Manager API مفتاح تشفير البيانات (DEK). مفتاح تشفير البيانات هو مفتاح تشفير متماثل تستخدمه لتشفير البيانات. يتم تشفير مفتاح تشفير البيانات (DEK) باستخدام مفتاح Google Cloud KMS. يتم إرسال مفتاح الجلسة المشفَّر كجزء من الطلب.

لإعداد البيانات في طلب التشفير، اتّبِع إرشادات التنسيق والتجزئة نفسها التي تستخدمها للبيانات غير المشفّرة.

لا تشفِّر القيم غير المجزّأة. على سبيل المثال، region_code أو postal_code AddressInfo

بعد تنسيق البيانات لكل حقل وتحويلها إلى سلسلة أجزاء، يمكنك تشفير القيمة المجزّأة باستخدام الخطوات التالية:

  1. رمِّز وحدات البايت الخاصة بالتجزئة باستخدام ترميز Base64.
  2. شفِّر التجزئة المُرمّزة بترميز Base64 باستخدام مفتاح التشفير العمومي (DEK).
  3. رمزِ المخرجات من عملية التشفير باستخدام ترميز سداسي أو Base64.
  4. استخدِم القيمة المشفّرة للحقل.
  5. اضبط encryption_info و encoding في الطلب.

لإكمال الخطوة الأخيرة، عدِّل الرمز IngestAudienceMembersRequest للإشارة إلى أنّك شغّلت ميزة تشفير البيانات:

  • اضبط حقل encryption_info.
  • اضبط الحقل encoding على الترميز المستخدَم لتشفير قيم الحقل المشفَّر.

في ما يلي مقتطف من طلب تم ضبط حقلَي التشفير والترميز فيه:

{
  ...
  "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"
}

لاستخدام مكتبة Data Manager API و الأدوات لإنشاء طلب وإرساله، اطّلِع على IngestAudienceMembersWithEncryption نموذج الرمز البرمجي لـ Java أو ingest_audience_members_with_encryption نموذج الرمز البرمجي لـ Python.