ব্যবহারকারীর ডেটা এনক্রিপ্ট করা

Data Manager API নিম্নলিখিত কী ম্যানেজমেন্ট পরিষেবা ব্যবহার করে ডেটা এনক্রিপ্ট করতে সাহায্য করে:

কিছু ব্যবহারের ক্ষেত্রে কী ম্যানেজমেন্ট পরিষেবা (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 কমান্ড লাইন ইন্টারফেস কমান্ড তৈরি করার জন্য এটি কাজে লাগে। যেমন, আপনি alias ব্যবহার করে কীয়ের 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"

আউটপুট থেকে OIDC প্রদানকারীর ARN নোট করুন। অন্যান্য ধাপে আপনার এটি প্রয়োজন হবে।

AWS_OIDC_PROVIDER_ARN

IAM নীতি তৈরি করা

  1. নিম্নলিখিত কন্টেন্ট সহ kms-decrypt-policy.json নামের একটি 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
    

    আউটপুটে IAM নীতির ARN নোট করুন। অন্যান্য ধাপে আপনার এটি প্রয়োজন হবে।

    AWS_IAM_POLICY_ARN
    

IAM ভূমিকা তৈরি ও অ্যাটাচ করা

  1. নিম্নলিখিত কন্টেন্ট এবং আগের ধাপ থেকে OIDC প্রদানকারীর ARN সহ role-trust-policy.json নামের একটি JSON ফাইল তৈরি করুন:

    {
        "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 কী এনক্রিপশন কী (KEK) ব্যবহার করে এনক্রিপ্ট করা হয়। আপনি অনুরোধের অংশ হিসেবে এনক্রিপ্টেড DEK, KEK URI এবং WIP প্রদানকারী পাঠান।

এনক্রিপশনের অনুরোধে ডেটা প্রস্তুত করতে, আপনি এনক্রিপ্ট না করা ডেটার জন্য যে ফর্ম্যাটিং ও হ্যাশিং নির্দেশিকা ব্যবহার করতেন, সেই একই নির্দেশিকা অনুসরণ করুন।

আনহ্যাশ করা ভ্যালু এনক্রিপ্ট করবেন না। যেমন, কোনও AddressInfo-এর region_code, postal_code, city বা administrative_area হ্যাশ করবেন না।

প্রতিটি ফিল্ডের ডেটা ফর্ম্যাট ও হ্যাশ করা হয়ে গেলে, নিম্নলিখিত ধাপগুলি অনুসরণ করে হ্যাশ করা ভ্যালু এনক্রিপ্ট করুন:

  1. Base64 এনকোডিং ব্যবহার করে হ্যাশ বাইট এনকোড করুন।
  2. আপনার DEK ব্যবহার করে Base64-এনকোড করা হ্যাশ এনক্রিপ্ট করুন।
  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-এর লাইব্রেরি ও ইউটিলিটি ব্যবহার করতে, Java-এর জন্য IngestAudienceMembers কোড স্যাম্পেল অথবা Python-এর জন্য ingest_audience_members কোড স্যাম্পেল দেখুন।

এনক্রিপশন সংক্রান্ত সমস্যার জন্য ডায়াগনস্টিক চেক করা

এনক্রিপ্টেড ডেটা আপলোড করার পরে, ডায়াগনস্টিক ব্যবহার করে এনক্রিপশন সম্পর্কিত কোনও সতর্কতা আছে কিনা চেক করুন, যেমন PROCESSING_WARNING_REASON_KEK_PERMISSION_DENIED বা PROCESSING_WARNING_REASON_DEK_DECRYPTION_ERROR। ডায়াগনস্টিক্সে উল্লেখ করা কোনও সতর্কতা থাকলে সেটির সমাধান করুন, আবার অনুরোধ পাঠান এবং যাচাই করুন যে আপনার পরিবর্তনের পরে ডায়াগনস্টিক্স আর কোনও সতর্কতা দেখাচ্ছে না।