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

ऑडियंस में शामिल सदस्यों का डेटा डालने के अनुरोधों में, एन्क्रिप्ट (सुरक्षित) किया गया डेटा भेजने का तरीका यहां बताया गया है.

Google Cloud का कमांड-लाइन इंटरफ़ेस सेट अप करना

  1. Google Cloud के कमांड लाइन इंटरफ़ेस को इंस्टॉल और शुरू करें.

  2. यह पक्का करने के लिए कि आपके gcloud कॉम्पोनेंट अप-टू-डेट हैं, यह कमांड चलाएं.

    gcloud components update
    
  3. नया Google Cloud प्रोजेक्ट चुनने या बनाने और क्लाउड की कुंजी मैनेजमेंट सेवा चालू करने के लिए, क्लाउड केएमएस (KMS) चालू करें पर क्लिक करें.

    क्लाउड केएमएस (KMS) चालू करना
  4. अपने प्रोजेक्ट को एनवायरमेंट में सेट करने के लिए, 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 फ़ेडरेशन के बारे में खास जानकारी दी गई है. ज़्यादा जानकारी के लिए, Workload Identity फ़ेडरेशन से जुड़ा दस्तावेज़ देखें.

  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 की सेवा देने वाली कंपनी की पुष्टि करने का तरीका सेट अप करना. --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"
    

डेटा एन्क्रिप्ट (सुरक्षित) करना

Data Manager API में एन्क्रिप्शन के लिए, डेटा एन्क्रिप्शन पासकोड (डीईके) की ज़रूरत होती है. डीईके एक ऐसी सिमेट्रिक कुंजी होती है जिसका इस्तेमाल डेटा को एन्क्रिप्ट करने के लिए किया जाता है. आपकी डीईके को, Google Cloud केएमएस कुंजी का इस्तेमाल करके एन्क्रिप्ट किया जाता है. अनुरोध के हिस्से के तौर पर, एन्क्रिप्ट (सुरक्षित) किया गया डीईके भेजा जाता है.

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

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

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

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

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

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

अनुरोध बनाने और भेजने के लिए, Data Manager API की लाइब्रेरी और उपयोगिता का इस्तेमाल करने के लिए, Java के लिए IngestAudienceMembersWithEncryption कोड सैंपल या Python के लिए ingest_audience_members_with_encryption कोड सैंपल देखें.