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

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

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

94b06525c85408ad.png সম্পর্কে

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

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

তুমি কি শিখবে

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

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

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

  1. গুগল ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন অথবা বিদ্যমান একটি পুনরায় ব্যবহার করুন। যদি আপনার ইতিমধ্যেই একটি জিমেইল বা গুগল ওয়ার্কস্পেস অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png সম্পর্কে

a99b7ace416376c4.png সম্পর্কে

bd84a6d3004737c5.png সম্পর্কে

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

পরিবেশ সেটআপ

  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. পরিষেবা URL লিঙ্কে ক্লিক করুন।

86416f68c0b8152a.png সম্পর্কে

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

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

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. আগত অনুরোধগুলিকে ব্যাকএন্ড পরিষেবাতে রুট করার জন্য একটি URL মানচিত্র তৈরি করুন
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

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

  1. একটি Google-পরিচালিত 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. আপনার URL ম্যাপে অনুরোধগুলি রুট করার জন্য লক্ষ্য 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. পরিষেবা URL লিঙ্কে ক্লিক করুন।

8505fde7e0784bf1.png সম্পর্কে

ক্লাউড রান পরিষেবার URL-এ অ্যাক্সেস এখন নিষিদ্ধ হিসেবে দেখানো হচ্ছে।

৫. লোড ব্যালেন্সারে ক্লাউড আইডেন্টিটি-অ্যাওয়ার প্রক্সি (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 সম্মতি স্ক্রিনে নেভিগেট করুন।

অনুসরণ

  1. ব্যবহারকারীর ধরণের অধীনে MAKE EXTERNAL এ ক্লিক করুন।
  2. প্রকাশনার অবস্থা হিসেবে পরীক্ষা নির্বাচন করুন

27fd7de6e7b7ef21.png সম্পর্কে

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

৬. IAP ব্যবহার করে অ্যাক্সেস সীমাবদ্ধ করা

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. কর্মচারী পোর্টাল খুলতে পরিষেবা URL-এ ক্লিক করুন।

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. কর্মচারী পোর্টাল খুলতে পরিষেবা URL-এ ক্লিক করুন।

86416f68c0b8152a.png সম্পর্কে

আপনার এখন কর্মচারী পোর্টালে অ্যাক্সেস থাকা উচিত।

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

unset ORDER_SERVICE_URL
unset INVENTORY_SERVICE_URL
unset MENU_SERVICE_URL

cd ~/cymbal-eats

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

৭. অভিনন্দন!

অভিনন্দন, তুমি কোডল্যাব শেষ করেছ!

এরপর কি:

অন্যান্য সিম্বাল ইটস কোডল্যাবগুলি অন্বেষণ করুন:

পরিষ্কার করা

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

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

বিলিং দূর করার সবচেয়ে সহজ উপায় হল টিউটোরিয়ালের জন্য তৈরি করা প্রকল্পটি মুছে ফেলা।