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

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

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

कैटगरी इस्तेमाल का उदाहरण Google Cloud की क्रिप्टोग्राफ़िक कुंजी के लिए मैनेजमेंट सेवा AWS की क्रिप्टोग्राफ़िक कुंजी के लिए मैनेजमेंट सेवा
ऑडियंस ऑडियंस के सदस्यों को डेटा भेजना
इवेंट ऑफ़लाइन कन्वर्ज़न या लीड के लिए बेहतर कन्वर्ज़न ट्रैकिंग
इवेंट Google Ads की, स्टोर में होने वाली बिक्री के कन्वर्ज़न
इवेंट Google Ads के डेस्टिनेशन को, डेटा के अतिरिक्त सोर्स के तौर पर भेजे गए इवेंट
इवेंट Google Analytics के डेस्टिनेशन को, डेटा के अतिरिक्त सोर्स के तौर पर भेजे गए इवेंट

Google Cloud की क्रिप्टोग्राफ़िक कुंजी के लिए मैनेजमेंट सेवा (Cloud KMS) सेट अप करना

एन्क्रिप्ट यानी सुरक्षित करने के लिए, Google Cloud की क्रिप्टोग्राफ़िक कुंजी के लिए मैनेजमेंट सेवा (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 Provider को, कुंजी को डिक्रिप्ट करने वाली भूमिका असाइन करें.

    # 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 की क्रिप्टोग्राफ़िक कुंजी के लिए मैनेजमेंट सेवा (AWS KMS) सेट अप करना

एन्क्रिप्ट यानी सुरक्षित करने के लिए, AWS की क्रिप्टोग्राफ़िक कुंजी के लिए मैनेजमेंट सेवा (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 कुंजी (केईके) बनाएं.

    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 के कमांड लाइन इंटरफ़ेस के कमांड बनाने में यह काम आता है. उदाहरण के लिए, एलियास का इस्तेमाल करके, कुंजी का एआरएन वापस पाया जा सकता है:

    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 प्रोवाइडर का एआरएन नोट करें. आपको अन्य चरणों में इसकी ज़रूरत पड़ेगी.

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
    

आईएएम रोल बनाना और अटैच करना

  1. role-trust-policy.json नाम की JSON फ़ाइल बनाएं. इसमें यह कॉन्टेंट और पिछले चरण में मिला 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. अपनी पसंद का कोई रोल नाम इस्तेमाल करके, आईएएम रोल बनाएं.

    aws iam create-role \
      --role-name "AWS_IAM_ROLE_NAME" \
      --assume-role-policy-document file://role-trust-policy.json
    
  3. रोल की नीति को, आईएएम नीति से अटैच करें.

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

डेटा एन्क्रिप्ट यानी सुरक्षित करना

डेटा मैनेजर एपीआई में, डेटा को एन्क्रिप्ट यानी सुरक्षित करने के लिए, डेटा एन्क्रिप्शन की (डीईके) की ज़रूरत होती है. डीईके, सिमेट्रिक कुंजी होती है. इसका इस्तेमाल, डेटा को एन्क्रिप्ट यानी सुरक्षित करने के लिए किया जाता है. आपकी डीईके को, Google Cloud या AWS की क्रिप्टोग्राफ़िक कुंजी के लिए मैनेजमेंट सेवा (KMS) की कुंजी (केईके) का इस्तेमाल करके एन्क्रिप्ट यानी सुरक्षित किया जाता है. अनुरोध के हिस्से के तौर पर, एन्क्रिप्ट यानी सुरक्षित की गई डीईके, केईके यूआरआई, और WIP Provider भेजें.

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

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

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

  1. Base64 एन्कोडिंग का इस्तेमाल करके, हैश बाइट को कोड में बदलें.
  2. अपनी डीईके का इस्तेमाल करके, Base64 कोड में बदली गई हैश को एन्क्रिप्ट यानी सुरक्षित करें.
  3. एन्क्रिप्ट यानी सुरक्षित करने की प्रोसेस के आउटपुट को, हेक्स या Base64 एन्कोडिंग का इस्तेमाल करके कोड में बदलें.
  4. फ़ील्ड के लिए, कोड में बदली गई वैल्यू का इस्तेमाल करें.
  5. अनुरोध में, encryption_info और encoding सेट करें.

आखिरी चरण पूरा करने के लिए, IngestAudienceMembersRequest या IngestEventsRequest में बदलाव करें, ताकि यह पता चल सके कि आपने अपना डेटा एन्क्रिप्ट यानी सुरक्षित किया है:

  • encryption_info फ़ील्ड सेट करें.
  • encoding फ़ील्ड को, एन्क्रिप्ट यानी सुरक्षित किए गए फ़ील्ड की वैल्यू को कोड में बदलने के लिए इस्तेमाल की गई एन्कोडिंग पर सेट करें.

Google Cloud की क्रिप्टोग्राफ़िक कुंजी के लिए मैनेजमेंट सेवा (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"
}

अनुरोध बनाने और भेजने के लिए, डेटा मैनेजर एपीआई की लाइब्रेरी और यूटिलिटी का इस्तेमाल करने के बारे में जानने के लिए, IngestAudienceMembers कोड का सैंपल Java के लिए या ingest_audience_members कोड का सैंपल Python के लिए देखें.

एन्क्रिप्ट यानी सुरक्षित करने से जुड़ी समस्याओं की जानकारी के लिए, गड़बड़ी की जानकारी देखें

एन्क्रिप्ट यानी सुरक्षित किया गया डेटा अपलोड करने के बाद, गड़बड़ी की जानकारी देखें. इससे, एन्क्रिप्ट यानी सुरक्षित करने से जुड़ी चेतावनियों के बारे में पता चलता है. जैसे, PROCESSING_WARNING_REASON_KEK_PERMISSION_DENIED या PROCESSING_WARNING_REASON_DEK_DECRYPTION_ERROR. गड़बड़ी की जानकारी में दिखने वाली चेतावनियों को ठीक करें. इसके बाद, फिर से अनुरोध भेजें. साथ ही, पुष्टि करें कि आपके बदलावों के बाद, गड़बड़ी की जानकारी में अब चेतावनियां नहीं दिख रही हैं.