IAM-নিয়ন্ত্রিত ট্যাগ সহ হায়ারার্কিকাল ফায়ারওয়াল নীতি

1. ভূমিকা

ক্লাউড নেক্সট জেনারেশন ফায়ারওয়াল (NGFW)

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

ক্লাউড এনজিএফডব্লিউ-এর নিম্নলিখিত সুবিধাগুলো রয়েছে:

  • ডিস্ট্রিবিউটেড ফায়ারওয়াল পরিষেবা: ক্লাউড এনজিএফডব্লিউ জিরো-ট্রাস্ট নিরাপত্তা আর্কিটেকচার সক্ষম করার জন্য প্রতিটি ওয়ার্কলোডের উপর একটি স্টেটফুল, সম্পূর্ণ ডিস্ট্রিবিউটেড হোস্ট-ভিত্তিক প্রয়োগ ব্যবস্থা প্রদান করে।
  • সরলীকৃত কনফিগারেশন এবং স্থাপন: ক্লাউড এনজিএফডব্লিউ (Cloud NGFW) নেটওয়ার্ক এবং হায়ারারকিক্যাল ফায়ারওয়াল পলিসি প্রয়োগ করে যা একটি রিসোর্স হায়ারার্কি নোডের সাথে সংযুক্ত করা যেতে পারে। এই পলিসিগুলো গুগল ক্লাউড রিসোর্স হায়ারার্কি জুড়ে একটি সামঞ্জস্যপূর্ণ ফায়ারওয়াল অভিজ্ঞতা প্রদান করে।
  • সূক্ষ্ম নিয়ন্ত্রণ এবং মাইক্রো-সেগমেন্টেশন: ফায়ারওয়াল পলিসি এবং আইডেন্টিটি অ্যান্ড অ্যাক্সেস ম্যানেজমেন্ট (IAM) দ্বারা পরিচালিত ট্যাগ-এর সমন্বয়, ভার্চুয়াল প্রাইভেট ক্লাউড (VPC) নেটওয়ার্ক জুড়ে একটি একক VM পর্যন্ত নর্থ-সাউথ এবং ইস্ট-ওয়েস্ট উভয় ট্র্যাফিকের জন্য সূক্ষ্ম নিয়ন্ত্রণ প্রদান করে।

নেটওয়ার্ক ফায়ারওয়াল নীতি

নেটওয়ার্ক ফায়ারওয়াল পলিসি ফায়ারওয়াল নিয়মগুলোর জন্য একটি ধারক হিসেবে কাজ করে। একটি নেটওয়ার্ক ফায়ারওয়াল পলিসিতে সংজ্ঞায়িত নিয়মগুলো ততক্ষণ পর্যন্ত কোথাও প্রয়োগ করা হয় না, যতক্ষণ না পলিসিটি একটি VPC নেটওয়ার্কের সাথে যুক্ত করা হয়। প্রতিটি VPC নেটওয়ার্কের সাথে একটি নেটওয়ার্ক ফায়ারওয়াল পলিসি যুক্ত থাকতে পারে। নেটওয়ার্ক ফায়ারওয়াল পলিসিগুলো ফায়ারওয়াল নিয়মে IAM-নিয়ন্ত্রিত ট্যাগ (বা শুধু ট্যাগ) সমর্থন করে এবং ওয়ার্কলোডের পরিচয় প্রদানের জন্য ব্যবহার করা যেতে পারে।

বিভিন্ন নেটওয়ার্কে নেটওয়ার্ক ফায়ারওয়াল পলিসি শেয়ার করা এবং IAM-শাসিত ট্যাগগুলোর সাথে এর ইন্টিগ্রেশন ফায়ারওয়ালের কনফিগারেশন ও ব্যবস্থাপনাকে ব্যাপকভাবে সহজ করে তোলে।

নেটওয়ার্ক ফায়ারওয়াল পলিসি চালু হওয়ার ফলে, গুগল ক্লাউডের ফায়ারওয়াল পলিসিগুলোতে এখন নিম্নলিখিত উপাদানগুলো রয়েছে:

  1. শ্রেণিবদ্ধ ফায়ারওয়াল নীতি
  2. ভিপিসি ফায়ারওয়াল নিয়মাবলী
  3. গ্লোবাল নেটওয়ার্ক ফায়ারওয়াল নীতি এবং আঞ্চলিক নেটওয়ার্ক ফায়ারওয়াল নীতি

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

এই ল্যাবে আমরা হায়ারারকিক্যাল ফায়ারওয়াল পলিসি এবং গ্লোবাল নেটওয়ার্ক ফায়ারওয়াল পলিসি পরীক্ষা করব।

অবশেষে, প্রতিটি VPC নেটওয়ার্কের সাথে কিছু অন্তর্নিহিত ফায়ারওয়াল নিয়মও থাকে:

  • একটি বহির্গমন নিয়ম যার অ্যাকশন হলো অনুমতি দেওয়া, গন্তব্য হলো 0.0.0.0/0
  • একটি ইনগ্রেস রুল যার অ্যাকশন হলো ডিনাই, সোর্স হলো 0.0.0.0/0

ডিফল্টরূপে, প্রয়োগের ক্রমটি নিম্নলিখিত ডায়াগ্রামে দেখানো হয়েছে:

86df8f0d19c64e80.png

IAM-শাসিত ট্যাগ

ফায়ারওয়াল পলিসি নিয়মে সমন্বিত নতুন ট্যাগগুলি হলো কী-ভ্যালু পেয়ার রিসোর্স, যা গুগল ক্লাউড রিসোর্স হায়ারার্কির অর্গানাইজেশন বা প্রজেক্ট লেভেলে সংজ্ঞায়িত করা থাকে। নাম থেকেই বোঝা যায়, এই ধরনের একটি ট্যাগে একটি IAM অ্যাক্সেস কন্ট্রোল থাকে, যা নির্দিষ্ট করে দেয় কে ট্যাগটির উপর কী করতে পারবে। উদাহরণস্বরূপ, IAM পারমিশন নির্দিষ্ট করে দেয় কোন প্রিন্সিপালরা ট্যাগে ভ্যালু নির্ধারণ করতে পারবে এবং কোন প্রিন্সিপালরা রিসোর্সে ট্যাগ সংযুক্ত করতে পারবে। কোনো রিসোর্সে একবার একটি ট্যাগ প্রয়োগ করা হলে, ফায়ারওয়াল পলিসি নিয়মগুলি ট্র্যাফিক অনুমোদন বা প্রত্যাখ্যান করার জন্য এটি ব্যবহার করতে পারে।

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

ট্যাগকে নেটওয়ার্ক ট্যাগের সাথে গুলিয়ে ফেলা উচিত নয়, নেটওয়ার্ক ট্যাগ হলো এমন কিছু স্ট্রিং যা Compute Engine ইনস্ট্যান্সে যোগ করা যায়; এগুলো ইনস্ট্যান্সের সাথে যুক্ত থাকে এবং ইনস্ট্যান্সটি ডিকমিশন করা হলে অদৃশ্য হয়ে যায়। VPC ফায়ারওয়াল নিয়মে নেটওয়ার্ক ট্যাগ অন্তর্ভুক্ত থাকতে পারে, কিন্তু যেহেতু এগুলোকে ক্লাউড রিসোর্স হিসেবে গণ্য করা হয় না, তাই এগুলো IAM অ্যাক্সেস কন্ট্রোলের আওতাভুক্ত নয়। এই পার্থক্যের বিস্তারিত জানতে এই পৃষ্ঠাটি দেখুন।

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

  • ক্লাউড এনজিএফডব্লিউ (Cloud NGFW)-এর সাথে ব্যবহারের জন্য এবং গ্লোবাল স্কোপে আইএএম (IAM) নিয়ন্ত্রিত ট্যাগ কীভাবে তৈরি করবেন।
  • ভিএম-এ কীভাবে ট্যাগ সংযুক্ত করবেন।
  • কীভাবে একটি হায়ারারকিক্যাল ফায়ারওয়াল পলিসি তৈরি করবেন এবং এটিকে একটি ফোল্ডারের সাথে যুক্ত করবেন।
  • হায়ারারকিক্যাল ফায়ারওয়াল পলিসিতে কীভাবে একটি ফায়ারওয়াল রুল তৈরি করবেন এবং IAM-নিয়ন্ত্রিত ট্যাগ ব্যবহার করে সোর্স ও টার্গেট নির্দিষ্ট করবেন।

৩. সামগ্রিক ল্যাব স্থাপত্য

1bfe78ad755496e5.png

সংগঠন এবং ফোল্ডার:

  • আপনি আপনার প্রতিষ্ঠানের সরাসরি অধীনে folder1 এবং folder2 দুটি ফোল্ডার তৈরি করবেন।

প্রকল্পসমূহ:

  • folder1 ভিতরে আপনি একটি হোস্ট প্রজেক্ট তৈরি করবেন। এই প্রজেক্টটিতে শেয়ার্ড ভিপিসি নেটওয়ার্কটি থাকবে।
  • folder2 ভিতরে, আপনি একটি সার্ভিস প্রজেক্ট তৈরি করবেন। এই প্রজেক্টটিতে সেই VM-গুলো থাকবে যেগুলো শেয়ার্ড VPC ব্যবহার করে।

নেটওয়ার্কিং:

  • হোস্ট প্রজেক্টে mynet নামের একটি VPC নেটওয়ার্ক তৈরি করা হবে এবং এটিকে একটি শেয়ার্ড VPC হিসেবে কনফিগার করা হবে। এর ফলে সার্ভিস প্রজেক্টের রিসোর্সগুলো এই নেটওয়ার্কটি ব্যবহার করতে পারবে।
  • সার্ভিস প্রজেক্টে দুটি ভিএম তৈরি করা হবে এবং সেগুলোকে mynet Shared VPC-এর সাথে সংযুক্ত করা হবে।

IAM-শাসিত ট্যাগসমূহ:

  • আপনি সংস্থা স্তরে http_tags নামে একটি IAM-নিয়ন্ত্রিত ট্যাগ তৈরি করবেন, যার দুটি মান থাকবে: http_server এবং http_client । এই ট্যাগ/মানগুলি VM-গুলিকে শনাক্ত করতে এবং সেগুলিতে ফায়ারওয়াল নিয়ম প্রয়োগ করতে ব্যবহৃত হবে।

ফায়ারওয়াল নীতিমালা:

  • একটি হায়ারারকিক্যাল ফায়ারওয়াল পলিসি তৈরি করা হবে এবং folder1 -এর সাথে যুক্ত করা হবে। এই পলিসির অন্তর্ভুক্ত একটি নিয়ম IAM-নিয়ন্ত্রিত ট্যাগ ব্যবহার করে পোর্ট ৮০-তে http-client থেকে http-server এ ট্র্যাফিকের অনুমতি দেবে।
  • হোস্ট প্রজেক্টে একটি নেটওয়ার্ক ফায়ারওয়াল পলিসি তৈরি করা হবে এবং এটি mynet VPC-এর সাথে যুক্ত করা হবে। এই পলিসিতে পরীক্ষার উদ্দেশ্যে VM-গুলোতে IAP SSH অ্যাক্সেসের অনুমতি দেওয়ার জন্য একটি নিয়ম অন্তর্ভুক্ত থাকবে।

৪. প্রস্তুতির ধাপসমূহ

প্রথমে, আপনার গুগল ক্লাউড অর্গানাইজেশনে প্রয়োজনীয় IAM রোল, নেটওয়ার্ক ইনফ্রাস্ট্রাকচার এবং ইনস্ট্যান্সগুলো সেট আপ করুন।

ল্যাবে কাজ করার জন্য IAM পদের প্রয়োজন

আমরা অর্গানাইজেশন লেভেলে GCP অ্যাকাউন্টে প্রয়োজনীয় IAM রোলগুলো অ্যাসাইন করার মাধ্যমে শুরু করি।

  • অর্গানাইজেশন অ্যাডমিনিস্ট্রেটর ( roles/resourcemanager.organizationAdmin ) এই রোলটি আপনাকে IAM পলিসি পরিচালনা করতে এবং অর্গানাইজেশন, ফোল্ডার ও প্রোজেক্টের জন্য অর্গানাইজেশন পলিসি দেখতে দেয়।
  • ট্যাগ অ্যাডমিনিস্ট্রেটর ( roles/resourcemanager.tagAdmin ) এই রোলের মাধ্যমে আপনি সুরক্ষিত ট্যাগ তৈরি, আপডেট এবং ডিলিট করতে পারবেন।
  • ট্যাগ ব্যবহারকারী ভূমিকা ( roles/resourcemanager.tagUser ) এই ভূমিকাটি আপনাকে সুরক্ষিত ট্যাগগুলির তালিকা অ্যাক্সেস করতে এবং রিসোর্সগুলির সাথে তাদের সংযোগ পরিচালনা করতে দেয়।
  • কম্পিউট অর্গানাইজেশন ফায়ারওয়াল পলিসি অ্যাডমিন রোল ( roles/compute.orgFirewallPolicyAdmin ) এই রোলটি আপনাকে কম্পিউট ইঞ্জিন অর্গানাইজেশন ফায়ারওয়াল পলিসিগুলোর উপর সম্পূর্ণ নিয়ন্ত্রণ দেয়।
  • কম্পিউট অর্গানাইজেশন রিসোর্স অ্যাডমিন রোল ( roles/compute.orgSecurityResourceAdmin ) এই রোলটি আপনাকে অর্গানাইজেশন বা ফোল্ডারের সাথে কম্পিউট ইঞ্জিন ফায়ারওয়াল পলিসি অ্যাসোসিয়েশনগুলির উপর সম্পূর্ণ নিয়ন্ত্রণ দেয়।
  • কম্পিউট নেটওয়ার্ক অ্যাডমিন ( roles/compute.networkAdmin ) এই রোলটি আপনাকে কম্পিউট ইঞ্জিনের নেটওয়ার্কিং রিসোর্সগুলোর উপর সম্পূর্ণ নিয়ন্ত্রণ দেয়।
  • কম্পিউট ইনস্ট্যান্স অ্যাডমিন (বিটা) ( roles/compute.instanceAdmin ) এই রোলটি আপনাকে কম্পিউট ইঞ্জিন ইনস্ট্যান্স রিসোর্সের উপর সম্পূর্ণ নিয়ন্ত্রণ দেয়।
  • লগিং অ্যাডমিন ( roles/logging.admin ) এই রোলটি আপনাকে সমস্ত লগিং পারমিশন এবং এর উপর নির্ভরশীল পারমিশনগুলো ব্যবহারের সুযোগ দেয়।
  • সার্ভিস অ্যাকাউন্ট অ্যাডমিন ( roles/iam.serviceAccountAdmin ) এই রোলটি আপনাকে সার্ভিস অ্যাকাউন্ট তৈরি এবং পরিচালনা করার ক্ষমতা দেয়।
  • সার্ভিস ইউসেজ অ্যাডমিন ( roles/serviceusage.serviceUsageAdmin ) এই রোলটি আপনাকে সার্ভিসের অবস্থা চালু, বন্ধ ও পরিদর্শন করা, অপারেশন পরিদর্শন করা এবং একটি কনজিউমার প্রজেক্টের জন্য কোটা ও বিলিং ব্যবহার করার ক্ষমতা দেয়।
  • কম্পিউট শেয়ার্ড ভিপিসি অ্যাডমিন ( roles/compute.xpnAdmin ) এই রোলটি আপনাকে একটি শেয়ার্ড ভিপিসি নেটওয়ার্ক (XPN) পরিচালনা করার ক্ষমতা দেয়।

ফোল্ডার এবং প্রজেক্ট তৈরি করুন

Cloud Shell-এর ভিতরে, folder1 এবং folder2 তৈরি করতে নিম্নলিখিতগুলি করুন:

gcloud auth login

export org_id=$(gcloud organizations list --format='value(ID)')
export BILLING_ACCOUNT_ID=$(gcloud billing accounts list --format='value(ACCOUNT_ID)')
export folder1=[FOLDER1 NAME]
export folder2=[FOLDER2 NAME]
export hostproject=[HOST PROJECT NAME]
export serviceproject=[SERVICE PROJECT NAME]
export regionname=[REGION NAME]
export zonename=[COMPUTE ZONE NAME]

gcloud resource-manager folders create --display-name=$folder1 --organization=$org_id
export folder1_id=$(gcloud resource-manager folders list --organization=$org_id --filter="displayName=$folder1" --format="value(ID)")
gcloud resource-manager folders create --display-name=$folder2 --organization=$org_id
export folder2_id=$(gcloud resource-manager folders list --organization=$org_id --filter="displayName=$folder2" --format="value(ID)")

Cloud Shell-এর ভিতরে, folder1 এর অধীনে হোস্ট প্রজেক্ট তৈরি করতে নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud projects create  --name=$hostproject --folder=$folder1_id

আপনি নিম্নলিখিতটি দেখতে পাবেন। নতুন প্রজেক্ট আইডি দিয়ে প্রজেক্টটি তৈরি করতে Y চাপুন।

No project ID provided.

Use [NEW-PROJECT-ID] as project ID (Y/n)?

প্রজেক্ট আইডিটি লিখে রাখুন। ক্লাউড শেলের ভিতরে, এটিকে hostproject_id-তে এক্সপোর্ট করতে নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন:

export hostproject_id=[HOSTPROJECT ID]

ক্লাউড শেলের ভিতরে, হোস্ট প্রজেক্টকে বিলিং অ্যাকাউন্টের সাথে লিঙ্ক করতে নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud billing projects link $hostproject_id \
--billing-account=$BILLING_ACCOUNT_ID

Cloud Shell-এর ভিতরে, folder2 এর অধীনে সার্ভিস প্রজেক্টটি তৈরি করতে নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন:

gcloud projects create  --name=$serviceproject --folder=$folder2_id

আপনি নিম্নলিখিতটি দেখতে পাবেন। নতুন প্রজেক্ট আইডি দিয়ে প্রজেক্টটি তৈরি করতে Y চাপুন।

No project ID provided.

Use [NEW-PROJECT-ID] as project ID (Y/n)?

প্রজেক্ট আইডিটি লিখে রাখুন। ক্লাউড শেলের ভিতরে, এটিকে serviceproject_id-তে এক্সপোর্ট করতে নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন:

export serviceproject_id=[SERVICEPROJECT ID]

ক্লাউড শেলের ভিতরে, সার্ভিস প্রজেক্টটিকে বিলিং অ্যাকাউন্টের সাথে লিঙ্ক করতে নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud billing projects link $serviceproject_id \
--billing-account=$BILLING_ACCOUNT_ID

IAM-শাসিত ট্যাগ তৈরি করুন

ট্যাগ হলো একটি কী-ভ্যালু পেয়ার যা কোনো অর্গানাইজেশন, ফোল্ডার বা প্রজেক্টের সাথে সংযুক্ত করা যায়। আরও বিস্তারিত জানতে ‘ট্যাগ তৈরি ও ব্যবস্থাপনা এবং প্রয়োজনীয় অনুমতিসমূহ’ দেখুন।

আমরা সংস্থা পর্যায়ে http-tags একটি ট্যাগ তৈরি করি। এই ট্যাগটির উদ্দেশ্য হলো ক্লাউড এনজিএফডব্লিউ (Cloud NGFW) ব্যবহার করা। আমরা এর পরিধি কোনো একটি নেটওয়ার্কে সীমাবদ্ধ রাখি না – ট্যাগটি বিশ্বব্যাপী প্রযোজ্য। এবং পরবর্তীতে আমরা folder2 এর অধীনে সার্ভিস প্রজেক্টে তৈরি করা ভিএমগুলোতে (VMs) এই ট্যাগটি প্রয়োগ করব।

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud resource-manager tags keys create http_tags \
    --parent=organizations/$org_id \
    --purpose GCE_FIREWALL \
    --purpose-data organization=auto

ভিএম তৈরির সময় টীকা যোগ করার জন্য আমরা ট্যাগ কী আইডি ব্যবহার করব। ক্লাউড শেলের ভিতরে, ট্যাগ কী আইডি পেতে নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন:

export http_tags_id=$(gcloud resource-manager tags keys describe $org_id/http_tags --format="value(name)")
echo $http_tags_id

ক্লাউড শেলের ভিতরে, http_serverhttp_client দুটি নতুন ট্যাগ ভ্যালু তৈরি করতে নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করুন:

 gcloud resource-manager tags values create http_server \
      --parent $org_id/http_tags
 gcloud resource-manager tags values create http_client \
      --parent $org_id/http_tags

ভিএম তৈরির সময় সেটিকে চিহ্নিত করতে আমরা ট্যাগ আইডি এবং ট্যাগ ভ্যালু আইডি ব্যবহার করব। ক্লাউড শেলের ভিতরে, http_server এবং http_client এর ট্যাগ ভ্যালু আইডি পেতে নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন:

export http_tags_http_server_id=$(gcloud resource-manager tags values describe $org_id/http_tags/http_server --format="value(name)")
echo $http_tags_http_server_id

export http_tags_http_client_id=$(gcloud resource-manager tags values describe $org_id/http_tags/http_client --format="value(name)")
echo $http_tags_http_client_id

হোস্ট প্রজেক্ট এবং সার্ভিস প্রজেক্টে এপিআই (API) সক্রিয় করুন।

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud services enable compute.googleapis.com --project=$serviceproject_id
gcloud services enable compute.googleapis.com --project=$hostproject_id

হোস্ট প্রজেক্টে একটি VPC তৈরি করুন

হোস্ট প্রজেক্টে কাস্টম সাবনেট মোড সহ একটি VPC নেটওয়ার্ক তৈরি করুন এবং ক্লাউড শেলের ভিতরে নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud compute networks create mynet \
    --subnet-mode=custom \
    --project=$hostproject_id

হোস্ট প্রজেক্টে সাবনেট তৈরি করুন

ক্লাউড শেলের ভিতরে, একটি IPV4 সাবনেট তৈরি করতে নিম্নলিখিতগুলি করুন:

gcloud compute networks subnets create mysubnet \
    --network=mynet \
    --range=10.0.0.0/28 \
    --region=$regionname \
    --project=$hostproject_id

হোস্ট প্রজেক্টে শেয়ার্ড ভিপিসি সক্রিয় করুন।

হোস্ট প্রজেক্টে শেয়ার্ড ভিপিসি (Shared VPC) সক্রিয় করতে ক্লাউড শেল (Cloud Shell)-এর ভিতরে নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud compute shared-vpc enable $hostproject_id

হোস্ট প্রজেক্টে শেয়ার্ড ভিপিসির জন্য সার্ভিস প্রজেক্ট সংযুক্ত করুন।

হোস্ট প্রজেক্টে শেয়ার্ড ভিপিসি-র জন্য সার্ভিস প্রজেক্ট সংযুক্ত করতে ক্লাউড শেলের ভিতরে নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud compute shared-vpc associated-projects add $serviceproject_id --host-project=$hostproject_id 

হোস্ট প্রজেক্টে ক্লাউড রাউটার এবং ক্লাউড ন্যাট তৈরি করুন

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

gcloud compute routers create $regionname-cr \
   --network=mynet \
   --region=$regionname \
   --project=$hostproject_id
gcloud compute routers nats create $regionname-nat \
    --router=$regionname-cr \
    --region=$regionname \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips \
    --project=$hostproject_id

সার্ভিস প্রজেক্টে ইনস্ট্যান্স তৈরি করুন

সার্ভিস প্রজেক্টে, হোস্টপ্রজেক্টের শেয়ার্ড ভিপিসিতে আপনি এইমাত্র তৈরি করা সাবনেটগুলোতে দুটি ইনস্ট্যান্স তৈরি করুন। একটি ইনস্ট্যান্সের নাম হবে http-server এবং আমরা http_tags ট্যাগটিকে http_server ভ্যালু দিয়ে অ্যানোটেট করব। অন্য ইনস্ট্যান্সটির নাম হবে http-client এবং আমরা http_tags ট্যাগটিকে http_client ভ্যালু দিয়ে অ্যানোটেট করব। ক্লাউড শেলে নিম্নলিখিত কমান্ড(গুলো) চালান:

gcloud compute instances create http-client \
    --project=$serviceproject_id \
   --subnet=projects/$hostproject_id/regions/$regionname/subnetworks/mysubnet \
    --zone=$zonename \
    --no-address \
    --resource-manager-tags=$http_tags_id=$http_tags_http_client_id

gcloud compute instances create http-server \
    --project=$serviceproject_id \
    --subnet=projects/$hostproject_id/regions/$regionname/subnetworks/mysubnet \
    --zone=$zonename \
    --no-address \
    --resource-manager-tags=$http_tags_id=$http_tags_http_server_id \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    a2enmod ssl
    sudo a2ensite default-ssl
    echo "I am a Http Server." | \
    tee /var/www/html/index.html
    systemctl restart apache2'

http-server এর অভ্যন্তরীণ আইপি-টি লিখে রাখুন। আমরা পরবর্তী ফায়ারওয়াল নিয়ম পরীক্ষার ধাপে এটি ব্যবহার করব।

export http_server_ip=$(gcloud compute instances describe http-server --zone $zonename --format='value(networkInterfaces[0].networkIP)' --project $serviceproject_id)
echo $http_server_ip

৫. হোস্ট প্রজেক্টে একটি গ্লোবাল নেটওয়ার্ক ফায়ারওয়াল পলিসি তৈরি করুন।

আমরা হোস্ট প্রজেক্টে একটি গ্লোবাল নেটওয়ার্ক ফায়ারওয়াল পলিসি তৈরি করব এবং সেটিকে হোস্ট প্রজেক্টের শেয়ার্ড ভিপিসি-র সাথে যুক্ত করব।

gcloud config set project $hostproject_id
gcloud compute network-firewall-policies create  mynet-fw-policy \
--global \
--project=$hostproject_id
gcloud compute network-firewall-policies associations create \
    --firewall-policy=mynet-fw-policy \
    --network=mynet \
    --name=mynet-fw-policy \
    --global-firewall-policy \
    --project=$hostproject_id

আপনার VM ইনস্ট্যান্সগুলিতে IAP-কে সংযোগ করার অনুমতি দিতে, নেটওয়ার্ক ফায়ারওয়াল পলিসিতে একটি ফায়ারওয়াল নিয়ম তৈরি করুন:

  • এটি সেই সমস্ত VM ইনস্ট্যান্সের ক্ষেত্রে প্রযোজ্য, যেগুলোকে আপনি IAP ব্যবহার করে অ্যাক্সেসযোগ্য করতে চান।
  • 35.235.240.0/20 আইপি রেঞ্জ থেকে ইনগ্রেস ট্র্যাফিকের অনুমতি দেয়। এই রেঞ্জে সেই সমস্ত আইপি অ্যাড্রেস রয়েছে যা IAP টিসিপি ফরওয়ার্ডিংয়ের জন্য ব্যবহার করে।
gcloud compute network-firewall-policies rules create 1000 \
    --action=ALLOW \
    --firewall-policy=mynet-fw-policy \
    --description="mynet-allow-iap" \
    --direction=INGRESS \
    --src-ip-ranges=35.235.240.0/20 \
    --layer4-configs=tcp:22  \
    --global-firewall-policy \
    --project=$hostproject_id

কনসোলে, আপনি হোস্ট প্রজেক্টে গিয়ে ফায়ারওয়াল পলিসির অধীনে নতুন তৈরি করা গ্লোবাল নেটওয়ার্ক ফায়ারওয়াল পলিসিটি খুঁজে নিতে পারেন। আপনি নেটওয়ার্ক ফায়ারওয়াল পলিসিতে নতুন তৈরি করা ফায়ারওয়াল রুলটি যাচাই করতে পারেন। সেখানে যাওয়ার জন্য কনসোল লিঙ্কটি হলো এটি। অনুগ্রহ করে নিশ্চিত করুন যে আপনি কনসোলে প্রজেক্ট পিকারটি পরিবর্তন করে হোস্ট প্রজেক্টে সেট করেছেন।

৬. http-client VM থেকে http-server VM-এ অ্যাক্সেস পরীক্ষা করুন

http-client নামের VM-টিতে SSH করুন এবং পরীক্ষা করে দেখুন এটি http 80 পোর্টে http-server অ্যাক্সেস করতে পারে কি না।

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud compute ssh \
    --zone=$zonename "http-client" \
    --tunnel-through-iap \
    --project=$serviceproject_id

ওয়েব সার্ভার অ্যাক্সেস করতে curl ব্যবহার করুন।

curl -m 10 [http_server_ip]

আপনি কার্ল (curl) কমান্ডের ফলাফল দেখতে পাবেন। http-server এর জন্য পোর্ট ৮০-কে অনুমতি দেওয়ার মতো কোনো ইনগ্রেস ফায়ারওয়াল নিয়ম নেই।

১০০০০ মিলিসেকেন্ড পর সংযোগের সময়সীমা শেষ হয়ে গেছে।

SSH সেশন থেকে বেরিয়ে ক্লাউড শেলে ফিরে যান।

exit

৭. স্তরভিত্তিক ফায়ারওয়াল পলিসি এবং ফায়ারওয়াল নিয়ম তৈরি করুন

আমরা folder1 এ একটি হায়ারারকিক্যাল ফায়ারওয়াল পলিসি তৈরি করব এবং পলিসিটিকে folder1 এর সাথে যুক্ত করব। পলিসির ফায়ারওয়াল নিয়মগুলো folder1 এর অধীনে থাকা হোস্ট প্রজেক্টের উপর প্রযোজ্য হবে।

শ্রেণিবদ্ধ ফায়ারওয়াল নীতি তৈরি করুন

gcloud compute firewall-policies create \
  --folder=$folder1_id \
  --short-name=my-folder1-fw-policy

হায়ারারকিক্যাল ফায়ারওয়াল পলিসিতে ফায়ারওয়াল নিয়ম তৈরি করুন

এই নিয়মটি http_tags/http_client ট্যাগ ভ্যালুযুক্ত ভিএম-গুলোকে tcp পোর্ট ৮০-তে http_tags/http_server ট্যাগ ভ্যালুযুক্ত ভিএম-গুলোকে অ্যাক্সেস করার অনুমতি দেয়।

gcloud compute firewall-policies rules create 100 \
  --organization=$org_id \
  --firewall-policy my-folder1-fw-policy \
  --direction=INGRESS \
  --layer4-configs=tcp:80 \
  --action=allow \
  --src-secure-tags=$org_id/http_tags/http_client \
  --target-secure-tags=$org_id/http_tags/http_server \
  --description=folder1-allow-http

ফোল্ডার১-এর সাথে হায়ারারকিক্যাল ফায়ারওয়াল পলিসি সংযুক্ত করুন

gcloud compute firewall-policies associations create \
   --firewall-policy=my-folder1-fw-policy \
   --folder=$folder1_id \
   --name=my-folder1-fw-policy\
   --organization=$org_id

কনসোলে, আপনি folder1 এ গিয়ে Firewall Policy-এর অধীনে নতুন তৈরি করা হায়ারারকিক্যাল ফায়ারওয়াল পলিসিটি খুঁজে নিতে পারেন। ফায়ারওয়াল পলিসিটি "এই ফোল্ডারে অবস্থিত ফায়ারওয়াল পলিসিসমূহ" অংশে দেখানো হয়। আপনি হায়ারারকিক্যাল ফায়ারওয়াল পলিসিতে নতুন তৈরি করা ফায়ারওয়াল নিয়মটি পরীক্ষা করে দেখতে পারেন। সেখানে যাওয়ার জন্য কনসোল লিঙ্কটি হলো এটি। অনুগ্রহ করে নিশ্চিত করুন যে আপনি কনসোলে প্রজেক্ট পিকারটি folder1 এ পরিবর্তন করেছেন।

৮. http-client VM থেকে http-server VM-এ অ্যাক্সেস পরীক্ষা করুন

হোস্ট প্রজেক্টে শেয়ার্ড ভিপিসি-তে প্রয়োগ করা কার্যকর ফায়ারওয়াল পলিসিগুলো পরীক্ষা করুন।

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud compute networks get-effective-firewalls mynet --project=$hostproject_id

আপনি উত্তরাধিকারসূত্রে প্রাপ্ত শ্রেণিবদ্ধ ফায়ারওয়াল নীতিটি এইভাবে দেখতে পাবেন:

TYPE: org-firewall
FIREWALL_POLICY_NAME: <NUMBER_FOR_YOUR_FW_POLICY>
FIREWALL_POLICY_PRIORITY: 
PRIORITY: 100
ACTION: ALLOW
DIRECTION: INGRESS
DISABLED: False
IP_RANGES:

You will see the network firewall policy to the VPC like this:
TYPE: network-firewall-policy
FIREWALL_POLICY_NAME: mynet-fw-policy
FIREWALL_POLICY_PRIORITY: 1000
PRIORITY: 1000
ACTION: ALLOW
DIRECTION: INGRESS
DISABLED: False
IP_RANGES: 35.235.240.0/20

http-client নামের VM-টিতে SSH করুন এবং পরীক্ষা করে দেখুন এটি http 80 পোর্টে http-server অ্যাক্সেস করতে পারে কি না।

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud compute ssh \
    --zone=$zonename "http-client" \
    --tunnel-through-iap \
    --project=$serviceproject_id

ওয়েব সার্ভার অ্যাক্সেস করতে curl ব্যবহার করুন।

curl [http_server_ip]

আপনি দেখতে পাবেন যে `curl` কমান্ডটি http-server থেকে সফলভাবে প্রতিক্রিয়া ফেরত দিয়েছে।

I am a Http Server.

হায়ারারকিক্যাল ফায়ারওয়াল পলিসির ইনগ্রেস ফায়ারওয়াল নিয়মটি http-client থেকে http-server এ পোর্ট ৮০-তে অ্যাক্সেসের অনুমতি দেয়।

SSH সেশন থেকে বেরিয়ে ক্লাউড শেলে ফিরে যান।

exit

৯. পরিষ্কার করুন

সার্ভিস প্রজেক্টের ভিএমগুলো পরিষ্কার করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud compute instances delete http-server --zone $zonename --project=$serviceproject_id
gcloud compute instances delete http-client --zone $zonename --project=$serviceproject_id

হায়ারারকিক্যাল ফায়ারওয়াল পলিসি পরিষ্কার করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud compute firewall-policies associations delete my-folder1-fw-policy \
   --firewall-policy=my-folder1-fw-policy \
   --organization=$org_id
gcloud compute firewall-policies rules delete 100 \
  --organization=$org_id \
  --firewall-policy=my-folder1-fw-policy
gcloud compute firewall-policies delete my-folder1-fw-policy \
  --organization=$org_id

সংস্থা পর্যায়ে ট্যাগগুলি পরিষ্কার করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud resource-manager tags values delete $http_tags_http_server_id
gcloud resource-manager tags values delete $http_tags_http_client_id
gcloud resource-manager tags keys delete $http_tags_id

হোস্ট প্রজেক্টটি পরিষ্কার করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud compute shared-vpc associated-projects remove $serviceproject_id --host-project=$hostproject_id 
gcloud compute shared-vpc disable $hostproject_id
gcloud projects delete $hostproject_id

সেবা প্রকল্পটি পরিষ্কার করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud projects delete $serviceproject_id

ফোল্ডারগুলো পরিষ্কার করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud resource-manager folders delete $folder1_id
gcloud resource-manager folders delete $folder2_id

১০. অভিনন্দন

আপনি IAM-শাসিত ট্যাগ সহ হায়ারারকিক্যাল ফায়ারওয়াল পলিসি সফলভাবে পরীক্ষা করেছেন।