গ্রাহক-পরিচালিত এনক্রিপশন কী (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

একটি কী তৈরি করুন

আপনি সরাসরি ক্লাউড KMS-এ তৈরি একটি কী ব্যবহার করতে পারেন বা ক্লাউড এক্সটার্নাল কী ম্যানেজারের সাথে উপলব্ধ একটি বাহ্যিকভাবে পরিচালিত কী ব্যবহার করতে পারেন৷

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

  • আঞ্চলিক ডাটাবেস অবস্থানগুলির জন্য, কী রিং, কী এবং ডাটাবেসের জন্য একই অবস্থানের নাম ব্যবহার করুন কারণ অবস্থানের নামগুলির এক-এক-একটি ম্যাপিং রয়েছে৷

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

  • বহু-অঞ্চল ডাটাবেস অবস্থানের জন্য, KMS বহু-অঞ্চল অবস্থানের অবস্থানের নাম ব্যবহার করুন:

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

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

  1. Cloud KMS API সক্ষম করুন

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

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

কনসোল

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

  1. Google ক্লাউড কনসোলে, IAM পৃষ্ঠাতে যান।

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

  2. যোগ করুন ক্লিক করুন.

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

  4. ক্লাউড কেএমএস ক্রিপ্টোকি এনক্রিপ্টার/ডিক্রিপ্টারের ভূমিকা নির্বাচন করুন।

  5. সংরক্ষণ করুন ক্লিক করুন.

জিক্লাউড

আপনার পরিষেবা এজেন্টকে 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 ক্লাউড কনসোলে, ডেটাবেস পৃষ্ঠায় যান।

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

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

  3. আপনার ডাটাবেস মোড নির্বাচন করুন. অবিরত ক্লিক করুন.

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

  5. একটি অবস্থান নির্বাচন করুন.

  6. এনক্রিপশন বিকল্পগুলি দেখান ক্লিক করুন এবং তারপরে ক্লাউড কেএমএস কী নির্বাচন করুন।

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

  8. কীগুলির তালিকা বর্তমান Google Cloud প্রকল্প এবং আপনার নির্বাচিত ডাটাবেস অবস্থানের মধ্যে সীমাবদ্ধ। একটি ভিন্ন Google Cloud প্রজেক্ট থেকে একটি কী ব্যবহার করতে, প্রজেক্ট স্যুইচ করুন বা ম্যানুয়ালি কী লিখুন ক্লিক করুন।

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

  10. মোবাইল এবং ওয়েব ক্লায়েন্টদের জন্য নিরাপত্তা নিয়ম নির্বাচন করুন।

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

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

  • যদি আপনার ডাটাবেস CMEK দ্বারা সুরক্ষিত থাকে, তাহলে এনক্রিপশন টাইপ ক্ষেত্রটি গ্রাহক-পরিচালিত হিসাবে দেখায় এবং এনক্রিপশন কী ক্ষেত্রটি সংশ্লিষ্ট ক্লাউড কেএমএস এবং এই ডাটাবেস সুরক্ষিত করতে ব্যবহৃত কী সংস্করণের তালিকা করে।
  • যদি আপনার ডাটাবেস CMEK দ্বারা সুরক্ষিত না থাকে, তাহলে এনক্রিপশন টাইপ ক্ষেত্রটি Google-পরিচালিত হিসাবে দেখায়।

জিক্লাউড

আপনি 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

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

REST API

HTTP অনুরোধ:

পোস্ট https://firestore.googleapis.com/v1/projects/{FIRESTORE_PROJECT}/databases

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

একটি ক্লাউড KMS কী-এর সম্পূর্ণ রিসোর্স আইডিতে সেট করুন। এই ডাটাবেসের মতো একই স্থানে শুধুমাত্র একটি কী অনুমোদিত।

এই মানটি projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID} ফর্ম্যাটে ক্লাউড KMS কী রিসোর্স আইডি হওয়া উচিত

অন্যান্য ক্ষেত্র সম্পর্কে আরও তথ্যের জন্য, 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"
  }
}'

ফায়ারবেস CLI

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

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
  • আপনার CMEK কী এবং চাবির রিং রয়েছে এমন অবস্থানের সাথে KMS_LOCATION
  • আপনার CMEK কী রিং এর ID সহ KMS_KEYRING_ID
  • আপনার Cloud Firestore ডাটাবেসের জন্য ব্যবহার করার জন্য প্রকল্পের সাথে FIRESTORE_PROJECT

নিশ্চিত করুন যে আপনার Cloud Firestore ডাটাবেস Firebase CLI দিয়ে সুরক্ষিত:

firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT

নিম্নলিখিত CMEK তথ্য প্রতিক্রিয়া বার্তায় প্রদর্শিত হবে:

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

টেরাফর্ম

একটি 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"
  }

}

নিম্নলিখিতগুলি প্রতিস্থাপন করুন:

  • আপনার Cloud Firestore ডাটাবেসের জন্য ব্যবহার করার জন্য প্রকল্পের সাথে FIRESTORE_PROJECT
  • ডাটাবেসের জন্য একটি আইডি সহ DATABASE_ID
  • ডাটাবেসের জন্য Cloud Firestore অবস্থান সহ FIRESTORE_DATABASE_LOCATION
  • নেটিভ মোডের জন্য FIRESTORE_NATIVE অথবা ডেটাস্টোর মোডের জন্য DATASTORE_MODE সহ DATABASE_TYPE
  • 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) বা ব্যাকআপের মতো একই এনক্রিপশনে পুনরুদ্ধার করতে চান কিনা তা স্থির করুন৷
  • কী (প্রাথমিক-সংস্করণ) এবং কী সংস্করণটি আপনি ব্যাকআপ এনক্রিপ্ট করতে ব্যবহার করেছেন তা প্রস্তুত করুন৷ কী এবং কী সংস্করণ উভয়ই সক্ষম করুন।

জিক্লাউড

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

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

  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-এর ডিফল্ট এনক্রিপশনে (নন-সিএমইকে) পুনরুদ্ধার করতে, নিম্নলিখিত উপায়ে encryption-type পতাকা সেট করুন:

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

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

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

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

ফায়ারবেস 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 আপনার ডাটাবেসের আইডি সহ
  • আপনার Cloud Firestore ডাটাবেসের জন্য ব্যবহার করার জন্য প্রকল্পের সাথে FIRESTORE_PROJECT
  • আপনার Cloud Firestore ডাটাবেসের অবস্থান সহ FIRESTORE_LOCATION
  • আপনার ব্যাকআপের আইডি সহ BACKUP_ID
  • আপনার CMEK কী ধারণ করে এমন প্রকল্পের সাথে KMS_PROJECT
  • আপনার CMEK কী এবং চাবির রিং রয়েছে এমন অবস্থানের সাথে KMS_LOCATION
  • আপনার CMEK কী রিং এর ID সহ KMS_KEYRING_ID

নিশ্চিত করুন যে আপনার পুনরুদ্ধার করা Cloud Firestore ডেটাবেসটি CMEK-এনক্রিপ্ট করা হয়েছে:

firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT

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

Google-এর ডিফল্ট এনক্রিপশনে (নন-সিএমইকে) পুনরুদ্ধার করতে, নিম্নলিখিত উপায়ে 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 আপনার ডাটাবেসের আইডি সহ
  • আপনার Cloud Firestore ডাটাবেসের জন্য ব্যবহার করার জন্য প্রকল্পের সাথে FIRESTORE_PROJECT
  • আপনার 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 আপনার ডাটাবেসের আইডি সহ
  • আপনার Cloud Firestore ডাটাবেসের জন্য ব্যবহার করার জন্য প্রকল্পের সাথে FIRESTORE_PROJECT
  • আপনার Cloud Firestore ডাটাবেসের অবস্থান সহ FIRESTORE_LOCATION
  • আপনার ব্যাকআপের আইডি সহ BACKUP_ID

ব্যবহার করা কী দেখুন

জিক্লাউড

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

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 কনফিগার করুন। একটি ক্লাউড KMS কী-এর সম্পূর্ণ রিসোর্স আইডিতে সেট করুন। এই ডাটাবেসের মতো একই স্থানে শুধুমাত্র একটি কী অনুমোদিত।

এই মানটি projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID} ফর্ম্যাটে ক্লাউড KMS কী রিসোর্স আইডি হওয়া উচিত

অন্যান্য ক্ষেত্র সম্পর্কে আরও তথ্যের জন্য, 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. পরিবর্তন কার্যকর হওয়ার জন্য অপেক্ষা করুন এবং ডেটা আর অ্যাক্সেসযোগ্য কিনা তা পরীক্ষা করুন। পরিবর্তনগুলি সাধারণত কয়েক মিনিটের মধ্যে কার্যকর হয়, তবে 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. পরিবর্তন কার্যকর হওয়ার জন্য অপেক্ষা করুন এবং ডেটা আর অ্যাক্সেসযোগ্য কিনা তা পরীক্ষা করুন। পরিবর্তনগুলি সাধারণত কয়েক মিনিটের মধ্যে কার্যকর হয়, তবে 3 ঘন্টা পর্যন্ত সময় নিতে পারে৷

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

আপনি ক্লাউড KMS ডেটা অ্যাক্সেস অডিট লগগুলি সক্ষম করার আগে, আপনার ক্লাউড অডিট লগগুলির সাথে পরিচিত হওয়া উচিত৷

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

আপনি Google ক্লাউড কনসোলে অডিট লগ সেট আপ করতে এবং ইন্টারঅ্যাক্ট করতে পারেন:

  1. আপনার প্রকল্পে ক্লাউড KMS API-এর জন্য লগিং সক্ষম করা আছে তা নিশ্চিত করুন৷

  2. গুগল ক্লাউড কনসোলে Cloud Logging এ যান।

    Cloud Logging এ যান

  3. ক্যোয়ারী বিল্ডারে নিম্নলিখিত লাইনগুলি যোগ করে আপনার ক্লাউড 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 সীমাবদ্ধ করার জন্য প্রকল্পের সাথে প্রতিস্থাপন করুন।

প্রতিষ্ঠানের নীতিগুলি কনফিগার করার বিষয়ে আরও জানতে, নীতিগুলি তৈরি এবং সম্পাদনা দেখুন৷

নীতি কার্যকর হওয়ার পরে, আপনি যদি প্রভাবিত প্রকল্পের অধীনে একটি নন-সিএমইকে ডাটাবেস তৈরি করার চেষ্টা করেন তবে আপনি একটি 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 সুরক্ষার জন্য কোন ক্লাউড KMS কীগুলি ব্যবহার করা হয় তা সীমিত করতে, constraints/gcp.restrictCmekCryptoKeyProjects সীমাবদ্ধতা কনফিগার করুন৷

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

নিম্নলিখিত উদাহরণটি নির্দিষ্ট প্রকল্পে 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."
          }
        ]
      }
    ]
  }
}

এরপর কি