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

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

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

कैटगरी इस्तेमाल का उदाहरण 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 से पता चलता है कि कुंजी को पहली बार किस तारीख और समय पर रोटेट करना है.

    उदाहरण के लिए, हर 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 कमांड लाइन इंटरफ़ेस इंस्टॉल करें.
  2. इंस्टॉलेशन की पुष्टि करने के लिए, यह कमांड चलाएं:

    aws --version
    

    इंस्टॉलेशन पूरा होने पर, आउटपुट का स्निपेट यहां दिया गया है:

    aws-cli/2.31.12 Python/3.13.7 ...
    

AWS उपयोगकर्ता खाता सेट अप करना और साइन इन करना

  1. AWS कमांड-लाइन इंटरफ़ेस का इस्तेमाल करने के लिए ज़रूरी शर्तें पूरी करें.
  2. साइन इन करें.

पासकोड बनाना

  1. सिमेट्रिक केएमएस कुंजी (केईके) बनाएं.

    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"

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

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

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

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

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

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

  1. Base64 एन्कोडिंग का इस्तेमाल करके, हैश बाइट को कोड में बदलें.

  2. अपने डीईके का इस्तेमाल करके, Base64 कोड में बदले गए हैश को एन्क्रिप्ट करें. ज़रूरी साइफ़र XCHACHA20_POLY1305 है. इसलिए, Tink के encrypt() फ़ंक्शन के लिए, असोसिएटेड डेटा पैरामीटर की ज़रूरत होती है. यह पैरामीटर खाली होना चाहिए. उदाहरण के लिए, Python में b"" या Java में new byte[0]. null या कोई ऐसी वैल्यू पास करने पर जो खाली नहीं है, Data Manager API डेटा को डिक्रिप्ट नहीं कर सकता.

  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. डाइग्नोस्टिक्स में मौजूद किसी भी चेतावनी को ठीक करें. इसके बाद, अनुरोध फिर से भेजें और पुष्टि करें कि आपके बदलावों के बाद, डाइग्नोस्टिक्स में कोई चेतावनी नहीं दिख रही है.