सेवा खातों का इस्तेमाल करके, Apps Script प्रोजेक्ट के तौर पर पुष्टि करना

इस गाइड में बताया गया है कि Apps Script में एपीआई को कॉल करते समय, सेवा खाते से पुष्टि कैसे करें.

सेवा खाता एक खास तरह का खाता होता है, जिसका इस्तेमाल कोई ऐप्लिकेशन करता है, न कि कोई व्यक्ति. सेवा खाते का इस्तेमाल, रोबोट खाते से डेटा ऐक्सेस करने या कार्रवाइयां करने के लिए किया जा सकता है. इसके अलावा, इसका इस्तेमाल Google Workspace या Cloud Identity के उपयोगकर्ताओं की ओर से डेटा ऐक्सेस करने के लिए भी किया जा सकता है. ज़्यादा जानकारी के लिए, सेवा खातों के बारे में जानकारी लेख पढ़ें.

Google Workspace API के लिए पुष्टि करने की प्रोसेस के बारे में खास जानकारी पाने के लिए, ऐक्सेस क्रेडेंशियल बनाना लेख पढ़ें.

Apps Script में सेवा खातों का इस्तेमाल कब करना चाहिए

यहां कुछ वजहें दी गई हैं जिनकी वजह से, आपको पुष्टि करने के अन्य तरीकों, जैसे कि ScriptApp.getOAuthToken() के बजाय, सेवा खाते की पुष्टि करने की सुविधा का इस्तेमाल करना चाहिए:

  • Google Cloud API और सेवाओं के साथ बेहतर परफ़ॉर्मेंस: कई Google Cloud API, सेवा खाते की पुष्टि करने के लिए डिज़ाइन किए गए हैं. सेवा खाते, ज़्यादातर एपीआई के साथ इंटरैक्ट करने का ज़्यादा इंटिग्रेटेड, भरोसेमंद, और सुरक्षित तरीका भी उपलब्ध करा सकते हैं.
  • अनुमतियों को अलग करना: सेवा खातों के पास अपनी अनुमतियां होती हैं, जो किसी भी उपयोगकर्ता से अलग होती हैं. Apps Script प्रोजेक्ट को दूसरे लोगों के साथ शेयर करने पर, पुष्टि करने की ScriptApp.getOAuthToken() विधि काम नहीं कर सकती. सेवा खातों का इस्तेमाल करके, स्क्रिप्ट शेयर की जा सकती हैं और उन्हें Google Workspace ऐड-ऑन के तौर पर पब्लिश किया जा सकता है.
  • ऑटोमेट की गई स्क्रिप्ट और लंबे समय तक चलने वाले टास्क: सेवा खातों की मदद से, ऑटोमेट की गई स्क्रिप्ट, बैच प्रोसेस या बैकग्राउंड टास्क चलाए जा सकते हैं. इसके लिए, उपयोगकर्ता के इनपुट की ज़रूरत नहीं होती.
  • बेहतर सुरक्षा और कम से कम ज़रूरी अधिकारों का सिद्धांत: सेवा वाले खातों को खास अनुमतियां दी जा सकती हैं. इससे उन्हें सिर्फ़ उन संसाधनों का ऐक्सेस मिलता है जिनकी उन्हें ज़रूरत होती है. यह कम से कम अधिकारों के सिद्धांत का पालन करता है. इससे सुरक्षा से जुड़े जोखिम कम हो जाते हैं. ScriptApp.getOAuthToken() का इस्तेमाल करने से, स्क्रिप्ट को अक्सर उपयोगकर्ता की सभी अनुमतियां मिल जाती हैं. हालांकि, यह बहुत ज़्यादा हो सकता है.
  • ऐक्सेस मैनेजमेंट की सुविधा: सेवा खातों को Google Cloud के Identity and Access Management (IAM) का इस्तेमाल करके मैनेज किया जाता है. IAM की मदद से, Google Workspace संगठन, Apps Script प्रोजेक्ट में पुष्टि की गई सेवाओं का ऐक्सेस मैनेज कर सकते हैं.

ज़रूरी शर्तें

सेवा खाता बनाना

अपने क्लाउड प्रोजेक्ट में, एक सेवा खाता बनाएं:

Google Cloud कंसोल

  1. Google Cloud Console में, मेन्यू &gt आईएएम और एडमिन &gt सेवा खाते पर जाएं.

    सेवा खातों पर जाएं

  2. सेवा खाता बनाएं पर क्लिक करें.
  3. सेवा खाते की जानकारी भरें. इसके बाद, बनाएं और जारी रखें पर क्लिक करें.
  4. ज़रूरी नहीं: अपने सेवा खाते को भूमिकाएं असाइन करें, ताकि उसे आपके Google Cloud प्रोजेक्ट के संसाधनों का ऐक्सेस मिल सके. ज़्यादा जानकारी के लिए, संसाधनों का ऐक्सेस देना, उसमें बदलाव करना, और उसे रद्द करना लेख पढ़ें.
  5. जारी रखें पर क्लिक करें.
  6. उन उपयोगकर्ताओं या ग्रुप के नाम डालें जिनके पास इस सेवा खाते को मैनेज करने और इससे जुड़ी कार्रवाइयां करने का ऐक्सेस है. हालांकि, यह ज़रूरी नहीं है. ज़्यादा जानकारी के लिए, सेवा खाते के डुप्लीकेट को मैनेज करना लेख पढ़ें.
  7. हो गया पर क्लिक करें. सेवा खाते का ईमेल पता नोट कर लें.

gcloud सीएलआई

  1. सेवा खाता बनाएं:
    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
      --display-name="SERVICE_ACCOUNT_NAME"
  2. ज़रूरी नहीं: अपने सेवा खाते को भूमिकाएं असाइन करें, ताकि उसे आपके Google Cloud प्रोजेक्ट के संसाधनों का ऐक्सेस मिल सके. ज़्यादा जानकारी के लिए, संसाधनों का ऐक्सेस देना, उसमें बदलाव करना, और उसे रद्द करना लेख पढ़ें.

सेवा खाते को कोई भूमिका असाइन करना

सुपर एडमिन खाते से, सेवा खाते को पहले से बनी हुई या पसंद के मुताबिक भूमिका असाइन की जानी चाहिए.

  1. Google Admin console में, मेन्यू > खाता > एडमिन की भूमिकाएं पर जाएं.

    एडमिन की भूमिकाएं पर जाएं

  2. उस भूमिका पर कर्सर घुमाएं जिसे आपको असाइन करना है. इसके बाद, एडमिन असाइन करें पर क्लिक करें.

  3. सेवा खाते असाइन करें पर क्लिक करें.

  4. सेवा खाते का ईमेल पता डालें.

  5. जोड़ें > भूमिका असाइन करें पर क्लिक करें.

किसी सेवा खाते के लिए क्रेडेंशियल बनाना

आपको सार्वजनिक/निजी पासकोड के जोड़े के तौर पर क्रेडेंशियल पाने होंगे. इन क्रेडेंशियल का इस्तेमाल, आपका कोड करता है. इससे आपके ऐप्लिकेशन में सेवा खाते की कार्रवाइयों को अनुमति दी जाती है.

अपने सेवा खाते के क्रेडेंशियल पाने के लिए:

  1. Google Cloud Console में, मेन्यू &gt आईएएम और एडमिन &gt सेवा खाते पर जाएं.

    सेवा खातों पर जाएं

  2. अपना सेवा खाता चुनें.
  3. कुंजियां > कुंजी जोड़ें > नई कुंजी बनाएं पर क्लिक करें.
  4. JSON को चुनें. इसके बाद, बनाएं पर क्लिक करें.

    आपकी नई सार्वजनिक/निजी कुंजी की जोड़ी जनरेट करके आपकी मशीन पर एक नई फ़ाइल के तौर पर डाउनलोड की जाती है. डाउनलोड की गई JSON फ़ाइल को अपनी वर्किंग डायरेक्ट्री में credentials.json के तौर पर सेव करें. यह फ़ाइल, इस कुंजी की सिर्फ़ एक कॉपी है. अपनी कुंजी को सुरक्षित तरीके से सेव करने के बारे में जानकारी के लिए, सेवा खाते की कुंजियां मैनेज करना लेख पढ़ें.

  5. बंद करें पर क्लिक करें.

क्लाउड प्रोजेक्ट का नंबर कॉपी करें

  1. Google Cloud console में, मेन्यू &gt IAM और एडमिन &gt सेटिंग पर जाएं.

    आईएएम और एडमिन सेटिंग पर जाएं

  2. प्रोजेक्ट नंबर फ़ील्ड में, वैल्यू कॉपी करें.

अपने Apps Script प्रोजेक्ट में सेवा खाते की पुष्टि करने की सुविधा सेट अप करना

इस सेक्शन में, अपने Cloud प्रोजेक्ट से सेवा खाते के क्रेडेंशियल को Apps Script प्रोजेक्ट में जोड़ने का तरीका बताया गया है.

Apps Script में अपना Cloud प्रोजेक्ट सेट करना

  1. कोई प्रोजेक्ट खोलने या बनाने के लिए, Apps Script पर जाएं:


    Apps Script खोलें

  2. अपने Apps Script प्रोजेक्ट में, प्रोजेक्ट की सेटिंग प्रोजेक्ट सेटिंग का आइकॉन पर क्लिक करें.

  3. Google Cloud Platform (GCP) प्रोजेक्ट में जाकर, प्रोजेक्ट बदलें पर क्लिक करें.

  4. GCP प्रोजेक्ट नंबर में, Google Cloud प्रोजेक्ट नंबर चिपकाएं.

  5. प्रोजेक्ट सेट करें पर क्लिक करें.

क्रेडेंशियल को स्क्रिप्ट प्रॉपर्टी के तौर पर सेव करना

अपने सेवा खाते के क्रेडेंशियल को सुरक्षित तरीके से सेव करें. इसके लिए, उन्हें Apps Script प्रोजेक्ट की सेटिंग में स्क्रिप्ट प्रॉपर्टी के तौर पर सेव करें:

  1. अपनी सेवा खाते की JSON फ़ाइल (credentials.json) का कॉन्टेंट कॉपी करें. यह फ़ाइल आपने पिछले सेक्शन में बनाई थी.
  2. अपने Apps Script प्रोजेक्ट में, प्रोजेक्ट की सेटिंग पर जाएं.
  3. प्रोजेक्ट की सेटिंग पेज पर जाकर, स्क्रिप्ट की प्रॉपर्टी पर जाएं. इसके बाद, स्क्रिप्ट की प्रॉपर्टी जोड़ें पर क्लिक करें और यह जानकारी डालें:
    • प्रॉपर्टी फ़ील्ड में, SERVICE_ACCOUNT_KEY डालें.
    • वैल्यू फ़ील्ड में, अपनी JSON कुंजी फ़ाइल का कॉन्टेंट चिपकाएं.
  4. स्क्रिप्ट प्रॉपर्टी सेव करें पर क्लिक करें.

OAuth2 लाइब्रेरी जोड़ना

OAuth2 पुष्टि करने के फ़्लो को मैनेज करने के लिए, Apps Script लाइब्रेरी apps-script-oauth2 का इस्तेमाल किया जा सकता है.

अपने Apps Script प्रोजेक्ट में लाइब्रेरी जोड़ने के लिए:

  1. Apps Script एडिटर में, बाईं ओर लाइब्रेरी के बगल में, लाइब्रेरी जोड़ें पर क्लिक करें.
  2. स्क्रिप्ट आईडी फ़ील्ड में, 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF डालें.
  3. खोजें पर क्लिक करें.
  4. नया वर्शन चुनें. इसके बाद, जोड़ें पर क्लिक करें.

सेवा खाते के क्रेडेंशियल का इस्तेमाल करके एपीआई को कॉल करना

अपने Apps Script प्रोजेक्ट से सेवा खाते के क्रेडेंशियल इस्तेमाल करने के लिए, इस फ़ंक्शन getServiceAccountService() का इस्तेमाल किया जा सकता है:

/**
 * Get a new OAuth2 service for a given service account.
 */
function getServiceAccountService() {
  const serviceAccountKeyString = PropertiesService.getScriptProperties()
      .getProperty('SERVICE_ACCOUNT_KEY');

  if (!serviceAccountKeyString) {
    throw new Error('SERVICE_ACCOUNT_KEY property is not set. ' +
        'Please follow the setup instructions.');
  }

  const serviceAccountKey = JSON.parse(serviceAccountKeyString);

  const CLIENT_EMAIL = serviceAccountKey.client_email;
  const PRIVATE_KEY = serviceAccountKey.private_key;

  // Replace with the specific scopes required for your API.
  const SCOPES = ['SCOPE'];

  return OAuth2.createService('ServiceAccount')
      .setTokenUrl('https://oauth2.googleapis.com/token')
      .setPrivateKey(PRIVATE_KEY)
      .setIssuer(CLIENT_EMAIL)
      .setPropertyStore(PropertiesService.getScriptProperties())
      .setScope(SCOPES);
}

SCOPE को उस अनुमति के दायरे से बदलें जिसका इस्तेमाल करके आपको एपीआई को कॉल करना है. स्क्रिप्ट, सेवा खाते के उन क्रेडेंशियल का इस्तेमाल करती है जिन्हें आपने SERVICE_ACCOUNT_KEY स्क्रिप्ट प्रॉपर्टी के तौर पर पिछले चरण में सेव किया था.

इसके बाद, इन क्रेडेंशियल का इस्तेमाल करके किसी एपीआई को कॉल किया जा सकता है. इसका उदाहरण यहां दिया गया है. इसमें UrlFetch सेवा का इस्तेमाल किया गया है:

function callApi() {
  const service = getServiceAccountService();

  // TODO(developer): Replace with the payload
  const payload = {};

  // TODO(developer): Replace with the API endpoint
  const response = UrlFetchApp.fetch('API_URL', {
    method: 'post',
    headers: {
      'Authorization': `Bearer ${service.getAccessToken()}`,
      'Content-Type': 'application/json',
    },
    payload: payload,
  });

  const result = JSON.parse(response.getContentText());

  return result;
}

API_URL को उस एचटीटीपी एंडपॉइंट से बदलें जिसे कॉल किया जा रहा है.