প্রাইভেট সার্ভিস কানেক্ট - আঞ্চলিক Google API-এর জন্য ভোক্তা HTTP(S) পরিষেবা নিয়ন্ত্রণ ব্যবহার করে

1। পরিচিতি

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

  • আপনি একটি URL মানচিত্র ব্যবহার করে কোন পরিষেবাগুলি উপলব্ধ তা চয়ন করতে পারেন; পাথ দ্বারা ফিল্টারিং আপনাকে আরও সূক্ষ্ম চেক করতে দেয়।
  • আপনি পরিষেবাগুলি পুনঃনামকরণ করতে পারেন, এবং আপনার পছন্দের URLগুলিতে তাদের ম্যাপ করতে পারেন৷
  • আপনি গ্রাহক-পরিচালিত TLS শংসাপত্র ব্যবহার করতে পারেন।
  • আপনি একই অঞ্চলে কাজের চাপ থেকে Google API-এর জন্য আঞ্চলিক শেষ পয়েন্টগুলির সাথে সংযোগ স্থাপন করে ইন-ট্রানজিট ডেটা রেসিডেন্সি সক্ষম করতে পারেন৷

এই নাম এবং IP ঠিকানাগুলি আপনার ভিপিসি নেটওয়ার্কের অভ্যন্তরীণ এবং যে কোনও অন-প্রিমিসেস নেটওয়ার্ক যা ক্লাউড ভিপিএন টানেল বা ক্লাউড ইন্টারকানেক্ট অ্যাটাচমেন্ট (VLANs) ব্যবহার করে এর সাথে সংযুক্ত।

আপনি কি শিখবেন

  • কনজিউমার HTTP(S) সার্ভিস কন্ট্রোলের সাথে একটি প্রাইভেট সার্ভিস কানেক্ট এন্ডপয়েন্ট তৈরি করুন
  • একটি ক্লাউড কী ম্যানেজমেন্ট সার্ভিস (KMS) কী রিং এবং কী তৈরি করুন।
  • একটি ক্লাউড ডিএনএস পরিচালিত প্রাইভেট জোন এবং একটি রেকর্ড তৈরি করা।
  • KMS API অ্যাক্সেস করুন (উভয় আঞ্চলিক এবং বিশ্বব্যাপী) পাবলিক API এর বিরুদ্ধে সমাধান করা হয়েছে।
  • PSC এন্ডপয়েন্টের বিপরীতে KMS API (আঞ্চলিক এবং বৈশ্বিক উভয়) অ্যাক্সেস করুন।

আপনি কি প্রয়োজন হবে

  • দৃষ্টান্ত স্থাপন এবং নেটওয়ার্কিং উপাদান কনফিগার করার জ্ঞান

2. পরীক্ষা পরিবেশ

একটি ভিএম এবং HTTP(S) অভ্যন্তরীণ লোড ব্যালেন্সার ফরওয়ার্ডিং নিয়ম এবং HTTP(S) অভ্যন্তরীণ লোড ব্যালেন্সারের সাথে ব্যবহারের জন্য একটি প্রক্সি শুধুমাত্র সাবনেট হোস্ট করার জন্য US-central1 অঞ্চলে একটি সাবনেট সহ একটি গ্রাহক VPC তৈরি করা হবে। আমরা কী ম্যানেজমেন্ট সিস্টেম (KMS) এ একটি কী রিং এবং কী তৈরি করে এবং পাবলিক API এন্ডপয়েন্টে সমাধান করে শুরু করব। তারপরে আমরা us-central1-এ আঞ্চলিক KMS এন্ডপয়েন্টের সমাধান করার জন্য PSC এন্ডপয়েন্ট তৈরি করব।

13681df518662ba.png

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

ক্লাউড শেল শুরু করুন

যদিও Google ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আপনি Google ক্লাউড শেল ব্যবহার করবেন, একটি কমান্ড লাইন পরিবেশ যা ক্লাউডে চলছে।

Google ক্লাউড কনসোল থেকে, উপরের ডানদিকে টুলবারে ক্লাউড শেল আইকনে ক্লিক করুন:

55efc1aaa7a4d3ad.png

পরিবেশের ব্যবস্থা করতে এবং সংযোগ করতে এটি শুধুমাত্র কয়েক মুহূর্ত নিতে হবে। এটি সমাপ্ত হলে, আপনি এই মত কিছু দেখতে হবে:

7ffe5cbb04455448.png

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

4. আপনি শুরু করার আগে

এপিআই সক্ষম করুন

ক্লাউড শেলের ভিতরে, নিশ্চিত করুন যে আপনার প্রকল্প আইডি সেট আপ করা আছে

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export project=YOUR-PROJECT-NAME
export region=us-central1
export zone=us-central1-a
echo $project
echo $region
echo $zone

সমস্ত প্রয়োজনীয় পরিষেবা সক্রিয় করুন

gcloud services enable compute.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable dns.googleapis.com
gcloud services enable cloudkms.googleapis.com

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

ভিপিসি নেটওয়ার্ক

ক্লাউড শেল থেকে

gcloud compute networks create consumer-vpc --subnet-mode custom

সাবনেট তৈরি করুন

ক্লাউড শেল থেকে

gcloud compute networks subnets create consumer-subnet-1 \
--network consumer-vpc \
--range 10.0.0.0/24 \
--region $region \
--enable-private-ip-google-access

এই ল্যাবের জন্য, আপনি আঞ্চলিক API ব্যাকএন্ডগুলি নির্দেশ করতে একটি অভ্যন্তরীণ L7 আঞ্চলিক লোড ব্যালেন্সার তৈরি করবেন। Google অভ্যন্তরীণ L7 লোড ব্যালেন্সার হল একটি প্রক্সি লোড ব্যালেন্সার, তাই আপনাকে একটি প্রক্সি সাবনেট তৈরি করতে হবে যা প্রক্সি সম্পাদন করার জন্য লোড ব্যালেন্সারের জন্য নিবেদিত। শুধুমাত্র প্রক্সি সাবনেট সম্পর্কে আরও তথ্য এখানে পাওয়া যাবে।

ক্লাউড শেল থেকে

gcloud compute networks subnets create proxy-subnet1 \
--purpose=INTERNAL_HTTPS_LOAD_BALANCER \
--role=ACTIVE \
--network consumer-vpc \
--range 10.100.100.0/24 \
--region $region

ফায়ারওয়াল নিয়ম তৈরি করুন

এই ল্যাবের জন্য, আপনার তৈরি করা দৃষ্টান্তগুলির সাথে সংযোগ করতে আপনি IAP ব্যবহার করবেন৷ নিম্নলিখিত ফায়ারওয়াল নিয়ম আপনাকে IAP এর মাধ্যমে দৃষ্টান্তগুলির সাথে সংযোগ করতে সক্ষম করবে৷ আপনি যদি IAP ব্যবহার না করতে পছন্দ করেন, আপনি এই ধাপটি এড়িয়ে যেতে পারেন, এবং পরিবর্তে উদাহরণে সর্বজনীন আইপি ঠিকানা যোগ করুন এবং একটি ফায়ারওয়াল নিয়ম তৈরি করুন যা 0.0.0.0/0 থেকে TCP পোর্ট 22-এ প্রবেশের অনুমতি দেয়।

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

  • আপনি IAP ব্যবহার করে অ্যাক্সেসযোগ্য হতে চান এমন সমস্ত VM দৃষ্টান্তগুলিতে প্রযোজ্য।
  • IP পরিসর 35.235.240.0/20 থেকে ট্র্যাফিক প্রবেশের অনুমতি দেয়। এই পরিসরে সমস্ত আইপি ঠিকানা রয়েছে যা IAP TCP ফরওয়ার্ডিংয়ের জন্য ব্যবহার করে।

ক্লাউড শেল থেকে

gcloud compute firewall-rules create allow-ssh-iap \
    --network consumer-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20

Cloud NAT উদাহরণ তৈরি করুন

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

ক্লাউড রাউটার তৈরি করুন

ক্লাউড শেল থেকে

gcloud compute routers create crnat \
    --network consumer-vpc \
    --region $region

Cloud NAT তৈরি করুন

ক্লাউড শেল থেকে

gcloud compute routers nats create central-nat \
    --router=crnat \
    --auto-allocate-nat-external-ips \
    --nat-all-subnet-ip-ranges \
    --enable-logging \
    --region $region

6. কী ব্যবস্থাপনা কী রিং এবং কী তৈরি করুন

ক্লাউড শেল থেকে

gcloud kms keyrings create central-keyring \
    --location $region

gcloud kms keyrings create global-keyring \
    --location global

ক্লাউড শেল থেকে

gcloud kms keys create central-key \
    --location $region \
    --keyring central-keyring \
    --purpose encryption

gcloud kms keys create global-key \
    --location global \
    --keyring global-keyring \
    --purpose encryption

ক্লাউড শেল থেকে, নিশ্চিত করুন কী রিং এবং কী সফলভাবে US-central1 অঞ্চলে তৈরি হয়েছে।

gcloud kms keys list \
    --location $region \
    --keyring central-keyring

প্রত্যাশিত ফলাফল

NAME: projects/<PROJECT_ID>/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key
PURPOSE: ENCRYPT_DECRYPT
ALGORITHM: GOOGLE_SYMMETRIC_ENCRYPTION
PROTECTION_LEVEL: SOFTWARE
LABELS:
PRIMARY_ID: 1
PRIMARY_STATE: ENABLED

ক্লাউড শেল থেকে

gcloud kms keys list \
    --location global \
    --keyring global-keyring

প্রত্যাশিত ফলাফল

NAME: projects/<PROJECT_ID>/locations/global/keyRings/global-keyring/cryptoKeys/global-key
PURPOSE: ENCRYPT_DECRYPT
ALGORITHM: GOOGLE_SYMMETRIC_ENCRYPTION
PROTECTION_LEVEL: SOFTWARE
LABELS:
PRIMARY_ID: 1
PRIMARY_STATE: ENABLED

কীগুলির জন্য প্রদত্ত সম্পূর্ণ পথের নামগুলি নোট করুন কারণ আপনি পরে সংযোগ করতে এটি ব্যবহার করবেন।

7. ক্লায়েন্ট VM তৈরি করুন এবং KMS আঞ্চলিক শেষ পয়েন্টে সংযোগ করুন

এরপর আপনি VM-এ একটি ক্লায়েন্ট VM, SSH তৈরি করবেন এবং us-central1 আঞ্চলিক KMS API এন্ডপয়েন্টের রেজোলিউশন পরীক্ষা করবেন।

ক্লাউড শেল থেকে

gcloud compute instances create client-vm \
    --network=consumer-vpc \
    --subnet=consumer-subnet-1 \
    --zone=$zone \
    --no-address \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install dnsutils -y
    sudo apt-get install tcpdump -y'

এর পরে, আপনার তৈরি করা KMS কী অ্যাক্সেস পেতে আপনাকে ডিফল্ট কম্পিউট পরিষেবা অ্যাকাউন্ট আপডেট করতে হবে। ডিফল্ট কম্পিউট সার্ভিস অ্যাকাউন্ট <Project_Number> -compute@developer.gserviceaccount.com ফরম্যাটে হবে। প্রজেক্ট নম্বর পেতে ক্লাউড শেল থেকে নিম্নলিখিত কমান্ডটি চালান এবং ফিরতি ফলাফলের শেষ লাইনে নম্বরটি অনুলিপি করুন।

 gcloud projects describe $project

আপনার তৈরি করা KMS কী অ্যাক্সেস পেতে ডিফল্ট কম্পিউট পরিষেবা অ্যাকাউন্ট আপডেট করুন।

ক্লাউড শেল থেকে

 gcloud kms keys add-iam-policy-binding central-key \
    --location $region \
    --keyring central-keyring \
    --member serviceAccount:<PROJECT_NUMBER>-compute@developer.gserviceaccount.com \
    --role roles/cloudkms.admin


gcloud kms keys add-iam-policy-binding global-key \
    --location global \
    --keyring global-keyring \
    --member serviceAccount:<PROJECT_NUMBER>-compute@developer.gserviceaccount.com \
    --role roles/cloudkms.admin

+ ক্লিক করে একটি অতিরিক্ত ক্লাউড শেল টার্মিনাল তৈরি করুন (নীচের স্ক্রিনশট)

a36edc967333315a.png

ট্যাব 2-এ, IAP এর মাধ্যমে SSH থেকে ক্লায়েন্ট-ভিএম-এ টানেল করুন। মনে রাখবেন যে পরিবেশের ভেরিয়েবলগুলি বহন করবে না এবং আপনাকে নীচের কমান্ডে আপনার প্রকল্প-আইডি যোগ করতে হবে।

ক্লাউড শেল থেকে

gcloud beta compute ssh --zone us-central1-a "client-vm" \
--tunnel-through-iap \
--project <PROJECT_ID>

আপনার আগে উল্লেখ করা KMS কী নামটি ব্যবহার করে KMS আঞ্চলিক API এন্ডপয়েন্টের সাথে সংযোগ করুন।

ট্যাব 2 থেকে, ক্লায়েন্ট-ভিএম

curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" \
--resolve cloudkms.googleapis.com:443:us-central1-cloudkms.googleapis.com \
https://cloudkms.googleapis.com/v1/projects/<YOUR_PROJECT_ID>/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key

প্রত্যাশিত ফলাফল

{
  "name": "projects/<PROJECT_ID>/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key",
  "primary": {
    "name": "projects/<PROJECT_ID>/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key/cryptoKeyVersions/1",
    "state": "ENABLED",
    "createTime": "2021-11-12T17:41:21.543348620Z",
    "protectionLevel": "SOFTWARE",
    "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
    "generateTime": "2021-11-12T17:41:21.543348620Z"
  },
  "purpose": "ENCRYPT_DECRYPT",
  "createTime": "2021-11-12T17:41:21.543348620Z",
  "versionTemplate": {
    "protectionLevel": "SOFTWARE",
    "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
  },
  "destroyScheduledDuration": "86400s"
}

ট্যাব 2 থেকে, ক্লায়েন্ট-ভিএম

curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" \
--resolve cloudkms.googleapis.com:443:cloudkms.googleapis.com \
https://cloudkms.googleapis.com/v1/projects/<YOUR_PROJECT_ID>/locations/global/keyRings/global-keyring/cryptoKeys/global-key

প্রত্যাশিত ফলাফল

{
  "name": "projects/<PROJECT_ID>/locations/global/keyRings/global-keyring/cryptoKeys/global-key",
  "primary": {
    "name": "projects/<PROJECT_ID>/locations/global/keyRings/global-keyring/cryptoKeys/global-key/cryptoKeyVersions/1",
    "state": "ENABLED",
    "createTime": "2021-11-22T19:19:43.271238847Z",
    "protectionLevel": "SOFTWARE",
    "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
    "generateTime": "2021-11-22T19:19:43.271238847Z"
  },  "purpose": "ENCRYPT_DECRYPT",
  "createTime": "2021-11-22T19:19:43.271238847Z",
  "versionTemplate": {
    "protectionLevel": "SOFTWARE",
    "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
  },
  "destroyScheduledDuration": "86400s"}

গ্লোবাল এন্ডপয়েন্টের তুলনায় DNS কোথায় US-কেন্দ্রীয় KMS এন্ডপয়েন্টের সমাধান করে তা দেখতে পরীক্ষা করুন।

ট্যাব 2 থেকে, ক্লায়েন্ট-ভিএম

dig us-central1-cloudkms.googleapis.com

প্রত্যাশিত ফলাফল

; <<>> DiG 9.11.5-P4-5.1+deb10u6-Debian <<>> us-central1-cloudkms.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4383
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;us-central1-cloudkms.googleapis.com. IN        A

;; ANSWER SECTION:
us-central1-cloudkms.googleapis.com. 300 IN A   142.250.125.95

;; Query time: 4 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Fri Nov 12 20:40:05 UTC 2021
;; MSG SIZE  rcvd: 80

ট্যাব 2 থেকে, ক্লায়েন্ট-ভিএম

dig cloudkms.googleapis.com

প্রত্যাশিত ফলাফল

; <<>> DiG 9.11.5-P4-5.1+deb10u6-Debian <<>> cloudkms.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49528
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;cloudkms.googleapis.com.       IN      A

;; ANSWER SECTION:
cloudkms.googleapis.com. 300    IN      A       209.85.200.95

;; Query time: 8 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Mon Nov 22 15:26:17 UTC 2021
;; MSG SIZE  rcvd: 68

খননের ফলাফল থেকে, আমরা দেখতে পাচ্ছি যে US-central1 আঞ্চলিক KMS এন্ডপয়েন্টের DNS রেজোলিউশন এবং গ্লোবাল KMS এন্ডপয়েন্ট একটি বাহ্যিক IP ঠিকানায় সমাধান করে। (দ্রষ্টব্য: আপনি যে আইপি ঠিকানাটি দেখছেন তা একটি ভিন্ন বাহ্যিক আইপি ঠিকানা হতে পারে। এটি স্বাভাবিক Google API-এর আচরণ।)

পরবর্তী বিভাগের জন্য, ক্লাউড শেলের প্রথম ট্যাবে ফিরে যান।

8. প্রাইভেট সার্ভিস কানেক্ট এন্ডপয়েন্ট তৈরি করুন

আপনি একটি ব্যাকএন্ড পরিষেবা হিসাবে us-central1 আঞ্চলিক KMS এন্ডপয়েন্টের দিকে নির্দেশ করে একটি নেটওয়ার্ক এন্ডপয়েন্ট গ্রুপ সহ একটি অভ্যন্তরীণ HTTP(S) লোড ব্যালেন্সার তৈরি করবেন। লোড ব্যালেন্সারের ফরোয়ার্ডিং নিয়ম প্রাইভেট সার্ভিস কানেক্ট এন্ডপয়েন্ট হিসেবে কাজ করে।

প্রাইভেট সার্ভিস কানেক্ট এবং টার্গেট সার্ভিস us-central1-cloudkms.googleapis.com টাইপ করে নেটওয়ার্ক এন্ডপয়েন্ট গ্রুপ (NEG) তৈরি করুন।

ক্লাউড শেল থেকে

gcloud beta compute network-endpoint-groups create l7psc-kms-neg \
  --network-endpoint-type=private-service-connect \
  --psc-target-service=us-central1-cloudkms.googleapis.com \
  --region=$region

লোড ব্যালেন্সারের জন্য ব্যাকএন্ড পরিষেবা তৈরি করুন।

ক্লাউড শেল থেকে

gcloud compute backend-services create l7-psc-kms \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --protocol=HTTP \
  --region=$region

ব্যাকএন্ড পরিষেবাতে NEG যোগ করুন।

ক্লাউড শেল থেকে

gcloud beta compute backend-services add-backend l7-psc-kms \
  --network-endpoint-group=l7psc-kms-neg \
  --region=$region

লোড ব্যালেন্সারের জন্য URL মানচিত্র তৈরি করুন।

ক্লাউড শেল থেকে

gcloud compute url-maps create l7-psc-url-map \
  --default-service=l7-psc-kms \
  --region=$region

কাস্টম ইউআরএলের জন্য পাথ ম্যাচার তৈরি করুন যা এন্ডপয়েন্ট ব্যবহার করবে।

ক্লাউড শেল থেকে

gcloud compute url-maps add-path-matcher l7-psc-url-map \
 --path-matcher-name=example \
 --default-service=l7-psc-kms \
 --region=$region

কাস্টম ইউআরএল us-central1-cloudkms.example.com-এর জন্য হোস্ট নিয়ম তৈরি করুন।

ক্লাউড শেল থেকে

gcloud compute url-maps add-host-rule l7-psc-url-map \
--hosts=us-central1-cloudkms.example.com \
--path-matcher-name=example \
--region=$region

লোড ব্যালেন্সারের জন্য লক্ষ্য প্রক্সি তৈরি করুন। একটি উত্পাদন ব্যবহারের ক্ষেত্রে, আপনি শেষ কমান্ডে কনফিগার করা হোস্টের জন্য HTTP(S) এবং কাস্টম শংসাপত্রগুলি ব্যবহার করার পরামর্শ দেওয়া হয়৷

ক্লাউড শেল থেকে

gcloud compute target-http-proxies create psc-http-proxy \
    --url-map=l7-psc-url-map \
    --region=$region

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

ক্লাউড শেল থেকে

gcloud beta compute forwarding-rules create l7-psc-forwarding-rule \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --network=consumer-vpc \
  --subnet=consumer-subnet-1 \
  --address=10.0.0.100 \
  --ports=80 \
  --region=$region \
  --target-http-proxy=psc-http-proxy \
  --target-http-proxy-region=$region

9. DNS কনফিগারেশন

এই বিভাগে আপনি example.com-এর জন্য একটি ব্যক্তিগত DNS জোন তৈরি করবেন, এবং একটি রেকর্ড যা আমরা শেষ ধাপে তৈরি করেছি ফরওয়ার্ডিং নিয়মের দিকে নির্দেশ করে৷

পরিচালিত DNS প্রাইভেট জোন তৈরি করুন।

ক্লাউড শেল থেকে

gcloud dns managed-zones create example \
    --description="example domain for KMS" \
    --dns-name=example.com \
    --networks=consumer-vpc \
    --visibility=private

us-central1-cloudkms.example.com-এর জন্য একটি রেকর্ড তৈরি করুন।

ক্লাউড শেল থেকে

gcloud dns record-sets transaction start \
   --zone=example

gcloud dns record-sets transaction add 10.0.0.100 \
   --name=us-central1-cloudkms.example.com \
   --ttl=300 \
   --type=A \
   --zone=example

gcloud dns record-sets transaction execute \
   --zone=example

10. PSC এর মাধ্যমে আঞ্চলিক KMS এন্ডপয়েন্টের সাথে সংযোগ করুন

সমস্ত সংযোগের বিশদ বিবরণ দেখতে tcpdump চালানোর জন্য ট্যাব 2-এ ক্লায়েন্ট-ভিএম-এ ফিরে যান এবং PSC এন্ডপয়েন্টের মাধ্যমে আঞ্চলিক এবং বিশ্বব্যাপী উভয় প্রান্তের সংযোগ পরীক্ষা করুন।

sudo tcpdump -i any net 10.0.0.100 or port 53 -n

ক্লাউড শেল এবং SSH-এ ক্লায়েন্ট-ভিএম-এ একটি 3য় ট্যাব খুলুন।

curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" \
http://us-central1-cloudkms.example.com/v1/projects/<YOUR_PROJECT_ID>/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key

প্রত্যাশিত ফলাফল + TCPDUMP

{
  "name": "projects/psc-2-321213/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key",
  "primary": {
    "name": "projects/psc-2-321213/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key/cryptoKeyVersions/1",
    "state": "ENABLED",
    "createTime": "2021-11-12T17:41:21.543348620Z",
    "protectionLevel": "SOFTWARE",
    "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
    "generateTime": "2021-11-12T17:41:21.543348620Z"
  },
  "purpose": "ENCRYPT_DECRYPT",
  "createTime": "2021-11-12T17:41:21.543348620Z",
  "versionTemplate": {
    "protectionLevel": "SOFTWARE",
    "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
  },
  "destroyScheduledDuration": "86400s"
}

---

19:54:42.924923 IP 10.0.0.3.55290 > 169.254.169.254.53: 26132+ A? cloudkms.googleapis.com. (41)
19:54:42.925137 IP 10.0.0.3.55290 > 169.254.169.254.53: 40734+ AAAA? cloudkms.googleapis.com. (41)
19:54:42.931480 IP 169.254.169.254.53 > 10.0.0.3.55290: 26132 1/0/0 A 10.0.0.100 (57)
19:54:42.931781 IP 169.254.169.254.53 > 10.0.0.3.55290: 40734 1/0/0 AAAA 2607:f8b0:4001:c0d::5f (69)
19:54:42.932285 IP 10.0.0.3.57136 > 10.0.0.100.80: Flags [S], seq 3382081170, win 65320, options [mss 1420,sackOK,TS val 1907763603 ecr 0,nop,wscale 7], length 0
19:54:42.934951 IP 10.0.0.100.80 > 10.0.0.3.57136: Flags [S.], seq 3147938658, ack 3382081171, win 65535, options [mss 1420,sackOK,TS val 3206048204 ecr 1907763603,nop,wscale 8], length 0
19:54:42.934978 IP 10.0.0.3.57136 > 10.0.0.100.80: Flags [.], ack 1, win 511, options [nop,nop,TS val 1907763606 ecr 3206048204], length 0
19:54:42.935182 IP 10.0.0.3.57136 > 10.0.0.100.80: Flags [P.], seq 1:422, ack 1, win 511, options [nop,nop,TS val 1907763606 ecr 3206048204], length 421: HTTP: GET /v1/projects/<PROJECT_ID/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key HTTP/1.1
19:54:42.935614 IP 10.0.0.100.80 > 10.0.0.3.57136: Flags [.], ack 422, win 261, options [nop,nop,TS val 3206048205 ecr 1907763606], length 0
19:54:43.010268 IP 10.0.0.100.80 > 10.0.0.3.57136: Flags [P.], seq 1:1072, ack 422, win 261, options [nop,nop,TS val 3206048280 ecr 1907763606], length 1071: HTTP: HTTP/1.1 200 OK
19:54:43.010295 IP 10.0.0.3.57136 > 10.0.0.100.80: Flags [.], ack 1072, win 503, options [nop,nop,TS val 1907763681 ecr 3206048280], length 0
19:54:43.011545 IP 10.0.0.3.57136 > 10.0.0.100.80: Flags [F.], seq 422, ack 1072, win 503, options [nop,nop,TS val 1907763683 ecr 3206048280], length 0
19:54:43.012013 IP 10.0.0.100.80 > 10.0.0.3.57136: Flags [F.], seq 1072, ack 423, win 261, options [nop,nop,TS val 3206048282 ecr 1907763683], length 0
19:54:43.012021 IP 10.0.0.3.57136 > 10.0.0.100.80: Flags [.], ack 1073, win 503, options [nop,nop,TS val 1907763683 ecr 3206048282], length 0

ট্যাব 2 উইন্ডোতে আবার চেক করুন এবং tcpdump তথ্য পরিদর্শন করুন। আপনি দেখতে পাবেন যে আপনি আপনার তৈরি করা PSC এন্ডপয়েন্টের মাধ্যমে ক্লাউড KMS আঞ্চলিক এন্ডপয়েন্ট অ্যাক্সেস করতে পেরেছেন এবং us-central1 আঞ্চলিক এন্ডপয়েন্ট আপনার তৈরি করা পরিচালিত ক্লাউড DNS জোনে ব্যক্তিগতভাবে সমাধান করে।

ট্যাব 3 থেকে, ক্লায়েন্ট-ভিএম

curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" \
http://us-central1-cloudkms.example.com/v1/projects/<YOUR_PROJECT_ID>/locations/global/keyRings/global-keyring/cryptoKeys/global-key

প্রত্যাশিত ফলাফল + TCPDUMP

{
  "error": {
    "code": 404,
    "message": "The request concerns location 'global' but was sent to location 'us-central1'. Either Cloud KMS is not available in 'global' or the request was misrouted. gRPC clients must ensure that 'x-goog-request-params' is specified in request metadata. See https://cloud.google.com/kms/docs/grpc for more information.",
    "status": "NOT_FOUND"
  }
}

---

20:04:32.199247 IP 10.0.0.3.57162 > 10.0.0.100.80: Flags [S], seq 2782317346, win 65320, options [mss 1420,sackOK,TS val 1908352831 ecr 0,nop,wscale 7], length 0
20:04:32.201643 IP 10.0.0.100.80 > 10.0.0.3.57162: Flags [S.], seq 1927472124, ack 2782317347, win 65535, options [mss 1420,sackOK,TS val 3731555085 ecr 1908352831,nop,wscale 8], length 0
20:04:32.201666 IP 10.0.0.3.57162 > 10.0.0.100.80: Flags [.], ack 1, win 511, options [nop,nop,TS val 1908352834 ecr 3731555085], length 0
20:04:32.201812 IP 10.0.0.3.57162 > 10.0.0.100.80: Flags [P.], seq 1:415, ack 1, win 511, options [nop,nop,TS val 1908352834 ecr 3731555085], length 414: HTTP: GET /v1/projects/<YOUR_PROJECT_ID>/locations/global/keyRings/global-keyring/cryptoKeys/global-key HTTP/1.1
20:04:32.202308 IP 10.0.0.100.80 > 10.0.0.3.57162: Flags [.], ack 415, win 261, options [nop,nop,TS val 3731555086 ecr 1908352834], length 0
20:04:32.237629 IP 10.0.0.100.80 > 10.0.0.3.57162: Flags [P.], seq 1:760, ack 415, win 261, options [nop,nop,TS val 3731555121 ecr 1908352834], length 759: HTTP: HTTP/1.1 404 Not Found
20:04:32.237656 IP 10.0.0.3.57162 > 10.0.0.100.80: Flags [.], ack 760, win 506, options [nop,nop,TS val 1908352870 ecr 3731555121], length 0
20:04:32.238283 IP 10.0.0.3.57162 > 10.0.0.100.80: Flags [F.], seq 415, ack 760, win 506, options [nop,nop,TS val 1908352870 ecr 3731555121], length 0
20:04:32.238833 IP 10.0.0.100.80 > 10.0.0.3.57162: Flags [F.], seq 760, ack 416, win 261, options [nop,nop,TS val 3731555122 ecr 1908352870], length 0
20:04:32.238851 IP 10.0.0.3.57162 > 10.0.0.100.80: Flags [.], ack 761, win 506, options [nop,nop,TS val 1908352871 ecr 3731555122], length 0

একটি গ্লোবাল ক্লাউড KMS কী/কী রিং অ্যাক্সেস করার চেষ্টা করলে একটি ত্রুটি দেখা দেবে৷ আপনি tcpdump এও এই সংযোগের প্রচেষ্টা দেখতে পাবেন।

ট্যাব 3-এ, ক্লায়েন্ট-ভিএম

dig us-central1-cloudkms.example.com

প্রত্যাশিত ফলাফল

; <<>> DiG 9.11.5-P4-5.1+deb10u7-Debian <<>> us-central1-cloudkms.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27474
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;us-central1-cloudkms.example.com. IN   A

;; ANSWER SECTION:
us-central1-cloudkms.example.com. 300 IN A      10.0.0.100

;; Query time: 7 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Mon May 23 16:22:12 UTC 2022
;; MSG SIZE  rcvd: 77

খননের মাধ্যমে, আপনি এখন দেখতে পাবেন যে আমরা us-central1-cloudkms.googleapis.com-এর জন্য যে কাস্টম URL তৈরি করেছি তা এখন PSC এন্ডপয়েন্টের দিকে নির্দেশ করে এবং শুধুমাত্র সেই অঞ্চলে তৈরি সংস্থানগুলি সমাধান করে৷

আপনি এখন ক্লায়েন্ট-ভিএম-এ উভয় SSH ট্যাব বন্ধ করতে পারেন।

11. পরিষ্কার করার পদক্ষেপ

একটি একক ক্লাউড শেল টার্মিনাল থেকে ল্যাব উপাদান মুছে দিন

gcloud dns record-sets transaction start --zone=example

gcloud dns record-sets transaction remove 10.0.0.100 \
    --name=us-central1-cloudkms.example.com \
    --ttl=300 \
    --type=A \
    --zone=example

gcloud dns record-sets transaction execute --zone=example

gcloud dns managed-zones delete example

gcloud compute forwarding-rules delete l7-psc-forwarding-rule --region=$region --quiet

gcloud compute target-http-proxies delete psc-http-proxy --region=$region --quiet

gcloud compute url-maps delete l7-psc-url-map --region=$region --quiet

gcloud compute backend-services delete l7-psc-kms --region=$region --quiet

gcloud compute network-endpoint-groups delete l7psc-kms-neg --region=$region --quiet

gcloud compute instances delete client-vm --zone=$zone --quiet

#Replace PROJECT_NUMBER
gcloud kms keys remove-iam-policy-binding global-key --keyring=global-keyring --location=global \
--member=serviceAccount:<PROJECT_NUMBER>-compute@developer.gserviceaccount.com \
--role roles/cloudkms.admin

#Replace PROJECT_NUMBER
gcloud kms keys remove-iam-policy-binding central-key --keyring=central-keyring --location=$region \
--member=serviceAccount:<PROJECT_NUMBER>-compute@developer.gserviceaccount.com \
--role roles/cloudkms.admin

gcloud kms keys versions destroy 1 --location=global --keyring=global-keyring --key=global-key

gcloud kms keys versions destroy 1 --location=$region --keyring=central-keyring --key=central-key

gcloud compute routers nats delete central-nat --router=crnat --region=$region --quiet

gcloud compute routers delete crnat --region=$region --quiet

gcloud compute firewall-rules delete allow-ssh-iap --quiet

gcloud compute networks subnets delete proxy-subnet1 --region=$region --quiet

gcloud compute networks subnets delete consumer-subnet-1 --region=$region --quiet

gcloud compute networks delete consumer-vpc --quiet

12. অভিনন্দন!

কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন।

আমরা কভার করেছি কি

  • কনজিউমার HTTP(S) সার্ভিস কন্ট্রোলের সাথে একটি প্রাইভেট সার্ভিস কানেক্ট এন্ডপয়েন্ট তৈরি করা
  • একটি ক্লাউড কী ম্যানেজমেন্ট সার্ভিস (KMS) কী রিং এবং কী তৈরি করা।
  • একটি ক্লাউড ডিএনএস পরিচালিত প্রাইভেট জোন এবং একটি রেকর্ড তৈরি করা।
  • KMS API অ্যাক্সেস করা (উভয় আঞ্চলিক এবং বিশ্বব্যাপী) পাবলিক API এর বিরুদ্ধে সমাধান করা হয়েছে।
  • PSC এন্ডপয়েন্টের বিপরীতে KMS API (আঞ্চলিক এবং বৈশ্বিক উভয়) অ্যাক্সেস করা।