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

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

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

94b06525c85408ad.png

আইডেন্টিটি-সচেতন প্রক্সি কি?

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

যা শিখবেন

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

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

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

আপনি কর্মচারী UI ক্লাউড রান পরিষেবার জন্য একটি সার্ভারলেস নেটওয়ার্ক এন্ডপয়েন্ট গ্রুপ ( সার্ভারলেস NEG ) তৈরি করবেন। সার্ভারবিহীন NEGs আপনাকে বাহ্যিক 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

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

নিম্নলিখিত চিত্রটি দেখায় যে লোড ব্যালেন্সার একটি সার্ভারবিহীন 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-এ অ্যাক্সেস এখন নিষিদ্ধ হিসাবে দেখায়৷

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

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

d9740402a74370a8.png

একটি ব্র্যান্ড হল OAuth সম্মতি স্ক্রিন যাতে ব্যবহারকারীদের জন্য ব্র্যান্ডিং তথ্য থাকে। ব্র্যান্ডগুলি অভ্যন্তরীণ বা সর্বজনীন ব্যবহারকারীদের মধ্যে সীমাবদ্ধ হতে পারে। একটি অভ্যন্তরীণ ব্র্যান্ড OAuth ফ্লোকে প্রকল্প হিসাবে একই Google Workspace সংস্থার সদস্যদের অ্যাক্সেস করার অনুমতি দেয়। একটি সর্বজনীন ব্র্যান্ড 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. User Type এর অধীনে MAKE EXTERNAL এ ক্লিক করুন
  2. প্রকাশনার স্থিতি হিসাবে পরীক্ষা নির্বাচন করুন

27fd7de6e7b7ef21.png

  1. CONFIRM এ ক্লিক করুন

6. 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

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

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

unset ORDER_SERVICE_URL
unset INVENTORY_SERVICE_URL
unset MENU_SERVICE_URL

cd ~/cymbal-eats

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

7. অভিনন্দন!

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

এরপর কি:

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

পরিষ্কার কর

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

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

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