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

رابط برنامه‌نویسی کاربردی مدیریت داده (Data Manager API) از رمزگذاری داده‌ها با استفاده از سرویس‌های مدیریت کلید زیر پشتیبانی می‌کند:

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

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

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

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

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

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

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

    فعال کردن 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"
    

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

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

این بخش مروری کوتاه بر Workload Identity Federation است. برای اطلاعات بیشتر، به 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"
    
  4. اگر می‌خواهید داده‌های رویداد را برای تبدیل‌های آفلاین و تبدیل‌های پیشرفته برای سرنخ‌ها رمزگذاری کنید، نقش رمزگشایی کلیدی را به حساب سرویس گوگل 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 شوید .

ایجاد یک کلید

  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 Resource Name (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 با محتوای زیر و ارائه دهنده OIDC به نام ARN از مرحله قبل ایجاد کنید:

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

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

مقادیر هش نشده را رمزگذاری نکنید. برای مثال، region_code یا postal_code مربوط به 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 جهت ساخت و ارسال درخواست، به نمونه کد IngestAudienceMembersWithEncryption برای جاوا یا نمونه کد ingest_audience_members_with_encryption برای پایتون مراجعه کنید.