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

«میانای برنامه‌سازی کاربردی مدیر داده» از رمزگذاری داده‌ها بااستفاده از خدمات مدیریت کلید زیر پشتیبانی می‌کند:

پشتیبانی از برخی موارد استفاده براساس سرویس مدیریت کلید (KMS) متفاوت است:

دسته کاربرد Google Cloud KMS AWS KMS
مخاطبان ارسال اعضای مخاطب
رویدادها تبدیل‌های آفلاین یا تبدیل‌های بهبودیافته برای مشتریان بالقوه
رویدادها تبدیل‌های فروش فروشگاهی Google Ads
رویدادها تبدیل‌های چندمنبعی Google Ads
رویدادها رویدادهای چندمنبعی Google Analytics

راه‌اندازی Google Cloud KMS

در اینجا مراحل راه‌اندازی منابع Google Cloud KMS برای رمزگذاری آمده است.

راه‌اندازی میانای خط فرمان Google Cloud

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

  2. برای انتخاب یا ایجاد پروژه جدید Google Cloud و فعال کردن Cloud Key Management Service، روی فعال کردن Cloud KMS کلیک کنید.

    فعال کردن Cloud KMS
  3. برای تنظیم پروژه در محیط خود، از فرمان 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 نشان‌دهنده تاریخ و زمان وقوع اولین چرخش است.

    برای مثال، برای چرخاندن کلید هر ۳۰ روز و انجام اولین چرخش در ۱ هفته، 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"
    
  4. اگر می‌خواهید داده‌های رویداد را برای تبدیل‌های آفلاین و تبدیل‌های بهبودیافته برای مشتریان بالقوه رمزگذاری کنید، نقش رمزگشای کلید را به حساب خدمات Google datamanager-api@datamanager-ga.iam.gserviceaccount.com اعطا کنید.

    # 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"
    

به بخش رمزگذاری داده‌ها بروید.

راه‌اندازی AWS KMS

در اینجا مراحل راه‌اندازی منابع AWS KMS برای رمزگذاری آمده است.

راه‌اندازی «میانای خط فرمان AWS»

  1. «میانای خط فرمان AWS» را نصب کنید.
  2. برای درستی‌سنجی نصب، فرمان زیر را اجرا کنید:

    aws --version
    

    در اینجا گزیده‌ای از برونداد برای نصب موفق آورده شده است:

    aws-cli/2.31.12 Python/3.13.7 ...
    

راه‌اندازی کاربر AWS و ورود به سیستم

  1. پیش‌نیازهای استفاده از «میانای خط فرمان AWS» را تکمیل کنید.
  2. به سیستم جلسه IAM Identity Center وارد شوید.

ایجاد کلید

  1. کلید KMS متقارن (KEK) ایجاد کنید.

    aws kms create-key \
      --key-usage ENCRYPT_DECRYPT \
      --key-spec SYMMETRIC_DEFAULT \
      --description "KEK for Confidential Matching Data Encryption"
    

    به Arn زیر KeyMetadata در برونداد توجه کنید. در مراحل دیگر به این نام منبع Amazon (ARN) نیاز خواهید داشت.

    AWS_KEY_ARN
    
  2. اختیاری: بااستفاده از نام مستعار دلخواهتان، کلید مستعار ایجاد کنید.

    aws kms create-alias \
      --alias-name "alias/AWS_KEY_ALIAS" \
      --target-key-id AWS_KEY_ARN
    

    نام مستعار الزامی نیست، اما برای ساختن فرمان‌های «میانای خط فرمان AWS» مفید است. برای مثال، می‌توانید ARN کلید را بااستفاده از نام مستعار بازیابی کنید:

    aws kms describe-key --key-id "alias/AWS_KEY_ALIAS" \
      --query 'KeyMetadata.Arn' \
      --output text
    

ایجاد ارائه‌دهنده هویت OpenID Connect

ارائه‌دهنده هویت OpenID Connect (OIDC) ایجاد کنید. فقط یک‌بار برای هر حساب AWS نیاز است این مرحله را انجام دهید.

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

‫ARN ارائه‌دهنده OIDC را از برونداد یادداشت کنید. در مراحل دیگر به این مورد نیاز خواهید داشت.

AWS_OIDC_PROVIDER_ARN

ایجاد خط‌مشی IAM

  1. فایل JSON به‌نام kms-decrypt-policy.json با محتوای زیر ایجاد کنید:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "kms:Decrypt",
          "Resource": "AWS_KEY_ARN"
        }
      ]
    }
    
  2. بااستفاده از فایل JSON و نام خط‌مشی انتخابی خود، خط‌مشی IAM ایجاد کنید.

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

    ‫ARN خط‌مشی IAM را در برونداد یادداشت کنید. در مراحل دیگر به این مورد نیاز خواهید داشت.

    AWS_IAM_POLICY_ARN
    

ایجاد و پیوست کردن نقش IAM

  1. فایل JSON به‌نام role-trust-policy.json با محتوای زیر و ARN ارائه‌دهنده OIDC از مرحله قبلی ایجاد کنید:

    {
        "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. نقش IAM را با نام نقش انتخابی خودتان ایجاد کنید.

    aws iam create-role \
      --role-name "AWS_IAM_ROLE_NAME" \
      --assume-role-policy-document file://role-trust-policy.json
    
  3. خط‌مشی نقش را به خط‌مشی IAM پیوست کنید.

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

رمزگذاری داده‌ها

رمزگذاری در Data Manager API به کلید رمزگذاری داده (DEK) نیاز دارد. «کلید رمزگذاری داده» کلید متقارنی است که برای رمزگذاری داده‌ها استفاده می‌کنید. ‫DEK شما بااستفاده از کلید رمزگذاری کلید (KEK) سرویس مدیریت کلید Google Cloud یا AWS رمزگذاری می‌شود. شما DEK رمزگذاری‌شده، نشانی وب KEK، و ارائه‌دهنده WIP را به‌عنوان بخشی از درخواست ارسال می‌کنید.

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

مقادیر بدون درهم‌سازی رمزگذاری نشود. برای مثال، region_code، postal_code، city، یا administrative_area یک AddressInfo را درهم‌سازی نکنید.

پس‌از قالب‌بندی و درهم‌سازی داده‌های هر فیلد، مقدار درهم‌سازی‌شده را بااستفاده از مراحل زیر رمزگذاری کنید:

  1. بایت‌های درهم‌سازی را بااستفاده از کدبندی Base64 کدبندی کنید.
  2. درهم‌سازی کدبندی‌شده با Base64 را بااستفاده از DEK خود رمزگذاری کنید.
  3. برونداد فرایند رمزگذاری را بااستفاده از کدبندی هگزادسیمال یا Base64 کدبندی کنید.
  4. از مقدار کدبندی‌شده برای فیلد استفاده کنید.
  5. encryption_info و encoding را در درخواست تنظیم کنید.

برای تکمیل مرحله آخر، IngestAudienceMembersRequest یا IngestEventsRequest را اصلاح کنید تا نشان دهید داده‌هایتان را رمزگذاری کرده‌اید:

  • فیلد encryption_info را تنظیم کنید.
  • فیلد encoding را روی کدبندی مورداستفاده برای کدبندی مقادیر فیلد رمزگذاری‌شده تنظیم کنید.

در اینجا تکه‌ای از درخواست بااستفاده از کلید Google Cloud KMS و با فیلدهای رمزگذاری و کدبندی تنظیم‌شده آمده است:

{
  ...
  "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 برای ساختن و ارسال درخواست، به IngestAudienceMembers نمونه کد برای جاوا یا ingest_audience_members نمونه کد برای پایتون مراجعه کنید.

بررسی تشخیص خرابی برای مشکلات رمزگذاری

پس‌از بارگذاری داده‌های رمزگذاری‌شده، از عیب‌یابی برای بررسی هشدارهای مربوط به رمزگذاری، مانند PROCESSING_WARNING_REASON_KEK_PERMISSION_DENIED یا PROCESSING_WARNING_REASON_DEK_DECRYPTION_ERROR استفاده کنید. هرگونه هشدار در تشخیص خرابی را برطرف کنید، درخواست‌ها را دوباره ارسال کنید، و تأیید کنید که تشخیص خرابی دیگر پس‌از تغییرات شما هشدار برنمی‌گرداند.