আইডেন্টিটি অ্যাওয়ার প্রক্সি (IAP) সহ সুরক্ষিত সার্ভারহীন অ্যাপ্লিকেশন

১. সংক্ষিপ্ত বিবরণ

এই ল্যাবে, আপনি এমন একটি এমপ্লয়ি পোর্টাল স্থাপন করবেন যা কর্মীদের Cymbal Eats অ্যাপ থেকে অর্ডার দেখতে, আপডেট করতে এবং মুছে ফেলতে দেবে। আপনি ভার্চুয়াল প্রাইভেট নেটওয়ার্ক (VPN) ব্যবহার না করে পোর্টাল অ্যাক্সেস সুরক্ষিত করতে আইডেন্টিটি অ্যাওয়্যার প্রক্সি (IAP) ব্যবহার করবেন। IAP একটি জিরো-ট্রাস্ট অ্যাক্সেস মডেল বাস্তবায়নকে সহজ করে এবং অন-প্রিমিসেস ও ক্লাউড উভয় পরিবেশে থাকা রিমোট কর্মীদের জন্য VPN-এর চেয়ে কম সময় নেয়, যেখানে আপনার অ্যাপগুলিতে অ্যাক্সেস পরিচালনার জন্য একটি একক নিয়ন্ত্রণ কেন্দ্র থাকে।

94b06525c85408ad.png

আইডেন্টিটি-অ্যাওয়ার প্রক্সি কী?

আইডেন্টিটি-অ্যাওয়্যার প্রক্সি (IAP) হলো একটি গুগল ক্লাউড পরিষেবা, যা আপনার অ্যাপ্লিকেশনে পাঠানো অনুরোধগুলো গ্রহণ করে, গুগল আইডেন্টিটি সার্ভিস ব্যবহার করে অনুরোধকারী ব্যবহারকারীকে প্রমাণীকরণ করে এবং শুধুমাত্র অ্যাপ্লিকেশনটি অ্যাক্সেস করার জন্য অনুমোদিত ব্যবহারকারীর কাছ থেকে আসা অনুরোধগুলোকেই অনুমোদন দেয়। এছাড়াও, এটি প্রমাণীকৃত ব্যবহারকারীর তথ্য অন্তর্ভুক্ত করার জন্য অনুরোধের হেডারগুলো পরিবর্তন করতে পারে।

আপনি যা শিখবেন

  • সার্ভারলেস নেটওয়ার্ক এন্ডপয়েন্ট গ্রুপ (NEG) কীভাবে কনফিগার করবেন
  • লোড ব্যালেন্সার কীভাবে কনফিগার করবেন
  • অ্যাক্সেস সীমাবদ্ধ করতে IAP কীভাবে সক্রিয় করবেন
  • IAP ব্যবহার করে কীভাবে অ্যাক্সেস সীমাবদ্ধ করা যায়

২. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিতে পরিবেশ সেটআপ

  1. Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর প্রয়োজন হয় না। বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে।
  • আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নাম্বার এবং কিছু এপিআই এটি ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
  1. এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর যাতে কোনো বিলিং না হয়, সেজন্য রিসোর্সগুলো বন্ধ করতে আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা পুরো প্রজেক্টটিই ডিলিট করে দিতে পারেন। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

পরিবেশ সেটআপ

  1. প্রকল্প এবং সম্পদ সম্পর্কিত পরিবেশ ভেরিয়েবল তৈরি করুন
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export REGION=us-east1
export ORDER_SERVICE_URL=order-service
export INVENTORY_SERVICE_URL=inventory-service
export MENU_SERVICE_URL=menu-service
  1. IAP এবং ক্লাউড রিসোর্স ম্যানেজার পরিষেবা API গুলি সক্রিয় করুন
gcloud services enable \
    iap.googleapis.com \
    cloudresourcemanager.googleapis.com \
    cloudidentity.googleapis.com \
    compute.googleapis.com
  1. স্যাম্পল অ্যাপ রিপোজিটরিটি ক্লোন করুন এবং ডিরেক্টরিতে যান
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
  1. সেটআপ স্ক্রিপ্ট ব্যবহার করে কর্মচারী পোর্টালটি স্থাপন করুন। পরবর্তী ধাপে যাওয়ার আগে স্ক্রিপ্টটি সম্পূর্ণ হওয়া পর্যন্ত অপেক্ষা করুন।
./setup.sh

উদাহরণ আউটপুট

...
Done.
Service [employee-ui-service] revision [employee-ui-service-00001-quw] has been deployed and is serving 100 percent of traffic.
Service URL: https://employee-ui-service-gbtuuy5eda-uk.a.run.app
  1. সার্ভিস ইউআরএল লিঙ্কে ক্লিক করুন

86416f68c0b8152a.png

৩. সার্ভারবিহীন নেটওয়ার্ক এন্ডপয়েন্ট গ্রুপ (NEG) কনফিগার করা

আপনি এমপ্লয়ি UI ক্লাউড রান সার্ভিসের জন্য একটি সার্ভারলেস নেটওয়ার্ক এন্ডপয়েন্ট গ্রুপ ( সার্ভারলেস NEG ) তৈরি করবেন। সার্ভারলেস NEG আপনাকে এক্সটার্নাল HTTP(S) লোড ব্যালান্সিং- এর সাথে গুগল ক্লাউড সার্ভারলেস অ্যাপ ব্যবহার করার সুযোগ দেয়।

2abe669e53c27186.png

  1. কর্মচারী UI পরিষেবার জন্য একটি নেটওয়ার্ক এন্ডপয়েন্ট গ্রুপ তৈরি করুন।
gcloud compute network-endpoint-groups create employee-ui-iap-neg \
    --project $PROJECT_ID \
    --region=$REGION \
    --network-endpoint-type=serverless  \
    --cloud-run-service=employee-ui-service

উদাহরণ আউটপুট

Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/regions/us-east1/networkEndpointGroups/employee-ui-iap-neg].
Created network endpoint group [employee-ui-iap-neg].

একটি ব্যাকএন্ড পরিষেবা তৈরি করুন এবং সার্ভারলেস NEG যোগ করুন

একটি ব্যাকএন্ড সার্ভিস নির্ধারণ করে যে ক্লাউড লোড ব্যালান্সিং কীভাবে ট্র্যাফিক বিতরণ করবে। ব্যাকএন্ড সার্ভিসের কনফিগারেশনে কিছু ভ্যালু থাকে, যেমন ব্যাকএন্ডের সাথে সংযোগ করার জন্য ব্যবহৃত প্রোটোকল, বিভিন্ন ডিস্ট্রিবিউশন ও সেশন সেটিংস, হেলথ চেক এবং টাইমআউট। এই সেটিংসগুলো আপনার লোড ব্যালান্সারের আচরণের উপর সূক্ষ্ম নিয়ন্ত্রণ প্রদান করে।

  1. একটি ব্যাকএন্ড পরিষেবা তৈরি করুন
gcloud compute backend-services create employee-ui-iap-backend \
        --global 

উদাহরণ আউটপুট

Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend].
NAME: employee-ui-iap-backend
BACKENDS:
PROTOCOL: HTTP
  1. সার্ভারলেস NEG-কে ব্যাকএন্ড সার্ভিসে একটি ব্যাকএন্ড হিসেবে যুক্ত করুন।
gcloud compute backend-services add-backend employee-ui-iap-backend \
    --global \
    --network-endpoint-group=employee-ui-iap-neg \
    --network-endpoint-group-region=$REGION

উদাহরণ আউটপুট

Updated [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend].
  1. ব্যাকএন্ড সার্ভিসে আগত অনুরোধগুলি পাঠানোর জন্য একটি ইউআরএল ম্যাপ তৈরি করুন।
gcloud compute url-maps create employee-ui-iap-url-map \
    --default-service employee-ui-iap-backend
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/urlMaps/employee-ui-iap-url-map].
NAME: employee-ui-iap-url-map
DEFAULT_SERVICE: backendServices/employee-ui-iap-backend

৪. লোড ব্যালান্সারের উপাদানগুলো কনফিগার করা

নিম্নোক্ত ডায়াগ্রামটি দেখায় যে লোড ব্যালেন্সারটি একটি সার্ভারলেস ক্লাউড রান সার্ভিসে অনুরোধসমূহ প্রেরণ করার জন্য একটি সার্ভারলেস NEG ব্যাকএন্ড ব্যবহার করে।

335f4674737a6514.png

একটি স্ট্যাটিক আইপি অ্যাড্রেস রিজার্ভ করুন

  1. একটি স্ট্যাটিক IPv4 অ্যাড্রেস রিজার্ভ করুন এবং ডোমেইনটি সংরক্ষণ করুন।
gcloud compute addresses create employee-ui-iap-ip \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

উদাহরণ আউটপুট

Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/addresses/employee-ui-iap-ip].
  1. nip.io ডোমেইন সংরক্ষণ করুন
export DOMAIN=$(gcloud compute addresses list --filter employee-ui-iap-ip --format='value(ADDRESS)').nip.io

একটি গুগল-পরিচালিত SSL সার্টিফিকেট রিসোর্স তৈরি করুন

  1. একটি গুগল-পরিচালিত SSL সার্টিফিকেট রিসোর্স তৈরি করুন
gcloud compute ssl-certificates create employee-ui-iap-cert \
    --description=employee-ui-iap-cert \
    --domains=$DOMAIN \
    --global

উদাহরণ আউটপুট

Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/sslCertificates/employee-ui-iap-cert].
NAME: employee-ui-iap-cert
TYPE: MANAGED
CREATION_TIMESTAMP: 2022-04-18T06:39:37.474-07:00
EXPIRE_TIME:
MANAGED_STATUS: PROVISIONING

34.102.234.98.nip.io: PROVISIONING

একটি টার্গেট HTTPS প্রক্সি তৈরি করুন

  1. আপনার ইউআরএল ম্যাপে অনুরোধ রাউট করার জন্য টার্গেট HTTPS প্রক্সি তৈরি করুন।
gcloud compute target-https-proxies create employee-ui-iap-http-proxy \
    --ssl-certificates employee-ui-iap-cert \
    --url-map employee-ui-iap-url-map

উদাহরণ আউটপুট

Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/targetHttpsProxies/employee-ui-iap-http-proxy].
NAME: employee-ui-iap-http-proxy
SSL_CERTIFICATES: employee-ui-iap-cert
URL_MAP: employee-ui-iap-url-map
CERTIFICATE_MAP:

ফরওয়ার্ডিং নিয়ম কনফিগার করুন

  1. ইনকামিং রিকোয়েস্ট প্রক্সিতে পাঠানোর জন্য একটি ফরওয়ার্ডিং রুল তৈরি করুন।
gcloud compute forwarding-rules create employee-ui-iap-forwarding-rule \
    --load-balancing-scheme=EXTERNAL \
    --network-tier=PREMIUM \
    --address=employee-ui-iap-ip \
    --global \
    --ports=443 \
    --target-https-proxy employee-ui-iap-http-proxy

উদাহরণ আউটপুট

Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/forwardingRules/employee-ui-iap-forwarding-rule].

ক্লাউড রান পরিষেবাতে প্রবেশ সীমাবদ্ধ করা

ইনগ্রেস ট্র্যাফিককে শুধুমাত্র অভ্যন্তরীণ অনুরোধ এবং HTTP(S) লোড ব্যালেন্সিংয়ের মাধ্যমে আসা অনুরোধ গ্রহণ করার জন্য সীমাবদ্ধ করুন।

26cb0b2a9162e7ab.png

  1. শুধুমাত্র অভ্যন্তরীণ অনুরোধ এবং HTTP(S) লোড ব্যালেন্সারের মাধ্যমে আসা অনুরোধগুলিকে অনুমতি দেওয়ার জন্য পরিষেবাটি আপডেট করুন।
gcloud run services update employee-ui-service \
    --ingress internal-and-cloud-load-balancing \
    --region $REGION

উদাহরণ আউটপুট

OK Deploying... Done.                            
  OK Creating Revision...
  OK Routing traffic...
Done.
Service [employee-ui-service] revision [employee-ui-service-00001-quw] has been deployed and is serving 100 percent of traffic.
Service URL: https://employee-ui-service-gbtuuy5eda-uk.a.run.app
  1. সার্ভিস ইউআরএল লিঙ্কে ক্লিক করুন

8505fde7e0784bf1.png

ক্লাউড রান পরিষেবা ইউআরএল-এ প্রবেশ এখন নিষিদ্ধ দেখাচ্ছে।

৫. লোড ব্যালান্সারে ক্লাউড আইডেন্টিটি-অ্যাওয়্যার প্রক্সি (IAP) সক্রিয় করা

IAP আপনাকে HTTPS দ্বারা অ্যাক্সেস করা অ্যাপ্লিকেশনগুলির জন্য একটি কেন্দ্রীয় অনুমোদন স্তর স্থাপন করতে দেয়। আপনি নেটওয়ার্ক-স্তরের ফায়ারওয়ালের পরিবর্তে একটি অ্যাপ্লিকেশন-স্তরের অ্যাক্সেস নিয়ন্ত্রণ মডেল ব্যবহার করতে পারেন।

d9740402a74370a8.png

ব্র্যান্ড হলো OAuth সম্মতি স্ক্রিন, যেখানে ব্যবহারকারীদের জন্য ব্র্যান্ডিং তথ্য থাকে। ব্র্যান্ডগুলো অভ্যন্তরীণ বা সর্বজনীন ব্যবহারকারীদের জন্য সীমাবদ্ধ থাকতে পারে। একটি অভ্যন্তরীণ ব্র্যান্ড প্রজেক্টের একই Google Workspace সংস্থার কোনো সদস্যকে OAuth ফ্লো অ্যাক্সেস করার অনুমতি দেয়। একটি সর্বজনীন ব্র্যান্ড ইন্টারনেট অ্যাক্সেস আছে এমন যেকোনো ব্যক্তির জন্য OAuth ফ্লো-কে অ্যাক্সেসযোগ্য করে তোলে।

  1. একটি ব্র্যান্ড তৈরি করুন
export USER_EMAIL=$(gcloud config list account --format "value(core.account)")

gcloud alpha iap oauth-brands create \
    --application_title="Cymbal Eats" \
    --support_email=$USER_EMAIL

উদাহরণ আউটপুট

Created [462858740426].
applicationTitle: Cymbal Eats
name: projects/462858740426/brands/462858740426
orgInternalOnly: true

একটি IAP OAuth ক্লায়েন্ট তৈরি করা

  1. পূর্ববর্তী ধাপের ব্র্যান্ড নামটি ব্যবহার করে একজন ক্লায়েন্ট তৈরি করুন।
gcloud alpha iap oauth-clients create \
    projects/$PROJECT_ID/brands/$PROJECT_NUMBER \
    --display_name=cymbal-eats-employee-ui

উদাহরণ আউটপুট

Created [462858740426-tkpv8n03opijg7erd3s9ccued2pfllsd.apps.googleusercontent.com].
displayName: cymbal-eats-employee-ui
name: projects/462858740426/brands/462858740426/identityAwareProxyClients/462858740426-tkpv8n03opijg7erd3s9ccued2pfllsd.apps.googleusercontent.com
secret: [secret-removed]
  1. ক্লায়েন্টের নাম, আইডি এবং গোপনীয় তথ্য সংরক্ষণ করুন।
export CLIENT_NAME=$(gcloud alpha iap oauth-clients list \
    projects/$PROJECT_NUMBER/brands/$PROJECT_NUMBER --format='value(name)' \
    --filter="displayName:cymbal-eats-employee-ui")

export CLIENT_ID=${CLIENT_NAME##*/}

export CLIENT_SECRET=$(gcloud alpha iap oauth-clients describe $CLIENT_NAME --format='value(secret)')
  1. ক্লাউড কনসোলে, ড্রপ-ডাউন প্রজেক্ট সিলেকশন মেনু থেকে প্রজেক্টটি নির্বাচন করুন।
  2. ক্লাউড কনসোলে OAuth সম্মতি স্ক্রিনে যান

bcb460f3ab5241f4.png

  1. ব্যবহারকারীর প্রকারের অধীনে বাহ্যিক তৈরি করুন-এ ক্লিক করুন
  2. প্রকাশনার অবস্থা হিসেবে টেস্টিং নির্বাচন করুন

27fd7de6e7b7ef21.png

  1. নিশ্চিত করুন ক্লিক করুন

৬. আইএপি-এর মাধ্যমে প্রবেশাধিকার সীমিত করা

IAP ব্যবহার করে ব্যাকএন্ড পরিষেবাতে প্রবেশাধিকার সীমাবদ্ধ করুন এবং তারপর যাচাই করুন যে অ্যাপ্লিকেশনটি অ্যাক্সেসযোগ্য নয়।

  1. ব্যাকএন্ড পরিষেবাতে IAP সক্রিয় করুন
gcloud iap web enable --resource-type=backend-services \
    --oauth2-client-id=$CLIENT_ID \
    --oauth2-client-secret=$CLIENT_SECRET \
    --service=employee-ui-iap-backend

IAP কনফিগারেশন যাচাই করুন

  1. SSL সার্টিফিকেটটি সক্রিয় আছে কিনা যাচাই করুন।
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
  1. পরিষেবার URL পান
echo https://$DOMAIN

উদাহরণ আউটপুট

https://34.102.234.98.nip.io
  1. কর্মচারী পোর্টালটি খুলতে সার্ভিস ইউআরএল-এ ক্লিক করুন।

352b600209c3fb33.png

  1. আপনার ল্যাব ক্রেডেনশিয়াল ব্যবহার করে লগইন করুন।

f7e0318388aa0739.png

  1. ব্রাউজারটি বন্ধ করুন

ব্যবহারকারীকে কর্মচারী পোর্টালে প্রবেশাধিকার দিন

  1. পূর্ববর্তী ধাপে তৈরি করা ব্যবহারকারীর জন্য 'roles/iap.httpsResourceAccessor' রোলের একটি IAM পলিসি বাইন্ডিং যোগ করুন।
gcloud iap web add-iam-policy-binding \
    --resource-type=backend-services \
    --service=employee-ui-iap-backend \
    --member=user:$USER_EMAIL \
    --role='roles/iap.httpsResourceAccessor'

উদাহরণ আউটপুট

Updated IAM policy for backend service [projects/462858740426/iap_web/compute/services/employee-ui-iap-backend].

টেস্টিং পরিষেবা অ্যাক্সেস

কর্মচারী পোর্টালে প্রবেশের অনুমতি দেওয়া হয়েছে কিনা তা নিশ্চিত করুন।

  1. পরিষেবার URL পান
echo https://$DOMAIN

উদাহরণ আউটপুট

https://34.102.234.98.nip.io
  1. কর্মচারী পোর্টালটি খুলতে সার্ভিস ইউআরএল-এ ক্লিক করুন।

86416f68c0b8152a.png

এখন আপনি কর্মচারী পোর্টালে প্রবেশাধিকার পাবেন।

(ঐচ্ছিক) সমস্ত নির্ভরতা স্থাপন করুন, এই মাইক্রোসার্ভিসগুলি স্থাপন করতে প্রায় ২০ মিনিট সময় লাগতে পারে।

unset ORDER_SERVICE_URL
unset INVENTORY_SERVICE_URL
unset MENU_SERVICE_URL

cd ~/cymbal-eats

./setup.sh
./get-site-urls.sh

৭. অভিনন্দন!

অভিনন্দন, আপনি কোডল্যাবটি সম্পন্ন করেছেন!

এরপর কী:

Cymbal Eats-এর অন্যান্য কোডল্যাবগুলি অন্বেষণ করুন:

পরিষ্কার করা

এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সগুলোর জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে, হয় রিসোর্সগুলো যে প্রজেক্টে রয়েছে সেটি ডিলিট করে দিন, অথবা প্রজেক্টটি রেখে দিয়ে আলাদা আলাদা রিসোর্সগুলো ডিলিট করে দিন।

প্রকল্পটি মুছে ফেলা হচ্ছে

বিলিং বন্ধ করার সবচেয়ে সহজ উপায় হলো টিউটোরিয়ালের জন্য তৈরি করা প্রজেক্টটি ডিলিট করে দেওয়া।