ভিপিসি সার্ভিস বেসিক টিউটোরিয়াল নিয়ন্ত্রণ করে II - এগ্রেস লঙ্ঘনের সমস্যা সমাধান করা

1. ভূমিকা

VPC সার্ভিস কন্ট্রোলস (VPC-SC) হল Google ক্লাউডের একটি প্রতিষ্ঠান স্তরের নিরাপত্তা নিয়ন্ত্রণ যা এন্টারপ্রাইজ গ্রাহকদের ডেটা এক্সফিল্ট্রেশন ঝুঁকি কমাতে সক্ষম করে। ভিপিসি সার্ভিস কন্ট্রোল ক্লায়েন্টকে অনুমোদিত আইপি, ক্লায়েন্ট প্রসঙ্গ এবং ডিভাইসের প্যারামিটারে অ্যাক্সেস সীমিত করতে সক্ষম করে মাল্টি-টেন্যান্ট পরিষেবাগুলিতে জিরো-ট্রাস্ট শৈলী অ্যাক্সেস সরবরাহ করে যাতে ইন্টারনেট এবং অন্যান্য পরিষেবাগুলি থেকে মাল্টি-টেন্যান্ট পরিষেবাগুলির সাথে সংযোগ স্থাপন করা হয় যাতে ইচ্ছাকৃত এবং উভয়ই হ্রাস করা যায়। অনিচ্ছাকৃত ক্ষতি। যেমনটি আমরা ভিপিসি সার্ভিস কন্ট্রোল বেসিক টিউটোরিয়াল I এ দেখেছি, আপনি পরিধি তৈরি করতে VPC পরিষেবা নিয়ন্ত্রণ ব্যবহার করতে পারেন যা আপনার স্পষ্টভাবে উল্লেখ করা পরিষেবার সংস্থান এবং ডেটা সুরক্ষিত রাখে।

এই টিউটোরিয়ালের লক্ষ্য হল:

  • ভিপিসি সার্ভিস কন্ট্রোলের বুনিয়াদি বুঝুন
  • একটি পরিষেবা পরিধি আপডেট করুন এবং এটি ড্রাই-রান মোড ব্যবহার করে পরীক্ষা করুন৷
  • ভিপিসি সার্ভিস কন্ট্রোল দিয়ে দুটি পরিষেবা সুরক্ষিত করুন
  • ক্লাউড স্টোরেজ থেকে একটি বস্তুর তালিকা করার সময় একটি ভিপিসি পরিষেবা নিয়ন্ত্রণ করে প্রস্থান লঙ্ঘনের সমস্যা সমাধান করুন

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

এই টিউটোরিয়ালের জন্য, আমাদের নিম্নলিখিত প্রাক-প্রয়োজনীয়তা প্রয়োজন:

dbec101f41102ca2.png

সম্পদ-সেটআপ

  1. VPC সার্ভিস কন্ট্রোলস বেসিক টিউটোরিয়াল I- এর "রিসোর্স-সেটআপ" বিভাগে বর্ণিত সম্পদগুলি সেট আপ করুন
  2. ক্লাউড স্টোরেজ পরিচালনা করার জন্য আপনার কাছে প্রয়োজনীয় অনুমতি রয়েছে তা যাচাই করুন।
  3. এই টিউটোরিয়ালের জন্য, আমরা ক্লাউড কনসোলের পরিবর্তে CLI ব্যবহার শুরু করতে যাচ্ছি। একটি উন্নয়ন পরিবেশে, gcloud CLI সেট আপ করুন:
  • ক্লাউড শেল : ইতিমধ্যেই সেট আপ করা gcloud CLI সহ একটি অনলাইন টার্মিনাল ব্যবহার করতে, ক্লাউড শেল সক্রিয় করুন।

আপনার ক্লাউড কনসোলের উপরের ডানদিকের কোণায় আইকনে ক্লিক করে ক্লাউড শেল সক্রিয় করুন। সেশন শুরু হতে কয়েক সেকেন্ড সময় লাগতে পারে। আরো বিস্তারিত জানার জন্য ক্লাউড শেল গাইড দেখুন।

a0ceb29950db4eac.png

খরচ

ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ হবে না, যদি কিছু হয়। এই টিউটোরিয়ালের বাইরে বিলিং এড়াতে সংস্থানগুলি বন্ধ করতে, আপনি আপনার তৈরি করা সংস্থানগুলি মুছতে বা প্রকল্প মুছতে পারেন। নতুন Google ক্লাউড ব্যবহারকারীরা $300 USD ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

একমাত্র সম্পদ যা খরচ তৈরি করবে তা হল VM ইনস্ট্যান্স এবং ক্লাউড স্টোরেজ অবজেক্ট। VM দৃষ্টান্তের আনুমানিক খরচ মূল্য ক্যালকুলেটরে পাওয়া যাবে। ক্লাউড স্টোরেজের আনুমানিক খরচ এই মূল্য তালিকায় পাওয়া যাবে।

3. একটি স্টোরেজ বাকেট এবং অবজেক্ট তৈরি করুন

পূর্বে উল্লিখিত হিসাবে, আমরা পূর্ববর্তী টিউটোরিয়ালে তৈরি সংস্থানগুলি পুনরায় ব্যবহার করতে যাচ্ছি। তাই আমরা এগিয়ে যাব এবং ক্লাউড স্টোরেজ বাকেট তৈরির কাজ চালিয়ে যাব। এই টিউটোরিয়ালের জন্য, আমরা কনসোলের পরিবর্তে gcloud CLI ব্যবহার শুরু করতে যাচ্ছি।

  1. Google কনসোলে, ProjectX নির্বাচন করুন। এই প্রকল্পে, আমরা স্টোরেজ বাকেট এবং বস্তু তৈরি করব।
  2. নিশ্চিত করুন যে আপনি নিম্নলিখিত কমান্ডটি চালিয়ে ProjectX ব্যবহার করার জন্য ক্লাউড শেল সেট করেছেন:
gcloud config set project PROJECT_ID
  1. আপনার উন্নয়ন পরিবেশে, নিম্নলিখিত কমান্ড চালান:
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
  1. একটি স্টোরেজ অবজেক্ট তৈরি করুন যাতে আমরা ProjectZ এ অবস্থিত VM ইনস্ট্যান্স থেকে এটি পড়তে পারি। আমরা একটি .txt ফাইল তৈরি করব।
nano hello.txt 

টেক্সট ফাইলে আপনি যা চান তা যোগ করুন।

  1. বালতিতে বস্তুটি আপলোড করুন।
gcloud storage cp /home/${USER}/hello.txt gs://BUCKET_NAME
  1. বস্তুটি তালিকাভুক্ত করে বালতিতে আপলোড করা হয়েছে তা যাচাই করুন।
gcloud storage ls gs://BUCKET_NAME

আপনাকে অবশ্যই কনসোলে তালিকাভুক্ত hello.txt ফাইলটি দেখতে হবে।

4. ক্লাউড স্টোরেজ API রক্ষা করুন

পূর্ববর্তী কোডল্যাবে, আমরা একটি পরিধি তৈরি করেছি এবং Compute Engine API সুরক্ষিত করেছি। এই কোডল্যাবে, আমরা আমাদের ড্রাই রান মোড পরিধি সম্পাদনা করব এবং ক্লাউড স্টোরেজ যোগ করব। এটি আমাদেরকে অডিট লগগুলিতে ভিপিসি পরিষেবা নিয়ন্ত্রণ লঙ্ঘনগুলি দেখিয়ে ঘের সুরক্ষার প্রভাব নির্ধারণ করতে সহায়তা করবে, তবে আমরা ঘের কার্যকর না করা পর্যন্ত সংস্থানগুলি অ্যাক্সেসযোগ্য থাকবে৷

  1. Google কনসোলে, আপনার প্রতিষ্ঠান নির্বাচন করুন; ভিপিসি সার্ভিস কন্ট্রোল অ্যাক্সেস করুন । নিশ্চিত করুন যে আপনি সংগঠনের সুযোগে আছেন।
  2. ক্লাউড শেল খুলুন এবং পূর্ববর্তী ল্যাবে তৈরি ড্রাই রান পরিধি "সুপারপ্রটেকশন" আপডেট করুন:
gcloud access-context-manager perimeters dry-run update SuperProtection --policy=POLICY --add-restricted-services=storage.googleapis.com
  1. পরিসীমা বর্ণনা করে ক্লাউড স্টোরেজ API আপডেট করা হয়েছে তা যাচাই করুন
gcloud access-context-manager perimeters dry-run describe SuperProtection --policy=POLICY 

আউটপুটে, আপনি দেখতে পাবেন যে ক্লাউড স্টোরেজ API সীমাবদ্ধ পরিষেবার নীচে তালিকাভুক্ত করা হয়েছে

Compute Engine API সহ কিন্তু একটি " -vpcAccessibleServices: {}" লেবেল সহ:

2025ddc01a2e9a81.png

5. ক্লাউড স্টোরেজ API সুরক্ষিত করা হয়েছে তা যাচাই করুন

ড্রাই রান মোডে, যাচাই করুন যে "সুপারপ্রোটেকশন" পরিধি আমাদেরকে প্রজেক্টজেড-এ তৈরি VM ইন্সট্যান্স থেকে প্রজেক্টএক্স-এ অবজেক্ট তালিকাভুক্ত করে অস্বীকার দেখাচ্ছে যা স্টোরেজ বাকেট হোস্ট করছে।

  1. ক্লাউড কনসোলে, প্রজেক্ট সিলেক্টরে যান এবং ProjectZ সিলেক্ট করুন, তারপর Compute Engine > VM Instances- এ নেভিগেট করুন।
  2. VM ইনস্ট্যান্সের সাথে সংযোগ করতে এবং এর কমান্ড লাইন অ্যাক্সেস করতে SSH বোতামে ক্লিক করুন।

5ca02149b78c11f9.png

  1. আমরা আগে আপলোড করা hello.txt ফাইলটি তালিকাভুক্ত করুন।
gcloud storage ls gs://BUCKET_NAME

যেহেতু ক্লাউড স্টোরেজ এপিআই ড্রাই-রান মোডে সুরক্ষিত, তাই আপনি সংস্থানগুলি তালিকাভুক্ত করতে সক্ষম হবেন, তবে আপনার অবশ্যই ProjectZ অডিট লগগুলিতে একটি ত্রুটি বার্তা থাকতে হবে।

  1. ProjectZ-এ লগস এক্সপ্লোরার এপিআই- এ যান এবং VPC পরিষেবা নিয়ন্ত্রণের শেষ ত্রুটির বার্তাটি দেখুন। আমরা যে লগটি খুঁজছি তা পেতে আপনি এই ফিল্টারটি ব্যবহার করতে পারেন:
protoPayload.status.details.violations.type="VPC_SERVICE_CONTROLS"
"(Dry Run Mode) Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:UNIQUE_ID"

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

egressViolations: [
0: {
servicePerimeter: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
source: "projects/PROJECTX_ID"
sourceType: "Network"
targetResource: "projects/PROJECTZ_ID"
}
]
resourceNames: [
0: "projects//buckets/BUCKET_NAME"
]
securityPolicyInfo: {
organizationId: "ORGANIZATION_ID"
servicePerimeterName: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
}
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"
vpcServiceControlsUniqueId: "UNIQUE_ID"
}
methodName: "google.storage.objects.list"
  1. যেহেতু আমরা যাচাই করেছি যে ক্লাউড স্টোরেজে API কল একটি VPC পরিষেবা নিয়ন্ত্রণ লঙ্ঘন তৈরি করে, তাই আমরা নতুন কনফিগারেশনের সাথে পরিধি প্রয়োগ করব৷ ক্লাউড শেল খুলুন এবং ড্রাই-রান পরিধি প্রয়োগ করুন:
gcloud access-context-manager perimeters dry-run enforce SuperProtection --policy=POLICY --async
  1. SSH ব্যবহার করে VM ইনস্ট্যান্সের সাথে সংযোগ করুন এবং ড্রাই-রান পরিধি সঠিকভাবে প্রয়োগ করা হয়েছে কিনা তা যাচাই করতে স্টোরেজ বাকেটটি আবার তালিকাভুক্ত করুন।
gcloud storage ls gs://BUCKET_NAME

আমরা স্টোরেজ অবজেক্টের তালিকার পরিবর্তে VM CLI-তে একটি VPC পরিষেবা নিয়ন্ত্রণ লঙ্ঘন পাব:

ERROR: (gcloud.storage.ls) User [PROJECT_NUMBER-compute@developer.gserviceaccount.com] does not have permission to access b instance [BUCKET_NAME] (or it may not exist): Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:"UNIQUE_ID"

আমরা সফলভাবে ভিপিসি সার্ভিস কন্ট্রোল ব্যবহার করে ডেটা অপসারণ রোধ করেছি যাতে পরিধির বাইরের কোনও সংস্থান থেকে ডেটা পড়া বা অনুলিপি করা রোধ করা যায়৷

6. তালিকা অস্বীকারের সমস্যা সমাধান করা।

আমরা ভিএম ইনস্ট্যান্স সিএলআই থেকে পাওয়া অস্বীকারের সমস্যা সমাধান করতে যাচ্ছি। আসুন অডিট লগগুলি পরীক্ষা করি এবং VPC পরিষেবা নিয়ন্ত্রণ অনন্য আইডি সন্ধান করি৷

  1. প্রজেক্ট সিলেক্টরে যান এবং ProjectZ সিলেক্ট করুন।
  2. লগ এক্সপ্লোরারে নিম্নলিখিত ক্যোয়ারী ব্যবহার করে অডিট লগগুলিতে VPC পরিষেবা নিয়ন্ত্রণ অনন্য আইডি খুঁজুন:
resource.type="audited_resource"
protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"

এটি সমস্ত VPC পরিষেবা নিয়ন্ত্রণ নিরীক্ষা লগ দেখাবে৷ আমরা শেষ ত্রুটি লগ খুঁজছেন হবে. যেহেতু এপিআই কলটি ভিএম ইন্সট্যান্স থেকে করা হয়েছিল, প্রিন্সিপাল হতে হবে কম্পিউট ইঞ্জিন পরিষেবা অ্যাকাউন্ট " PROJECT_NUMBER-compute@developer.gserviceaccount.com"

যেহেতু আমাদের কাছে ইতিমধ্যেই ভিপিসি সার্ভিস কন্ট্রোল ইউনিক আইডি আছে, আমরা এই ফিল্টারটি ব্যবহার করে সরাসরি কাঙ্খিত লগ পেতে এটি ব্যবহার করতে পারি:

protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_ID"
  1. ভিপিসি সার্ভিস কন্ট্রোল হেডারে ক্লিক করুন এবং "ট্রাবলশুট ডিনায়াল" নির্বাচন করুন যা ভিপিসি সার্ভিস কন্ট্রোলস ট্রাবলশুটার খুলবে।

এই API আমাদের একটি বন্ধুত্বপূর্ণ UI তে লঙ্ঘনের কারণ দেখাবে, এবং যদি এটি অন্যান্য দরকারী জিনিসগুলির মধ্যে একটি প্রবেশ বা প্রস্থান লঙ্ঘন হয়।

এই অনুশীলনে, আমরা নিম্নলিখিতগুলি সন্ধান করব:

authenticationInfo: {
principalEmail: "PROJECT_ID-compute@developer.gserviceaccount.com"
egressViolations: [
0: {
servicePerimeter: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
source: "projects/PROJECTZ_ID"
sourceType: "Network"
targetResource: "projects/PROJECTX_ID"
}
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"

এই তথ্যটি আমাদের জানার জন্য যথেষ্ট যে কম্পিউট ইঞ্জিন পরিষেবা অ্যাকাউন্টকে ProjectZ থেকে ProjectX-এ স্টোরেজ বাকেট অ্যাক্সেস করতে দেওয়ার জন্য আমাদের একটি প্রস্থান নিয়ম তৈরি করতে হবে। এছাড়াও আমরা দেখতে পাচ্ছি যে নেটওয়ার্কটি একই পরিধিতে নেই, তাই আমাদের পরিষেবাগুলিতে VPC যোগাযোগের অনুমতি দিতে হবে এবং পরিষেবার পরিধি জুড়ে ডেটা ভাগ করতে হবে।

  1. ক্লাউড শেল সক্রিয় করুন এবং টেক্সট এডিটর ব্যবহার করে ইগ্রেস নিয়ম সহ একটি .yaml ফাইল তৈরি করুন।
nano egresstorage.yaml 
- egressTo:
    operations:
    - serviceName: storage.googleapis.com
      methodSelectors:
      - method: \"*\"
    resources:
    - projects/PROJECTX_ID
 egressFrom:
    identities:
    - serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com
  1. প্রজেক্টজেডকে সুরক্ষা দেয় এমন প্রবেশ নীতি আপডেট করুন
gcloud access-context-manager perimeters update SuperProtection --set-egress-policies=egresstorage.yaml --policy=POLICY 

এখন আমরা VM উদাহরণ থেকে বালতি অ্যাক্সেস করার জন্য আবার চেষ্টা করতে পারি।

  1. ক্লাউড কনসোলে, প্রজেক্ট সিলেক্টরে যান এবং ProjectZ সিলেক্ট করুন, তারপর Compute Engine > VM Instances- এ নেভিগেট করুন।
  2. VM ইনস্ট্যান্সের সাথে সংযোগ করতে এবং এর কমান্ড লাইন অ্যাক্সেস করতে SSH বোতামে ক্লিক করুন।
  3. একবার আপনি VM CLI-তে গেলে, স্টোরেজ বাকেটের বস্তুগুলি তালিকাভুক্ত করার চেষ্টা করুন।
gcloud storage ls gs://BUCKET_NAME/

আপনি নিম্নলিখিত ত্রুটি বার্তা পাবেন:

ERROR: (gcloud.storage.ls) User [PROJECT_ID-compute@developer.gserviceaccount.com] does not have permission to access b instance [BUCKET_NAME] (or it may not exist): PROJECT_ID-compute@developer.gserviceaccount.com does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist).
  1. আমাদের কম্পিউট ইঞ্জিন পরিষেবা অ্যাকাউন্টে একটি অবজেক্ট রিডারের অনুমতি দিতে হবে যাতে স্টোরেজ বাকেটের বস্তুগুলি তালিকাভুক্ত করা যায়।
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com --role=roles/storage.objectViewer
  1. আবার, আসুন ভিএম ইনস্ট্যান্সের CLI থেকে hello.txt ফাইলটি তালিকাভুক্ত করার চেষ্টা করি।
gcloud storage ls gs://BUCKET_NAME/
.
.
gs://BUCKET_NAME/hello.txt

এখন আমরা একটি VPC পরিষেবা নিয়ন্ত্রণ অনুমতি লঙ্ঘন ছাড়া বস্তুর তালিকা করতে সক্ষম, কিন্তু, ফাইল ডাউনলোড সম্পর্কে কি? এর চেষ্টা করা যাক.

gcloud storage cp gs://BUCKET_NAME/hello.txt /home/${USER}

এবং আমরা নিম্নলিখিত আউটপুট পাব

Copying gs://BUCKET_NAME/hello.txt to file:///home/${USER}
 Completed files 1/1 | 54.0B/54.0B  

7. পরিষ্কার করা

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

  1. আপনার VM ইন্সট্যান্স মুছতে, আপনার VM ইনস্ট্যান্স নামের বাম পাশের চেকবক্সটি নির্বাচন করুন এবং তারপরে মুছুন ক্লিক করুন।

da0abf0894fe03cd.png

  1. পরিধি মুছে ফেলতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:
  • Google ক্লাউড কনসোলে, নিরাপত্তা ক্লিক করুন, এবং তারপরে প্রতিষ্ঠানের সুযোগে VPC পরিষেবা নিয়ন্ত্রণে ক্লিক করুন।
  • VPC পরিষেবা নিয়ন্ত্রণ পৃষ্ঠায়, আপনি যে পরিধিটি মুছতে চান তার সাথে সম্পর্কিত টেবিলের সারিতে, "আইকন মুছুন" এ ক্লিক করুন
  1. অ্যাক্সেস লেভেল মুছে ফেলতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:
  • Google ক্লাউড কনসোলে, ফোল্ডার স্কোপে অ্যাক্সেস কনটেক্সট ম্যানেজার পৃষ্ঠাটি খুলুন।
  • গ্রিডে, আপনি যে অ্যাক্সেস লেভেলটি মুছতে চান তার সারিতে, "মুছুন আইকন" এ ক্লিক করুন এবং তারপরে মুছুন এ ক্লিক করুন।
  1. স্টোরেজ অবজেক্ট এবং বালতি মুছতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:
  • Google ক্লাউড কনসোলে, ক্লাউড স্টোরেজ বাকেট পৃষ্ঠাটি খুলুন।
  • আপনার তৈরি করা বালতির পাশের চেকবক্সটি নির্বাচন করুন।
  • মুছুন ক্লিক করুন।
  • যে উইন্ডোটি খোলে, সেটি নিশ্চিত করুন যে আপনি বালতিটি মুছতে চান।
  • মুছুন ক্লিক করুন।
  1. আপনার প্রকল্প বন্ধ করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:
  • Google ক্লাউড কনসোলে, আপনি যে প্রকল্পটি মুছতে চান তার IAM এবং অ্যাডমিন সেটিংস পৃষ্ঠায় যান।
  • IAM এবং অ্যাডমিন সেটিংস পৃষ্ঠায়, শাটডাউন ক্লিক করুন।
  • প্রজেক্ট আইডি লিখুন, এবং যাইহোক শাটডাউন ক্লিক করুন।

8. অভিনন্দন!

এই কোডল্যাবে, আপনি একটি ভিপিসি সার্ভিস কন্ট্রোলস ড্রাই-রান পরিধি আপডেট করেছেন, এটি প্রয়োগ করেছেন এবং এটির সমস্যা সমাধান করেছেন।

আরও জানুন

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন 2.0 জেনেরিক লাইসেন্সের অধীনে লাইসেন্সপ্রাপ্ত।