পরিষেবা অ্যাকাউন্ট ব্যবহার করে একটি Google Apps স্ক্রিপ্ট প্রকল্প হিসেবে প্রমাণীকরণ করুন

এই নির্দেশিকায় অ্যাপস স্ক্রিপ্টে এপিআই (API) কল করার সময় সার্ভিস অ্যাকাউন্ট দিয়ে কীভাবে প্রমাণীকরণ করতে হয়, তা ব্যাখ্যা করা হয়েছে।

সার্ভিস অ্যাকাউন্ট হলো এক বিশেষ ধরনের অ্যাকাউন্ট যা কোনো ব্যক্তি নয়, বরং একটি অ্যাপ্লিকেশন ব্যবহার করে। আপনি রোবট অ্যাকাউন্টের মাধ্যমে ডেটা অ্যাক্সেস করতে বা কোনো কাজ সম্পাদন করতে, অথবা Google Workspace বা Cloud Identity ব্যবহারকারীদের পক্ষ থেকে ডেটা অ্যাক্সেস করতে একটি সার্ভিস অ্যাকাউন্ট ব্যবহার করতে পারেন। আরও তথ্যের জন্য, ‘সার্ভিস অ্যাকাউন্ট বোঝা’ দেখুন।

Google Workspace API-এর প্রমাণীকরণ সম্পর্কে একটি সার্বিক ধারণা পেতে, 'অ্যাক্সেস ক্রেডেনশিয়াল তৈরি করুন' দেখুন।

অ্যাপস স্ক্রিপ্টে কখন সার্ভিস অ্যাকাউন্ট ব্যবহার করবেন

ডিফল্টরূপে, অ্যাপস স্ক্রিপ্ট এপিআই কল করার জন্য স্ক্রিপ্ট ব্যবহারকারীর ক্রেডেনশিয়াল ব্যবহার করে। আপনি যদি UrlFetchApp ব্যবহার করে গুগল এপিআই কল করেন, তাহলে ScriptApp.getOAuthToken কল করে স্ক্রিপ্ট ব্যবহারকারীর জন্য একটি অ্যাক্সেস টোকেন পেতে পারেন।

তবে, কিছু ক্ষেত্রে ScriptApp.getOAuthToken তুলনায় সার্ভিস অ্যাকাউন্ট ব্যবহার করার বেশ কিছু সুবিধা রয়েছে। নিম্নলিখিত কারণগুলোর জন্য সার্ভিস অ্যাকাউন্ট অথেন্টিকেশন ব্যবহার করার কথা বিবেচনা করতে পারেন:

  • গুগল ক্লাউড এপিআই এবং পরিষেবাগুলির মাধ্যমে উন্নততর পারফরম্যান্স : অনেক গুগল ক্লাউড এপিআই সার্ভিস অ্যাকাউন্ট অথেনটিকেশনের জন্য ডিজাইন করা হয়েছে। সার্ভিস অ্যাকাউন্টগুলি বেশিরভাগ এপিআই-এর সাথে ইন্টারঅ্যাক্ট করার জন্য একটি আরও সমন্বিত, নির্ভরযোগ্য এবং নিরাপদ উপায়ও প্রদান করতে পারে।
  • বিচ্ছিন্ন অনুমতি : সার্ভিস অ্যাকাউন্টগুলোর নিজস্ব অনুমতি থাকে, যা যেকোনো ব্যবহারকারীর থেকে আলাদা। আপনি যখন অন্য ব্যবহারকারীদের সাথে প্রজেক্টটি শেয়ার করেন, তখন ScriptApp.getOAuthToken প্রমাণীকরণ পদ্ধতিটি ব্যর্থ হতে পারে। সার্ভিস অ্যাকাউন্ট ব্যবহার করে স্ক্রিপ্ট শেয়ার করুন এবং সেগুলোকে গুগল ওয়ার্কস্পেস অ্যাড-অন হিসেবে প্রকাশ করুন
  • স্বয়ংক্রিয় স্ক্রিপ্ট এবং দীর্ঘমেয়াদী কাজ : সার্ভিস অ্যাকাউন্ট আপনাকে ব্যবহারকারীর হস্তক্ষেপ ছাড়াই স্বয়ংক্রিয় স্ক্রিপ্ট, ব্যাচ প্রসেস বা ব্যাকগ্রাউন্ড টাস্ক চালানোর সুযোগ দেয়।
  • উন্নত নিরাপত্তা এবং ন্যূনতম বিশেষাধিকারের নীতি : সার্ভিস অ্যাকাউন্টগুলোকে নির্দিষ্ট অনুমতি প্রদান করুন, শুধুমাত্র তাদের প্রয়োজনীয় রিসোর্সগুলোতে অ্যাক্সেস দিন। এটি ন্যূনতম বিশেষাধিকারের নীতি অনুসরণ করে, যা নিরাপত্তা ঝুঁকি কমায়। ScriptApp.getOAuthToken ব্যবহার করলে প্রায়শই একটি স্ক্রিপ্টকে ব্যবহারকারীর সমস্ত অনুমতি দেওয়া হয়, যা প্রয়োজনের তুলনায় অনেক বেশি ব্যাপক হতে পারে।
  • কেন্দ্রীভূত অ্যাক্সেস ব্যবস্থাপনা : সার্ভিস অ্যাকাউন্টগুলো গুগল ক্লাউডের আইডেন্টিটি অ্যান্ড অ্যাক্সেস ম্যানেজমেন্ট (IAM) ব্যবহার করে পরিচালিত হয়। IAM, গুগল ওয়ার্কস্পেস অর্গানাইজেশনগুলোকে অ্যাপস স্ক্রিপ্ট প্রোজেক্টের মধ্যে অথেনটিকেটেড সার্ভিসগুলোতে অ্যাক্সেস পরিচালনা করতে সাহায্য করে।

পূর্বশর্ত

একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন

আপনার ক্লাউড প্রজেক্টে একটি সার্ভিস অ্যাকাউন্ট তৈরি করুন:

গুগল ক্লাউড কনসোল

  1. গুগল ক্লাউড কনসোলে, > আইএএম ও অ্যাডমিন > সার্ভিস অ্যাকাউন্টস- এ যান।

    পরিষেবা অ্যাকাউন্টগুলিতে যান

  2. সার্ভিস অ্যাকাউন্ট তৈরি করুন -এ ক্লিক করুন।
  3. সার্ভিস অ্যাকাউন্টের বিবরণ পূরণ করুন, তারপর 'তৈরি করুন এবং চালিয়ে যান' -এ ক্লিক করুন।
  4. ঐচ্ছিক: আপনার গুগল ক্লাউড প্রোজেক্টের রিসোর্সগুলিতে অ্যাক্সেস দেওয়ার জন্য আপনার সার্ভিস অ্যাকাউন্টে রোল নির্ধারণ করুন। আরও বিস্তারিত জানতে, “রিসোর্সগুলিতে অ্যাক্সেস প্রদান, পরিবর্তন এবং প্রত্যাহার” দেখুন।
  5. চালিয়ে যান-এ ক্লিক করুন।
  6. ঐচ্ছিক: সেইসব ব্যবহারকারী বা গোষ্ঠীর নাম লিখুন যারা এই পরিষেবা অ্যাকাউন্টটি দিয়ে পরিচালনা ও কার্যকলাপ সম্পাদন করতে পারবে। আরও বিস্তারিত জানতে, ‘পরিষেবা অ্যাকাউন্টের ছদ্মবেশ ব্যবস্থাপনা’ দেখুন।
  7. Done-এ ক্লিক করুন। সার্ভিস অ্যাকাউন্টের ইমেল ঠিকানাটি লিখে রাখুন।

gcloud CLI

  1. পরিষেবা অ্যাকাউন্ট তৈরি করুন:
    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
      --display-name="SERVICE_ACCOUNT_NAME"
  2. ঐচ্ছিক: আপনার গুগল ক্লাউড প্রোজেক্টের রিসোর্সগুলিতে অ্যাক্সেস দেওয়ার জন্য আপনার সার্ভিস অ্যাকাউন্টে রোল নির্ধারণ করুন। আরও বিস্তারিত জানতে, “রিসোর্সগুলিতে অ্যাক্সেস প্রদান, পরিবর্তন এবং প্রত্যাহার” দেখুন।

সার্ভিস অ্যাকাউন্টে একটি ভূমিকা নির্ধারণ করুন

আপনাকে অবশ্যই একটি সুপার অ্যাডমিনিস্ট্রেটর অ্যাকাউন্টের মাধ্যমে কোনো সার্ভিস অ্যাকাউন্টে একটি পূর্ব-নির্মিত বা কাস্টম রোল বরাদ্দ করতে হবে।

  1. গুগল অ্যাডমিন কনসোলে, > অ্যাকাউন্ট > অ্যাডমিন রোলস- এ যান।

    অ্যাডমিন ভূমিকাগুলিতে যান

  2. আপনি যে ভূমিকাটি বরাদ্দ করতে চান সেটিতে পয়েন্ট করুন, এবং তারপরে 'অ্যাডমিন বরাদ্দ করুন' (Assign admin) এ ক্লিক করুন।

  3. সার্ভিস অ্যাকাউন্ট অ্যাসাইন করতে ক্লিক করুন।

  4. সার্ভিস অ্যাকাউন্টের ইমেল ঠিকানাটি প্রবেশ করান।

  5. যোগ করুন > ভূমিকা নির্ধারণ করুন- এ ক্লিক করুন।

একটি পরিষেবা অ্যাকাউন্টের জন্য পরিচয়পত্র তৈরি করুন

আপনাকে একটি পাবলিক/প্রাইভেট কী পেয়ার আকারে ক্রেডেনশিয়াল সংগ্রহ করতে হবে। আপনার অ্যাপের মধ্যে সার্ভিস অ্যাকাউন্টের কার্যকলাপ অনুমোদন করার জন্য আপনার কোড এই ক্রেডেনশিয়ালগুলো ব্যবহার করে।

আপনার পরিষেবা অ্যাকাউন্টের জন্য পরিচয়পত্র পেতে:

  1. গুগল ক্লাউড কনসোলে, > আইএএম ও অ্যাডমিন > সার্ভিস অ্যাকাউন্টস- এ যান।

    পরিষেবা অ্যাকাউন্টগুলিতে যান

  2. আপনার পরিষেবা অ্যাকাউন্ট নির্বাচন করুন।
  3. Keys > Add key > Create new key-তে ক্লিক করুন।
  4. JSON নির্বাচন করুন, তারপর Create-এ ক্লিক করুন।

    আপনার নতুন পাবলিক/প্রাইভেট কী পেয়ারটি তৈরি হয়ে আপনার মেশিনে একটি নতুন ফাইল হিসেবে ডাউনলোড হবে। ডাউনলোড করা JSON ফাইলটি আপনার ওয়ার্কিং ডিরেক্টরিতে credentials.json নামে সেভ করুন। এই ফাইলটিই এই কী-টির একমাত্র কপি। আপনার কী নিরাপদে সংরক্ষণ করার পদ্ধতি সম্পর্কে জানতে, “সার্ভিস অ্যাকাউন্ট কী ব্যবস্থাপনা” দেখুন।

  5. বন্ধ করুন-এ ক্লিক করুন।

ক্লাউড প্রজেক্ট নম্বরটি কপি করুন

  1. Google Cloud কনসোলে, > IAM ও অ্যাডমিন > সেটিংস- এ যান।

    IAM এবং অ্যাডমিন সেটিংসে যান

  2. প্রজেক্ট নম্বর ফিল্ডে মানটি কপি করুন।

আপনার অ্যাপস স্ক্রিপ্ট প্রজেক্টে সার্ভিস অ্যাকাউন্ট অথেন্টিকেশন সেট আপ করুন।

এই অংশে ব্যাখ্যা করা হয়েছে কীভাবে আপনার ক্লাউড প্রজেক্ট থেকে একটি অ্যাপস স্ক্রিপ্ট প্রজেক্টে সার্ভিস অ্যাকাউন্টের ক্রেডেনশিয়াল যোগ করতে হয়।

অ্যাপস স্ক্রিপ্টে আপনার ক্লাউড প্রজেক্ট সেট করুন

  1. প্রজেক্ট খুলতে বা তৈরি করতে অ্যাপস স্ক্রিপ্টে যান:


    অ্যাপস স্ক্রিপ্ট খুলুন

  2. আপনার অ্যাপস স্ক্রিপ্ট প্রজেক্টে, প্রজেক্ট সেটিংস-এ ক্লিক করুন। প্রজেক্ট সেটিংসের জন্য আইকন .

  3. Google Cloud প্রজেক্টের অধীনে, Change project-এ ক্লিক করুন।

  4. Google Cloud প্রজেক্ট নম্বরের ঘরে ক্লাউড প্রজেক্ট নম্বরটি পেস্ট করুন।

  5. প্রজেক্ট সেট করুন -এ ক্লিক করুন।

ক্রেডেনশিয়ালগুলি একটি স্ক্রিপ্ট প্রপার্টি হিসাবে সংরক্ষণ করুন।

আপনার অ্যাপস স্ক্রিপ্ট প্রজেক্ট সেটিংসে স্ক্রিপ্ট প্রপার্টি হিসেবে আপনার সার্ভিস অ্যাকাউন্টের ক্রেডেনশিয়ালগুলো নিরাপদে সংরক্ষণ করুন:

  1. পূর্ববর্তী বিভাগে তৈরি করা আপনার সার্ভিস অ্যাকাউন্ট JSON ফাইল ( credentials.json )-এর বিষয়বস্তু কপি করুন।
  2. আপনার অ্যাপস স্ক্রিপ্ট প্রজেক্টে, প্রজেক্ট এ যান।
  3. প্রজেক্ট সেটিংস পেজ থেকে, স্ক্রিপ্ট প্রোপার্টিজে যান, অ্যাড স্ক্রিপ্ট প্রোপার্টিতে ক্লিক করুন এবং নিম্নলিখিত তথ্যগুলো প্রবেশ করান:
    • Property ফিল্ডে SERVICE_ACCOUNT_KEY লিখুন।
    • Value ফিল্ডে আপনার JSON কী ফাইলের বিষয়বস্তু পেস্ট করুন।
  4. স্ক্রিপ্ট বৈশিষ্ট্য সংরক্ষণ করুন -এ ক্লিক করুন।

OAuth2 লাইব্রেরি যোগ করুন

OAuth2 প্রমাণীকরণ প্রক্রিয়াটি পরিচালনা করতে apps apps-script-oauth2 স্ক্রিপ্ট লাইব্রেরিটি ব্যবহার করুন।

আপনার অ্যাপস স্ক্রিপ্ট প্রজেক্টে লাইব্রেরিটি যোগ করতে:

  1. অ্যাপস স্ক্রিপ্ট এডিটরে, বাম দিকে, 'Libraries'-এর পাশে, ' a library'- তে ক্লিক করুন।
  2. স্ক্রিপ্ট আইডি ফিল্ডে 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF লিখুন।
  3. লুক আপ-এ ক্লিক করুন।
  4. সর্বশেষ সংস্করণটি নির্বাচন করুন, এবং তারপর 'যোগ করুন ' বোতামে ক্লিক করুন।

সার্ভিস অ্যাকাউন্ট ক্রেডেনশিয়াল ব্যবহার করে একটি API কল করুন

আপনার অ্যাপস স্ক্রিপ্ট প্রজেক্ট থেকে সার্ভিস অ্যাকাউন্টের ক্রেডেনশিয়াল ব্যবহার করতে, আপনি নিম্নলিখিত 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 জায়গায় আপনি যে HTTP এন্ডপয়েন্টটি কল করছেন, সেটি বসান।