उपयोगकर्ता का डेटा एन्क्रिप्ट (सुरक्षित) करें

डेटा मैनेजर API, डेटा को एन्क्रिप्ट (सुरक्षित) करने के लिए, इन कुंजी मैनेजमेंट सेवाओं का इस्तेमाल करता है:

इस्तेमाल के कुछ उदाहरणों के लिए, क्रिप्टोग्राफ़िक पासकोड के लिए मैनेजमेंट सेवा (केएमएस) के हिसाब से सहायता अलग-अलग होती है:

कैटगरी इस्तेमाल का उदाहरण Google Cloud KMS AWS KMS
ऑडियंस ऑडियंस में शामिल लोगों को
इवेंट ऑफ़लाइन कन्वर्ज़न या लीड के लिए बेहतर कन्वर्ज़न ट्रैकिंग
इवेंट 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
    

कुंजी बनाना

ज़्यादा जानकारी के लिए, Cloud Key Management Service की खास जानकारी देखें.

  1. कोई की-रिंग बनाएं.

    gcloud kms keyrings create KEY_RING_NAME \
        --location KEY_RING_LOCATION
    

    ज़्यादा जानकारी के लिए, कोई की-रिंग बनाना लेख पढ़ें.

  2. की-रिंग में कोई की बनाएं. ROTATION_PERIOD से कुंजी को रोटेट करने के इंटरवल के बारे में पता चलता है. वहीं, NEXT_ROTATION_TIME से वह तारीख और समय पता चलता है जब पहली बार रोटेशन होना चाहिए.

    उदाहरण के लिए, अगर आपको हर 30 दिनों में कुंजी को रोटेट करना है और पहले रोटेशन को एक हफ़्ते में पूरा करना है, तो 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 Pool Provider की पुष्टि करने का तरीका सेट अप करना

इस सेक्शन में, Workload Identity Federation के बारे में खास जानकारी दी गई है. ज़्यादा जानकारी के लिए, Workload Identity Federation देखें.

  1. Workload Identity Pool (WIP) बनाएं. पूल के लिए location, global होना चाहिए.

    gcloud iam workload-identity-pools create WIP_ID \
       --location=global \
       --display-name="WIP_DISPLAY_NAME" \
       --description="WIP_DESCRIPTION"
    

    ज़्यादा जानकारी के लिए, Workload Identity Pool और उनकी सेवा देने वाली कंपनियों को मैनेज करना लेख पढ़ें.

  2. Workload Identity Pool Provider की पुष्टि करने का तरीका सेट अप करना. --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 Command Line Interface इंस्टॉल करें.
  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"
    

    आउटपुट में, KeyMetadata के नीचे मौजूद Arn पर ध्यान दें. आपको अन्य चरणों में इस Amazon रिसॉर्स नेम (एआरएन) की ज़रूरत होगी.

    AWS_KEY_ARN
    
  2. ज़रूरी नहीं: अपनी पसंद के किसी नाम का इस्तेमाल करके, की का दूसरा नाम बनाएं.

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

    एलियास की ज़रूरत नहीं होती, लेकिन AWS कमांड लाइन इंटरफ़ेस कमांड बनाने के लिए यह काम का होता है. उदाहरण के लिए, उपनाम का इस्तेमाल करके कुंजी का एआरएन वापस पाया जा सकता है:

    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"

आउटपुट में मौजूद ओआईडीसी की सेवा देने वाली कंपनी का एआरएन नोट करें. आपको इसकी ज़रूरत अन्य चरणों में पड़ेगी.

AWS_OIDC_PROVIDER_ARN

आईएएम नीति बनाना

  1. kms-decrypt-policy.json नाम की JSON फ़ाइल बनाएं और उसमें यह कॉन्टेंट शामिल करें:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "kms:Decrypt",
          "Resource": "AWS_KEY_ARN"
        }
      ]
    }
    
  2. JSON फ़ाइल और अपनी पसंद के नीति के नाम का इस्तेमाल करके, आईएम नीति बनाएं.

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

    आउटपुट में आईएएम नीति का एआरएन नोट करें. आपको इसकी ज़रूरत अन्य चरणों में पड़ेगी.

    AWS_IAM_POLICY_ARN
    

IAM भूमिका बनाना और उसे अटैच करना

  1. 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 में एन्क्रिप्शन के लिए, डेटा एन्क्रिप्शन की (डीईके) की ज़रूरत होती है. डीईके एक सिमेट्रिक की होती है. इसका इस्तेमाल डेटा को एन्क्रिप्ट यानी सुरक्षित करने के लिए किया जाता है. आपकी डीईके को Google Cloud या AWS KMS की कुंजी का इस्तेमाल करके एन्क्रिप्ट (सुरक्षित) किया जाता है. अनुरोध के हिस्से के तौर पर, एन्क्रिप्ट (सुरक्षित) किया गया DEK भेजा जाता है.

एन्क्रिप्शन के अनुरोध में डेटा तैयार करने के लिए, फ़ॉर्मैटिंग और हैशिंग से जुड़े उन्हीं दिशा-निर्देशों का पालन करें जिनका इस्तेमाल एन्क्रिप्ट नहीं किए गए डेटा के लिए किया जाता है.

हैश नहीं की गई वैल्यू को एन्क्रिप्ट (सुरक्षित) न करें. उदाहरण के लिए, किसी AddressInfo का region_code या postal_code.

हर फ़ील्ड के डेटा को फ़ॉर्मैट और हैश करने के बाद, हैश की गई वैल्यू को एन्क्रिप्ट (सुरक्षित) करें. इसके लिए, यह तरीका अपनाएं:

  1. Base64 एन्कोडिंग का इस्तेमाल करके, हैश बाइट को कोड में बदलें.
  2. अपने डीईके का इस्तेमाल करके, 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 के लिए IngestAudienceMembersWithEncryption कोड का सैंपल या Python के लिए ingest_audience_members_with_encryption कोड का सैंपल देखें.