رمزگذاری داده های کاربر

در اینجا نحوه ارسال داده‌های رمزگذاری‌شده در درخواست‌های جذب اعضای مخاطب آورده شده است.

رابط خط فرمان Google Cloud را تنظیم کنید

  1. رابط خط فرمان Google Cloud را نصب و مقداردهی اولیه کنید .

  2. برای اطمینان از به روز بودن اجزای gcloud ، دستور زیر را اجرا کنید.

    gcloud components update
    
  3. برای انتخاب یا ایجاد یک پروژه Google Cloud جدید و فعال کردن سرویس مدیریت کلید Cloud ، روی Enable 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 روز و انجام اولین چرخش در 1 هفته، 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"
    

    برای اطلاعات بیشتر، به ایجاد کلید مراجعه کنید.

یک ارائه دهنده استخر هویت حجم کار ایجاد کنید

این بخش مروری کوتاه بر Workload Identity Federation است. برای اطلاعات بیشتر، به مستندات فدراسیون هویت حجم کاری مراجعه کنید.

  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 یک کلید متقارن است که از آن برای رمزگذاری داده ها استفاده می کنید. DEK شما با استفاده از کلید Google Cloud KMS رمزگذاری می شود. شما DEK رمزگذاری شده را به عنوان بخشی از درخواست ارسال می کنید.

برای آماده‌سازی داده‌ها در درخواست رمزگذاری، همان دستورالعمل‌های قالب‌بندی و درهم‌سازی را که برای داده‌های رمزگذاری نشده استفاده می‌کنید، دنبال کنید.

مقادیر هش نشده را رمزگذاری نکنید. برای مثال، 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 برای جاوا یا ingest_audience_members_with_encryption برای Python مراجعه کنید.