গ্রাহকের ম্যানেজ করা এনক্রিপশন কী (CMEK) ব্যবহার করুন

এই পৃষ্ঠায় Cloud Firestore-এর জন্য গ্রাহকের ম্যানেজ করা এনক্রিপশন কী (CMEK) সম্পর্কিত টাস্ক কীভাবে সম্পূর্ণ করতে হয় তা বর্ণনা করা হয়েছে। CMEK সম্পর্কে আরও তথ্য, যেমন কখন এবং কেন এটি চালু করতে হবে, তা জানতে Cloud KMS ডকুমেন্টেশন দেখুন।

আপনার CMEK কী প্রস্তুত করুন

CMEK-সুরক্ষিত Cloud Firestore ডেটাবেস তৈরি করার আগে, আপনাকে অবশ্যই নিম্নলিখিত ধাপগুলি সম্পূর্ণ করতে হবে:

  1. Cloud Firestore CMEK ফিচার অ্যাক্সেস করার জন্য অনুরোধ করুন।
  2. Cloud Firestore পরিষেবা এজেন্ট তৈরি (বা ফিরিয়ে আনা) করুন।
  3. CMEK কী তৈরি করুন।
  4. সেই 'কী'-এর জন্য IAM সেটিংস কনফিগার করুন।

CMEK-সুরক্ষিত Cloud Firestore ডেটাবেস থাকবে এমন প্রতিটি প্রোজেক্টের জন্য এইসব ধাপ সম্পূর্ণ করুন। আপনি পরে নতুন CMEK কী তৈরি করলে, আপনাকে সেই কী-এর জন্য IAM সেটিংস কনফিগার করতে হবে।

অ্যাক্সেসের অনুরোধ করুন

Cloud Firestore পরিষেবা এজেন্ট তৈরি করার আগে, এই ফর্ম পূরণ করে CMEK ফিচারের অ্যাক্সেসের জন্য অনুরোধ করুন।

Cloud Firestore পরিষেবা এজেন্ট তৈরি করুন

CMEK কী তৈরি করার আগে, আপনার কাছে একটি Cloud Firestore পরিষেবা এজেন্ট থাকতে হবে, যা এক ধরনের Google-পরিচালিত পরিষেবা অ্যাকাউন্ট যা Cloud Firestore কী অ্যাক্সেস করতে ব্যবহার করে।

Cloud Firestore আপনার হয়ে CMEK কী অ্যাক্সেস করার জন্য যে পরিষেবা এজেন্ট ব্যবহার করে, সেটি তৈরি করতে পরিষেবা পরিচয় তৈরি করুন কমান্ড রান করুন। এই কমান্ডটি পরিষেবা অ্যাকাউন্টটি আগে থেকে না থাকলে তৈরি করে, তারপর এটি প্রদর্শন করে।

gcloud beta services identity create \
    --service=firestore.googleapis.com \
    --project FIRESTORE_PROJECT

আপনার Cloud Firestore ডেটাবেসের জন্য যে প্রোজেক্ট ব্যবহার করার পরিকল্পনা করছেন, সেটি দিয়ে FIRESTORE_PROJECT পরিবর্তন করুন।

কমান্ডটি সার্ভিস এজেন্ট আইডি দেখায়, যা একটি ইমেল আইডির মতো ফর্ম্যাট করা হয়। আউটপুট ইমেল স্ট্রিং রেকর্ড করুন, কারণ আপনি এটি পরের ধাপে ব্যবহার করবেন।

Service identity created:
service-xxx@gcp-sa-firestore.iam.gserviceaccount.com

'কী' তৈরি করুন

আপনি সরাসরি Cloud KMS-এ তৈরি করা 'কী' অথবা Cloud External Key Manager-এর মাধ্যমে উপলভ্য করা এক্সটার্নাল ম্যানেজ করা 'কী' ব্যবহার করতে পারবেন।

Cloud KMS কী লোকেশন অবশ্যই Cloud Firestore ডেটাবেসের লোকেশনের সাথে একই হতে হবে, যার সাথে এটি ব্যবহার করা হবে।

  • আঞ্চলিক ডেটাবেস লোকেশনের জন্য, কী রিং, কী এবং ডেটাবেসের জন্য একই লোকেশনের নাম ব্যবহার করুন কারণ লোকেশনের নামের ওয়ান-টু-ওয়ান ম্যাপিং আছে।

    যেমন, আপনি যদি us-west1-এ CMEK-সুরক্ষিত ডেটাবেস তৈরি করতে চান, তাহলে us-west1-এ কী রিং ও কী তৈরি করুন।

  • মাল্টি-রিজিয়ন ডেটাবেস লোকেশনের জন্য, KMS মাল্টি-রিজিয়ন লোকেশনের লোকেশনের নাম ব্যবহার করুন:

    • Cloud Firestore nam5 মাল্টি-রিজিয়ন লোকেশনের জন্য Cloud KMS us মাল্টি-রিজিয়ন লোকেশন ব্যবহার করুন।
    • Cloud Firestore eur3 মাল্টি-রিজিয়ন লোকেশনের জন্য Cloud KMS europe মাল্টি-রিজিয়ন লোকেশন ব্যবহার করুন।

আপনি যে Google Cloud প্রোজেক্টে আপনার 'কী' ম্যানেজ করতে চান, সেখানে নিম্নলিখিত ধাপগুলি সম্পূর্ণ করুন:

  1. Cloud KMS API চালু করুন।

  2. নিম্নলিখিত বিকল্পগুলির মধ্যে একটি ব্যবহার করে একটি কী রিং এবং একটি কী তৈরি করুন:

'কী'-এর জন্য IAM সেটিংস কনফিগার করুন

কনসোল

আপনার পরিষেবা এজেন্টকে Cloud KMS ভূমিকা প্রদান করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন। আপনি যদি কম গ্র্যানুলারিটি চান, তাহলে কী বা কী-রিং লেভেলে অনুমতি দিতে পারবেন।

  1. Google Cloud কনসোলে, IAM পৃষ্ঠায় যান।

    IAM পৃষ্ঠায় যান

  2. যোগ করুন বিকল্পে ক্লিক করুন।

  3. আপনার Cloud Firestore পরিষেবা এজেন্টের জন্য ইমেল-ফর্ম্যাট করা আইডি লিখুন।

  4. Cloud KMS CryptoKey Encrypter/Decrypter ভূমিকা বেছে নিন।

  5. সেভ করুন বিকল্পে ক্লিক করুন।

gcloud

আপনার পরিষেবা এজেন্টকে cloudkms.cryptoKeyEncrypterDecrypter ভূমিকা দিন:

gcloud kms keys add-iam-policy-binding KMS_KEY \
--keyring KMS_KEYRING\
--location KMS_LOCATION \
--member serviceAccount:SERVICE_AGENT_EMAIL \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter \
--project KMS_PROJECT

নিম্নলিখিতগুলি পরিবর্তন করুন:

  • KMS_KEY-এ আপনি 'কী'-এর যে নাম দিয়েছেন
  • KMS_KEYRING-এর সাথে KMS কী রিং যাতে কী রয়েছে
  • কী রিং আছে এমন অঞ্চলের সাথে KMS_LOCATION
  • SERVICE_AGENT_EMAIL-এর সাথে আপনি যে পরিষেবা এজেন্টের অ্যাক্সেস মঞ্জুর করছেন তার ইমেল-ফরম্যাট করা শনাক্তকারী
  • KMS_PROJECT-এর সাথে সেই প্রোজেক্ট যাতে 'কী' আছে

টার্মিনালে নিম্নলিখিত উত্তরের মতো কিছু দেখতে পাবেন:

Updated IAM policy for key KMS_KEY.
bindings:
- members:
- serviceAccount:
service-{project-number}@gcp-sa-firestore.iam.gserviceaccount.com
role: roles/cloudkms.cryptoKeyEncrypterDecrypter

CMEK-চালু করা ডেটাবেস তৈরি করুন

আপনার CMEK কী তৈরি ও কনফিগার করা হয়ে গেলে, আপনি CMEK-সুরক্ষিত ডেটাবেস তৈরি করতে পারবেন। Google-এর ডিফল্ট এনক্রিপশন দ্বারা সুরক্ষিত আগে থেকে থাকা Cloud Firestore ডেটাবেস CMEK ব্যবহার করার জন্য কনভার্ট করা যাবে না।

আপনি শুধুমাত্র CMEK-চালু করা ডেটাবেস তৈরি করার সময় এনক্রিপশনের ধরন ও 'কী' বেছে নিতে পারবেন।

কনসোল

  1. Google Cloud কনসোলে, ডেটাবেস পৃষ্ঠায় যান।

    ডেটাবেস পৃষ্ঠায় যান

  2. ডেটাবেস তৈরি করুন বিকল্পে ক্লিক করুন।

  3. আপনার ডেটাবেস মোড বেছে নিন। চালিয়ে যান বিকল্পে ক্লিক করুন।

  4. আপনার ডেটাবেস কনফিগার করুন পৃষ্ঠায়, ডেটাবেসের আইডি লিখুন।

  5. লোকেশন বেছে নিন।

  6. এনক্রিপশন বিকল্প দেখুন-এ ক্লিক করুন এবং তারপরে Cloud KMS কী বেছে নিন।

  7. ডেটাবেসের জন্য আপনি যে CMEK কী ব্যবহার করতে চান, সেটির রিসোর্সের নাম বেছে নিন বা লিখুন।

  8. কী-এর তালিকা বর্তমান Google Cloud প্রোজেক্ট এবং আপনার বেছে নেওয়া ডেটাবেস লোকেশনের মধ্যে সীমাবদ্ধ। অন্য Google Cloud প্রোজেক্ট থেকে কোনও 'কী' ব্যবহার করতে, প্রোজেক্ট পাল্টান বা ম্যানুয়ালি 'কী' লিখুন বিকল্পে ক্লিক করুন।

  9. আপনাকে Cloud Firestore পরিষেবা অ্যাকাউন্টে কী সংক্রান্ত অনুমতি দেওয়ার জন্য প্রম্পট করা হলে, অনুমতি দিন বিকল্পে ক্লিক করুন। CMEK ডেটাবেস তৈরি করতে, আপনার Cloud Firestore পরিষেবা অ্যাকাউন্টকে অবশ্যই cloudkms.cryptoKeyEncrypterDecrypter ভূমিকা দিতে হবে।

  10. মোবাইল ও ওয়েব ক্লায়েন্টের জন্য নিরাপত্তা সংক্রান্ত নিয়ম বেছে নিন।

  11. ডেটাবেস তৈরি করুন বিকল্পে ক্লিক করুন।

ডেটাবেস তৈরি হয়ে গেলে, ডেটাবেসের বিবরণ দেখে আপনি যাচাই করতে পারবেন যে ডেটাবেস CMEK-চালু করা আছে কিনা:

  • আপনার ডেটাবেস CMEK দ্বারা সুরক্ষিত থাকলে, এনক্রিপশনের ধরন ফিল্ডে গ্রাহকের ম্যানেজ করা হিসেবে দেখায় এবং এনক্রিপশন কী ফিল্ডে সংশ্লিষ্ট Cloud KMS এবং এই ডেটাবেস সুরক্ষিত করার জন্য ব্যবহৃত কী ভার্সন তালিকাভুক্ত করে।
  • আপনার ডেটাবেস CMEK দ্বারা সুরক্ষিত না থাকলে, এনক্রিপশনের ধরন ফিল্ডে Google-ম্যানেজ করা হিসেবে দেখানো হয়।

gcloud

Google Cloud CLI-এর মাধ্যমে CMEK-চালু ডেটাবেস তৈরি করার আগে, লেটেস্ট ভার্সন ইনস্টল করুন এবং gcloud CLI-কে অনুমতি দিন। আরও তথ্যের জন্য, gcloud CLI ইনস্টল করুন দেখুন।

gcloud firestore databases create --location=FIRESTORE_DATABASE_LOCATION \
      --database=DATABASE_ID \
      --kms-key-name=KMS_KEY_NAME \
      --project=FIRESTORE_PROJECT

নিম্নলিখিতগুলি পরিবর্তন করুন:

  • ডেটাবেসের জন্য Cloud Firestore লোকেশন সহ FIRESTORE_DATABASE_LOCATION
  • ডেটাবেসের জন্য আইডি সহ DATABASE_ID
  • KMS_KEY_NAME-এর সাথে আপনি 'কী'-এর জন্য যে নাম অ্যাসাইন করেছেন। নিম্নলিখিত ফর্ম্যাটে 'কী'-এর জন্য সম্পূর্ণ রিসোর্স নাম ব্যবহার করুন:

    projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID

  • FIRESTORE_PROJECT প্রোজেক্টের সাথে আপনার Cloud Firestore ডেটাবেসের জন্য ব্যবহার করতে

REST API

HTTP অনুরোধ:

POST https://firestore.googleapis.com/v1/projects/{FIRESTORE_PROJECT}/databases

অনুরোধের বডিতে cmek_config.kms_key_name ফিল্ডে CMEK কনফিগার করুন।

Cloud KMS কী-এর সম্পূর্ণ রিসোর্স আইডিতে সেট করা। এই ডেটাবেসের মতো একই লোকেশনে থাকা 'কী' ব্যবহার করার অনুমতি দেওয়া হয়।

এই ভ্যালু Cloud KMS কী রিসোর্স আইডি হতে হবে এবং এর ফর্ম্যাট হবে projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}

অন্যান্য ফিল্ড সম্পর্কে আরও তথ্যের জন্য, database create পৃষ্ঠা দেখুন।

অনুরোধের উদাহরণ:

curl -X POST 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases?databaseId={DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json" \
-d '{
  "type":"FIRESTORE_NATIVE",
  "locationId":"{FIRESTORE_DATABASE_LOCATION}",
  "cmekConfig": {
    "kmsKeyName":"projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID"
  }
}'

Firebase CLI

CMEK-চালু করা ডেটাবেস তৈরি করতে, KMS কী-এর নাম ফিল্ড ব্যবহার করুন। আপনি --kms-key-name প্যারামিটার উল্লেখ না করলে, Cloud Firestore ডিফল্ট হিসেবে CMEK-নয় এমন ডেটাবেস তৈরি করে।

firebase firestore:databases:create DATABASE_ID
--location LOCATION
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
--project FIRESTORE_PROJECT

নিম্নলিখিতগুলি পরিবর্তন করুন:

  • আপনার ডেটাবেসের আইডির সাথে DATABASE_ID
  • আপনার ডেটাবেসের লোকেশন সহ LOCATION
  • আপনার CMEK 'কী' আছে এমন প্রোজেক্টের সাথে KMS_PROJECT
  • KMS_LOCATION-এ আপনার CMEK কী ও কী রিং আছে এমন লোকেশন সহ
  • KMS_KEYRING_ID আপনার CMEK কী রিংয়ের আইডি সহ
  • FIRESTORE_PROJECT প্রোজেক্টের সাথে আপনার Cloud Firestore ডেটাবেসের জন্য ব্যবহার করতে

Firebase CLI-এর মাধ্যমে আপনার Cloud Firestore ডেটাবেস সুরক্ষিত আছে কিনা তা কনফার্ম করুন:

firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT

উত্তরের মেসেজে নিম্নলিখিত CMEK তথ্য দেখানো হয়:

  • KMS কী-এর নাম ফিল্ডে সম্পূর্ণ কী রিসোর্সের নাম দেওয়া থাকে যা আপনার Cloud Firestore CMEK ডেটাবেস এনক্রিপ্ট করতে ব্যবহার করা হয়।
  • অ্যাক্টিভ কী ভার্সন ফিল্ডে এই CMEK ডেটাবেসে বর্তমানে ব্যবহৃত সব কী ভার্সনের তালিকা দেওয়া থাকে। কী রোটেশন চলাকালীন, আপনার কাছে একাধিক অ্যাক্টিভ কী ভার্সন থাকতে পারে।

Terraform

CMEK-চালু করা ডেটাবেস তৈরি করতে, google_firestore_database রিসোর্স ব্যবহার করুন। আরও তথ্য ও উদাহরণের জন্য, google_firestore_database দেখুন।

resource "google_firestore_database" "database" {
  project     = "FIRESTORE_PROJECT"
  name        = "DATABASE_ID"
  location_id = "FIRESTORE_DATABASE_LOCATION"
  type        = "DATABASE_TYPE"

  cmek_config {
    kms_key_name = "KMS_KEY_NAME"
  }
}

নিম্নলিখিতগুলি পরিবর্তন করুন:

  • FIRESTORE_PROJECT প্রোজেক্টের সাথে আপনার Cloud Firestore ডেটাবেসের জন্য ব্যবহার করতে
  • ডেটাবেসের জন্য আইডি সহ DATABASE_ID
  • ডেটাবেসের জন্য Cloud Firestore লোকেশন সহ FIRESTORE_DATABASE_LOCATION
  • DATABASE_TYPE-এর সাথে নেটিভ মোডের জন্য FIRESTORE_NATIVE অথবা Datastore মোডের জন্য DATASTORE_MODE।
  • KMS_KEY_NAME-এর সাথে আপনি 'কী'-এর জন্য যে নাম অ্যাসাইন করেছেন। এই ফর্ম্যাটে 'কী'-এর জন্য সম্পূর্ণ রিসোর্সের নাম ব্যবহার করুন:

    projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID

CMEK-সুরক্ষিত ডেটাবেস অ্যাক্সেস করুন

CMEK-সুরক্ষিত ডেটাবেসে পাঠানো সমস্ত রিড, রাইট এবং কোয়েরি অপারেশন Google-এর ডিফল্ট এনক্রিপ্ট করা ডেটাবেসের মতোই কাজ করবে। যেমন, প্রতিটি অনুরোধের জন্য আপনাকে কী প্রদান করতে হবে না।

CMEK-সুরক্ষিত ডেটাবেস রিস্টোর করা

ব্যাক-আপ থেকে CMEK-সুরক্ষিত ডেটাবেস ফিরিয়ে আনার আগে:

  • আপনি ডেটাবেস CMEK এনক্রিপশনে, Google-এর ডিফল্ট এনক্রিপশনে (নন-CMEK) নাকি ব্যাক-আপের মতো একই এনক্রিপশনে রিস্টোর করতে চান তা ঠিক করুন।
  • ব্যাক-আপ এনক্রিপ্ট করার জন্য আপনি যে কী (প্রাথমিক-ভার্সন) এবং কী ভার্সন ব্যবহার করেছেন তা প্রস্তুত করুন। কী এবং কী ভার্সন, দুটিই চালু করুন।

gcloud

CMEK-সুরক্ষিত ডেটাবেসকে CMEK এনক্রিপশনে ফিরিয়ে আনা

CMEK এনক্রিপশনে ফিরিয়ে আনতে, gcloud firestore databases restore কমান্ডটি ঐচ্ছিক encryption-type এবং kms-key-name ফ্ল্যাগ সহ রান করুন যাতে ফিরিয়ে আনা ডেটাবেসের জন্য এনক্রিপশনের ধরন কনফিগার করা যায়। আপনি এনক্রিপশনের ধরন উল্লেখ না করলে, রিস্টোর করা ডেটাবেস ব্যাক-আপের মতো একই এনক্রিপশন কনফিগারেশন ব্যবহার করবে।

  gcloud firestore databases restore
  --encryption-type=customer-managed-encryption
  --kms-key-name=KMS_KEY_NAME

KMS_KEY_NAME-এর জায়গায় 'কী'-এর জন্য আপনার অ্যাসাইন করা নাম লিখুন। নিম্নলিখিত ফর্ম্যাটে 'কী'-এর জন্য সম্পূর্ণ রিসোর্স নাম ব্যবহার করুন:

projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID

CMEK-সুরক্ষিত ডেটাবেস ডিফল্ট এনক্রিপশনে ফিরিয়ে আনা

Google-এর ডিফল্ট এনক্রিপশন (CMEK নয়) ফিরিয়ে আনতে, নিম্নলিখিত উপায়ে encryption-type ফ্ল্যাগ সেট করুন:

  gcloud firestore databases restore
  --encryption-type=google-default-encryption

ব্যাক-আপের মতো একই এনক্রিপশন টাইপে CMEK-সুরক্ষিত ডেটাবেস ফিরিয়ে আনা

ব্যাক-আপের মতো একই এনক্রিপশন টাইপে ফিরিয়ে আনতে, নিম্নলিখিত উপায়ে encryption-type ফ্ল্যাগ সেট করুন:

  gcloud firestore databases restore --encryption-type=use-source-encryption

Firebase CLI

CMEK-সুরক্ষিত ডেটাবেসকে CMEK এনক্রিপশনে ফিরিয়ে আনা

CMEK এনক্রিপশনে ফিরিয়ে আনতে, ঐচ্ছিক encryption-type এবং kms-key-name ফ্ল্যাগ ব্যবহার করুন। আপনি এনক্রিপশনের ধরন উল্লেখ না করলে, রিস্টোর করা ডেটাবেস ব্যাক-আপের মতো একই এনক্রিপশন কনফিগারেশন ব্যবহার করবে।

firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID \
--project FIRESTORE_PROJECT

নিম্নলিখিতগুলি পরিবর্তন করুন:

  • আপনার ডেটাবেসের আইডির সাথে DATABASE_ID
  • FIRESTORE_PROJECT প্রোজেক্টের সাথে আপনার Cloud Firestore ডেটাবেসের জন্য ব্যবহার করতে
  • আপনার Cloud Firestore ডেটাবেসের লোকেশন সহ FIRESTORE_LOCATION
  • আপনার ব্যাক-আপের আইডি সহ BACKUP_ID
  • আপনার CMEK 'কী' আছে এমন প্রোজেক্টের সাথে KMS_PROJECT
  • KMS_LOCATION-এ আপনার CMEK কী ও কী রিং আছে এমন লোকেশন সহ
  • KMS_KEYRING_ID আপনার CMEK কী রিংয়ের আইডি সহ

আপনার ফিরিয়ে আনা Cloud Firestore ডেটাবেস CMEK-এনক্রিপ্ট করা কিনা তা কনফার্ম করুন:

firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT

CMEK-সুরক্ষিত ডেটাবেস ডিফল্ট এনক্রিপশনে ফিরিয়ে আনা

Google-এর ডিফল্ট এনক্রিপশন (CMEK নয়) ফিরিয়ে আনতে, নিম্নলিখিত উপায়ে encryption-type ফ্ল্যাগ সেট করুন:

firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type GOOGLE_DEFAULT_ENCRYPTION \
--project FIRESTORE_PROJECT

নিম্নলিখিতগুলি পরিবর্তন করুন:

  • আপনার ডেটাবেসের আইডির সাথে DATABASE_ID
  • FIRESTORE_PROJECT প্রোজেক্টের সাথে আপনার Cloud Firestore ডেটাবেসের জন্য ব্যবহার করতে
  • আপনার Cloud Firestore ডেটাবেসের লোকেশন সহ FIRESTORE_LOCATION
  • আপনার ব্যাক-আপের আইডি সহ BACKUP_ID

ব্যাক-আপের মতো একই এনক্রিপশন টাইপে CMEK-সুরক্ষিত ডেটাবেস ফিরিয়ে আনা

ব্যাক-আপের মতো একই এনক্রিপশন টাইপে ফিরিয়ে আনতে, নিম্নলিখিত উপায়ে encryption-type ফ্ল্যাগ সেট করুন:

firebase firestore:databases:restore \
--database DATABASE_IDD \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type USE_SOURCE_ENCRYPTION

নিম্নলিখিতগুলি পরিবর্তন করুন:

  • আপনার ডেটাবেসের আইডির সাথে DATABASE_ID
  • FIRESTORE_PROJECT প্রোজেক্টের সাথে আপনার Cloud Firestore ডেটাবেসের জন্য ব্যবহার করতে
  • আপনার Cloud Firestore ডেটাবেসের লোকেশন সহ FIRESTORE_LOCATION
  • আপনার ব্যাক-আপের আইডি সহ BACKUP_ID

CMEK-সুরক্ষিত ডেটাবেস ক্লোন করুন

CMEK-সুরক্ষিত ডেটাবেস ক্লোন করার আগে:

  • আপনি CMEK এনক্রিপশন, Google-এর ডিফল্ট এনক্রিপশন (নন-CMEK) বা সোর্স ডেটাবেসের মতো একই এনক্রিপশনে ডেটাবেস ক্লোন করতে চান কিনা তা ঠিক করুন।
  • সোর্স ডেটাবেস এনক্রিপ্ট করার জন্য আপনি যে 'কী' (প্রাইমারি-ভার্সন) এবং 'কী' ভার্সন ব্যবহার করেছেন তা প্রস্তুত করুন। কী এবং কী ভার্সন, দুটিই চালু করুন।

gcloud

CMEK-সুরক্ষিত ডেটাবেস CMEK এনক্রিপশনে ক্লোন করা

CMEK এনক্রিপশনে ক্লোন করতে, ক্লোন করা ডেটাবেসের জন্য এনক্রিপশনের ধরন কনফিগার করতে ঐচ্ছিক encryption-type এবং kms-key-name ফ্ল্যাগ সহ gcloud firestore databases clone কমান্ড রান করুন। আপনি এনক্রিপশনের ধরন উল্লেখ না করলে, ক্লোন করা ডেটাবেস সোর্স ডেটাবেসের মতো একই এনক্রিপশন কনফিগারেশন ব্যবহার করবে।

gcloud firestore databases clone \
--encryption-type=customer-managed-encryption \
--kms-key-name=KMS_KEY_NAME

KMS_KEY_NAME-এর জায়গায় আপনার 'কী'-এর জন্য অ্যাসাইন করা নাম লিখুন। নিম্নলিখিত ফর্ম্যাটে 'কী'-এর জন্য সম্পূর্ণ রিসোর্স নাম ব্যবহার করুন:

projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID

CMEK-সুরক্ষিত ডেটাবেস ডিফল্ট এনক্রিপশনে ক্লোন করুন

Google-এর ডিফল্ট এনক্রিপশন (CMEK নয়) ক্লোন করতে, encryption-type ফ্ল্যাগটি এইভাবে সেট করুন:

gcloud firestore databases clone \
--encryption-type=google-default-encryption

সোর্স ডেটাবেসের মতো একই এনক্রিপশন টাইপে CMEK-সুরক্ষিত ডেটাবেস ক্লোন করুন

সোর্স ডেটাবেসের মতো একই এনক্রিপশন টাইপে ক্লোন করতে, encryption-type ফ্ল্যাগটি নিম্নলিখিত উপায়ে সেট করুন:

gcloud firestore databases clone \
--encryption-type=use-source-encryption

--encryption-type নির্দিষ্ট করা না থাকলে, এটিও ডিফল্ট অ্যাকশন।

Firebase CLI

CMEK-সুরক্ষিত ডেটাবেস CMEK এনক্রিপশনে ক্লোন করা

CMEK এনক্রিপশনে ক্লোন করতে, ক্লোন করা ডেটাবেসের জন্য এনক্রিপশনের ধরন কনফিগার করতে firebase firestore:databases:clone কমান্ডটি ঐচ্ছিক encryption-type এবং kms-key-name ফ্ল্যাগ সহ রান করুন। আপনি এনক্রিপশনের ধরন উল্লেখ না করলে, ক্লোন করা ডেটাবেস সোর্স ডেটাবেসের মতো একই এনক্রিপশন কনফিগারেশন ব্যবহার করবে।

firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name=KMS_KEY_NAME

KMS_KEY_NAME-এর জায়গায় আপনার 'কী'-এর জন্য অ্যাসাইন করা নামটি লিখুন। নিম্নলিখিত ফর্ম্যাটে 'কী'-এর জন্য সম্পূর্ণ রিসোর্স নাম ব্যবহার করুন:

projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID

CMEK-সুরক্ষিত ডেটাবেস ডিফল্ট এনক্রিপশনে ক্লোন করুন

Google-এর ডিফল্ট এনক্রিপশন (CMEK নয়) ক্লোন করতে, encryption-type ফ্ল্যাগটি এইভাবে সেট করুন:

firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=GOOGLE_DEFAULT_ENCRYPTION

সোর্স ডেটাবেসের মতো একই এনক্রিপশন টাইপে CMEK-সুরক্ষিত ডেটাবেস ক্লোন করুন

সোর্স ডেটাবেসের মতো একই এনক্রিপশন টাইপে ক্লোন করতে, encryption-type ফ্ল্যাগটি নিম্নলিখিত উপায়ে সেট করুন:

firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=USE_SOURCE_ENCRYPTION

--encryption-type নির্দিষ্ট করা না থাকলে, এটিও ডিফল্ট অ্যাকশন।

ব্যবহার করা হচ্ছে এমন 'কী' দেখুন

gcloud

আপনি databases describe gcloud CLI কমান্ড ব্যবহার করে ডেটাবেস CMEK কনফিগারেশন কনফার্ম করতে পারবেন:

gcloud firestore databases describe --database=DATABASE_ID --project=FIRESTORE_PROJECT

আপনি উত্তরে cmekConfig ফিল্ডে CMEK তথ্য দেখতে পাবেন যা নিম্নলিখিত তথ্যের মতো:

      cmekConfig:
          activeKeyVersion:
          - projects/PROJECT_ID/locations/us/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME/cryptoKeyVersions/1
          kmsKeyName: projects/PROJECT_ID/locations/us/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
        locationId: nam5
        name: projects/PROJECT_ID/databases/DATABASE_ID

উত্তরে নিম্নলিখিত তথ্য অন্তর্ভুক্ত থাকে:

  • kmsKeyName: আপনার CMEK-সুরক্ষিত ডেটাবেস এনক্রিপ্ট করতে ব্যবহৃত কীয়ের সম্পূর্ণ কী রিসোর্স নাম।
  • activeKeyVersion: CMEK-সুরক্ষিত ডেটাবেস বর্তমানে ব্যবহার করছে এমন সব কী ভার্সনের তালিকা। কী রোটেশন চলাকালীন, আপনার কাছে একাধিক অ্যাক্টিভ কী ভার্সন থাকতে পারে। কী রোটেশনের সময় পুরনো ও নতুন ভার্সনের কী, দুটিই উপলভ্য থাকতে হবে। activeKeyVersion ফিল্ডে আর দেখা না যাওয়া পর্যন্ত পুরনো 'কী' ভার্সন বন্ধ করবেন না।

REST API

HTTP অনুরোধ:

GET https://firestore.googleapis.com/v1/{name=projects/FIRESTORE_PROJECT/databases/DATABASE_ID}

অনুরোধের বডিতে cmek_config.kms_key_name ফিল্ডে CMEK কনফিগার করুন। Cloud KMS কী-এর সম্পূর্ণ রিসোর্স আইডিতে সেট করা। এই ডেটাবেসের মতো একই লোকেশনে থাকা কী-ই শুধু অনুমোদিত।

এই ভ্যালু Cloud KMS কী রিসোর্স আইডি হতে হবে এবং এর ফর্ম্যাট হবে projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}

অন্যান্য ফিল্ড সম্পর্কে আরও জানতে, database create পৃষ্ঠা দেখুন।

অনুরোধ ও উত্তরের উদাহরণ:

curl 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases/{DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json"

—----------------------------------------- Response —--------------------------------------------
{
  "name": "projects/FIRESTORE_PROJECT/databases/{DATABASE_ID}",
  "locationId": "{FIRESTORE_DATABASE_LOCATION}",
  "type": "FIRESTORE_NATIVE",
  "cmekConfig": {
    "kmsKeyName": "projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}",
    "activeKeyVersion": [
      "projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1"
    ]
  },
  ……
}

'কী' বন্ধ করা

কোনও ডেটাবেসের সাথে যুক্ত 'কী' বন্ধ করতে, নিম্নলিখিত ধাপগুলি সম্পূর্ণ করুন:

  1. কোনও ডেটাবেসের জন্য ব্যবহার করা হচ্ছে এমন 'কী' ভার্সন দেখুন।
  2. ব্যবহার করা হচ্ছে এমন 'কী' ভার্সন বন্ধ করুন।
  3. পরিবর্তন কার্যকর হওয়ার জন্য অপেক্ষা করুন এবং ডেটা আর অ্যাক্সেস করা যাচ্ছে কিনা তা চেক করুন। পরিবর্তনগুলি সাধারণত কয়েক মিনিটের মধ্যে কার্যকর হয়, তবে ৩ ঘণ্টা পর্যন্ত সময় লাগতে পারে।

ডেটাবেসের ব্যবহার করা কোনও 'কী' বন্ধ করা হলে, FAILED_PRECONDITION ব্যতিক্রম সহ সমস্যার মেসেজে অতিরিক্ত বিবরণ পাওয়ার আশা করুন, যেমন:

{
  "error": {
    "code": 400,
    "message": "The customer-managed encryption key required by the requested resource is not accessible. Error reason:  generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist).",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.DebugInfo",
        "detail": "The customer-managed encryption key required by the requested resource is not accessible. Error reason:  generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist)"
      }
    ]
  }
}

'কী' চালু করা

কোনও ডেটাবেসের সাথে যুক্ত 'কী' আবার চালু করতে, নিম্নলিখিত ধাপগুলি সম্পূর্ণ করুন:

  1. কোনও ডেটাবেসের জন্য ব্যবহার করা হচ্ছে এমন 'কী' ভার্সন দেখুন
  2. ব্যবহার করা হচ্ছে এমন এইসব 'কী' ভার্সন চালু করুন
  3. পরিবর্তন কার্যকর হওয়ার জন্য অপেক্ষা করুন এবং ডেটা আর অ্যাক্সেস করা যাচ্ছে না কিনা তা চেক করুন। পরিবর্তনগুলি সাধারণত কয়েক মিনিটের মধ্যে কার্যকর হয়, তবে ৩ ঘণ্টা পর্যন্ত সময় লাগতে পারে।

Cloud KMS 'কী'-এর জন্য অডিট লগ দেখা

Cloud KMS ডেটা অ্যাক্সেস অডিট লগ চালু করার আগে, আপনাকে Cloud অডিট লগ সম্পর্কে জানতে হবে।

Cloud KMS ডেটা অ্যাক্সেস অডিট লগ থেকে আপনি জানতে পারবেন যে কখন Cloud Firestore বা আপনার CMEK কী ব্যবহার করার জন্য কনফিগার করা অন্য কোনও প্রোডাক্ট Cloud KMS-এ এনক্রিপ্ট/ডিক্রিপ্ট কল করে। Cloud Firestore প্রতিটি ডেটা অনুরোধে এনক্রিপ্ট/ডিক্রিপ্ট কল ইস্যু করে না, পরিবর্তে একটি পোলার বজায় রাখে যা পর্যায়ক্রমে 'কী' চেক করে। পোলিংয়ের ফলাফল অডিট লগে দেখা যায়।

আপনি Google Cloud কনসোল থেকে অডিট লগ সেট-আপ ও ইন্টার‍্যাক্ট করতে পারবেন:

  1. আপনার প্রোজেক্টে Cloud KMS API-এর জন্য লগিং চালু করা আছে কিনা তা ভাল করে দেখে নিন।

  2. Google Cloud Console-এ Cloud Logging-এ যান।

    Cloud Logging-এ যান

  3. কোয়েরি বিল্ডারে নিম্নলিখিত লাইনগুলি যোগ করে আপনার Cloud KMS কী-তে লগ এন্ট্রি সীমিত করুন:

    resource.type="cloudkms_cryptokey"
    resource.labels.key_ring_id = KMS_KEYRING
    resource.labels.crypto_key_id = KMS_KEY
    resource.labels.location=KMS_LOCATION
    

    নিম্নলিখিতগুলি পরিবর্তন করুন:

    • CMEK কী-এর নাম সহ KMS_KEY
    • KMS_KEYRING-এর সাথে KMS কী রিং যাতে কী রয়েছে
    • KMS_LOCATION-এর সাথে 'কী' ও 'কী রিং'-এর লোকেশন

    লগটি প্রতি ডেটাবেসে প্রতি পাঁচ মিনিটে প্রায় কয়েকটি লগ এন্ট্রি দেখায়। লগ এন্ট্রিগুলি এই উদাহরণগুলির মতো দেখায়:

    Info 2021-03-20 08:02:24.869 EDT Cloudkms.googleapis.com Decrypt projects/cloud-kms-project/locations/us-central1/keyRings/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com
    audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-firestore.iam.gserviceaccount.com"
    
    Info 2021-03-20 08:02:24.913 EDT Cloudkms.googleapis.com Encrypt projects/cloud-kms-project/locations/us-central1/keyRings/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com
    audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com"
    

অডিট লগ ব্যাখ্যা করার বিষয়ে বিস্তারিত জানতে অডিট লগ বোঝা দেখুন।

CMEK-এর জন্য একটি সাংগঠনিক নীতি কনফিগার করুন

আপনার প্রতিষ্ঠানের Cloud Firestore ডেটাবেসের জন্য এনক্রিপশন সংক্রান্ত সম্মতি প্রয়োজনীয়তা নির্দিষ্ট করতে, CMEK প্রতিষ্ঠান নীতি সংক্রান্ত সীমাবদ্ধতা ব্যবহার করুন।

CMEK সুরক্ষা প্রয়োজন

Cloud Firestore ডেটাবেস তৈরির জন্য CMEK প্রয়োজন হলে constraints/gcp.restrictNonCmekServices কনফিগার করুন। বাধ্যবাধকতা deny-এ সেট করুন এবং অস্বীকার করার তালিকায় firestore.googleapis.com যোগ করুন, যেমন:

 gcloud resource-manager org-policies deny gcp.restrictNonCmekServices  is:firestore.googleapis.com --project=FIRESTORE_PROJECT

যে প্রোজেক্টে বিধিনিষেধ আরোপ করতে চান, FIRESTORE_PROJECT-এর জায়গায় সেটি লিখুন।

প্রতিষ্ঠান সংক্রান্ত নীতি কনফিগার করার ব্যাপারে আরও জানতে, নীতি তৈরি ও এডিট করা দেখুন।

নীতি কার্যকর হওয়ার পরে, আপনি প্রভাবিত প্রোজেক্টের অধীনে নন-CMEK ডেটাবেস তৈরি করার চেষ্টা করলে, FAILED_PRECONDITION ব্যতিক্রম ও সমস্যার মেসেজ পাবেন। যেমন, ব্যতিক্রম দেখতে এইরকম হয়:

{
  "error": {
    "code": 400,
    "message": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
        "violations": [
          {
            "type": "constraints/gcp.restrictNonCmekServices",
            "subject": "orgpolicy:projects/FIRESTORE_PROJECT",
            "description": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information."
          }
        ]

CMEK-এর জন্য 'কী'-এর ব্যবহার সীমিত করুন

CMEK সুরক্ষার জন্য কোন Cloud KMS কী ব্যবহার করা হবে তা সীমিত করতে, constraints/gcp.restrictCmekCryptoKeyProjects কনস্ট্রেন্ট কনফিগার করুন।

তালিকার সীমাবদ্ধতা হিসেবে, গ্রহণযোগ্য ভ্যালু হল রিসোর্স হায়ারার্কি ইন্ডিকেটর (যেমন, projects/PROJECT_ID, under:folders/FOLDER_ID এবং under:organizations/ORGANIZATION_ID)। রিসোর্স হায়ারার্কি ইন্ডিকেটরের একটি তালিকা কনফিগার করে এবং সীমাবদ্ধতাটি অনুমতি দিন-এ সেট করে এই সীমাবদ্ধতা ব্যবহার করুন। এই কনফিগারেশন কাজ করে এমন পরিষেবাগুলিকে সীমাবদ্ধ করে যাতে CMEK কীগুলি শুধুমাত্র তালিকাভুক্ত প্রোজেক্ট, ফোল্ডার এবং সংস্থা থেকে বেছে নেওয়া যায়। অনুমোদিত রিসোর্সগুলির মধ্যে একটি থেকে Cloud Firestore কী ছাড়া কনফিগার করা পরিষেবাগুলিতে CMEK-সুরক্ষিত রিসোর্স তৈরি করার অনুরোধ সফল হয় না।

নিম্নলিখিত উদাহরণটি নির্দিষ্ট প্রোজেক্টে CMEK-সুরক্ষিত ডেটাবেসের জন্য শুধুমাত্র ALLOWED_KEY_PROJECT_ID থেকে 'কী' ব্যবহারের অনুমতি দেয়:

gcloud resource-manager org-policies allow gcp.restrictCmekCryptoKeyProjects \
under:projects/ALLOWED_KEY_PROJECT_ID \
--project=FIRESTORE_PROJECT

নীতি কার্যকর হওয়ার পরে, আপনি FAILED_PRECONDITION ব্যতিক্রম এবং সীমাবদ্ধতা লঙ্ঘন করলে একটি ত্রুটি মেসেজ পাবেন। ব্যতিক্রম নিচে উল্লেখ করা উদাহরণের মতো দেখতে হয়:

{
  "error": {
    "code": 400,
    "message": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
        "violations": [
          {
            "type": "constraints/gcp.restrictCmekCryptoKeyProjects",
            "subject": "orgpolicy:projects/FIRESTORE_PROJECT",
            "description": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information."
          }
        ]
      }
    ]
  }
}

এর পরে কী করতে হবে