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

ডেটা ম্যানেজার এপিআই নিম্নলিখিত কী ম্যানেজমেন্ট সার্ভিসগুলো ব্যবহার করে ডেটা এনক্রিপ্ট করা সমর্থন করে:

কিছু ব্যবহারের ক্ষেত্রে সমর্থন কী ম্যানেজমেন্ট সার্ভিস (KMS) ভেদে ভিন্ন হয়:

বিভাগ ব্যবহারের ক্ষেত্র গুগল ক্লাউড কেএমএস AWS KMS
দর্শক দর্শকদের পাঠান
ইভেন্টগুলি লিডগুলির জন্য অফলাইন রূপান্তর বা উন্নত রূপান্তর
ইভেন্টগুলি গুগল অ্যাডস ডেস্টিনেশনে অতিরিক্ত ডেটা উৎস হিসেবে পাঠানো ইভেন্টসমূহ
ইভেন্টগুলি গুগল অ্যানালিটিক্স গন্তব্যে অতিরিক্ত ডেটা উৎস হিসেবে পাঠানো ইভেন্টসমূহ

গুগল ক্লাউড কেএমএস সেট আপ করুন

এনক্রিপশনের জন্য গুগল ক্লাউড কেএমএস রিসোর্স সেট আপ করার ধাপগুলো নিচে দেওয়া হলো।

গুগল ক্লাউড কমান্ড লাইন ইন্টারফেস সেট আপ করুন

  1. গুগল ক্লাউড কমান্ড লাইন ইন্টারফেস ইনস্টল ও চালু করুন

  2. একটি নতুন Google Cloud প্রজেক্ট নির্বাচন বা তৈরি করতে এবং Cloud Key Management Service সক্রিয় করতে, Enable 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. আপনি যদি লিডদের জন্য অফলাইন কনভার্সন এবং এনহ্যান্সড কনভার্সনের ইভেন্ট ডেটা এনক্রিপ্ট করতে চান, তাহলে 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. একটি সিমেট্রিক কেএমএস কী (KEK) তৈরি করুন।

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

    আউটপুটে KeyMetadata অধীনে থাকা Arn টি নোট করুন। পরবর্তী ধাপগুলোতে আপনার এই 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"

আউটপুট থেকে 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"
    

ডেটা এনক্রিপ্ট করুন

ডেটা ম্যানেজার এপিআই-তে এনক্রিপশনের জন্য একটি ডেটা এনক্রিপশন কী (DEK) প্রয়োজন। DEK হলো একটি সিমেট্রিক কী যা আপনি ডেটা এনক্রিপ্ট করতে ব্যবহার করেন। আপনার DEK, আপনার গুগল ক্লাউড বা AWS KMS কী এনক্রিপশন কী (KEK) ব্যবহার করে এনক্রিপ্ট করা হয়। অনুরোধের অংশ হিসেবে আপনি এনক্রিপ্ট করা DEK, KEK URI এবং WIP প্রোভাইডার পাঠান।

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

আনহ্যাশড ভ্যালু এনক্রিপ্ট করবেন না। উদাহরণস্বরূপ, AddressInfo এর region_code বা postal_code

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

  1. Base64 এনকোডিং ব্যবহার করে হ্যাশ বাইটগুলো এনকোড করুন।
  2. আপনার DEK ব্যবহার করে Base64-এনকোডেড হ্যাশটি এনক্রিপ্ট করুন।
  3. এনক্রিপশন প্রক্রিয়ার আউটপুট হেক্স অথবা বেস৬৪ এনকোডিং ব্যবহার করে এনকোড করুন।
  4. ফিল্ডটির জন্য এনকোড করা মানটি ব্যবহার করুন।
  5. অনুরোধে encryption_info এবং encoding সেট করুন।

শেষ ধাপটি সম্পন্ন করতে, আপনার ডেটা এনক্রিপ্ট করা হয়েছে তা নির্দেশ করার জন্য IngestAudienceMembersRequest অথবা IngestEventsRequest পরিবর্তন করুন:

  • 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"
}

ডেটা ম্যানেজার এপিআই লাইব্রেরি ও ইউটিলিটি ব্যবহার করে একটি অনুরোধ তৈরি ও পাঠানোর জন্য, জাভার জন্য IngestAudienceMembers কোড স্যাম্পল অথবা পাইথনের জন্য ingest_audience_members কোড স্যাম্পল দেখুন।

এনক্রিপশন সংক্রান্ত সমস্যার জন্য ডায়াগনস্টিকস পরীক্ষা করুন।

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