Cloud KMS یک سرویس مدیریت کلید میزبانی شده در فضای ابری است که به شما امکان می دهد کلیدهای رمزنگاری را برای سرویس های ابری خود به همان روشی که در محل انجام می دهید مدیریت کنید. این شامل پشتیبانی از رمزگذاری، رمزگشایی، امضا و تأیید با استفاده از انواع و منابع کلیدی از جمله Cloud HSM برای کلیدهای سخت افزاری است.
در این آموزش، نحوه استفاده از ویژگی های پیشرفته Cloud Security و Privacy APIها از جمله:
- راه اندازی یک سطل ذخیره سازی ابری ایمن
- مدیریت کلیدها و داده های رمزگذاری شده با استفاده از Cloud KMS
- مشاهده گزارش های حسابرسی Cloud Storage
دادههای خلاصهشده را از Enron Corpus میگیرید، آنها را رمزگذاری میکنید و در Cloud Storage بارگذاری میکنید.
یاد خواهید گرفت
- نحوه رمزگذاری داده ها و مدیریت کلیدهای رمزگذاری با استفاده از سرویس مدیریت کلید (KMS)
استفاده خواهید کرد
- Cloud KMS
- فضای ذخیره سازی ابری
- Cloud SDK
تنظیم محیط خود به خود
اگر قبلاً یک حساب Google (Gmail یا Google Apps) ندارید، باید یک حساب ایجاد کنید . به کنسول Google Cloud Platform ( consol.cloud.google.com ) وارد شوید و یک پروژه جدید ایجاد کنید:
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID
نامیده خواهد شد.
در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در کنسول Cloud فعال کنید .
گذراندن این کد نباید بیش از چند دلار هزینه داشته باشد، اما اگر تصمیم به استفاده از منابع بیشتری داشته باشید یا آنها را در حال اجرا رها کنید، ممکن است بیشتر باشد (به بخش "پاکسازی" در انتهای این سند مراجعه کنید).
کاربران جدید Google Cloud Platform واجد شرایط استفاده آزمایشی رایگان 300 دلاری هستند.
Cloud Shell را راه اندازی کنید
در این کد لبه از Cloud Shell استفاده خواهید کرد، یک محیط مجازی رایگان که در Google Cloud اجرا می شود. از کنسول GCP روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:
تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:
این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را بسیار افزایش می دهد. مگر اینکه دستور دیگری داده شود، تمام دستورات را از این پوسته اجرا کنید.
برای ذخیره داده های این آموزش، یک سطل ذخیره سازی ابری ایجاد کنید. از آنجایی که نامهای سطل فضای ذخیرهسازی ابری باید در سطح جهانی منحصربهفرد باشند، پیشوند نام سطل را با شناسه پروژه خود اضافه کنید:
$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails
سپس سطل را ایجاد کنید:
$ gsutil mb gs://${BUCKET_NAME}
Enron Corpus یک پایگاه داده بزرگ از بیش از 600000 ایمیل است که توسط 158 کارمند شرکت Enron ایجاد شده است. این داده ها در سطل فضای ذخیره سازی ابری به نام gs://enron_emails/
کپی شده است.
یکی از فایل های ایمیل را به صورت محلی دانلود کنید:
$ gsutil cp gs://enron_emails/allen-p/inbox/1. . # <-- don't forget the dot!
فایل دانلود شده را بررسی کنید تا مطمئن شوید که در واقع یک ایمیل است:
$ tail 1.
ایمیل حاوی پیامی مانند:
Attached is the Delta position for 1/18... # ...
علاوه بر ایمیل، سطل حاوی تصاویر نیز می باشد. این آموزش از هر دو ایمیل متن ساده و تصاویر استفاده می کند.
قبل از اینکه بتوانید از Cloud KMS استفاده کنید، ابتدا باید سرویس را در پروژه خود فعال کنید. این کار فقط باید یک بار در هر پروژه انجام شود. برای فعال کردن سرویس Cloud KMS، دستور زیر را اجرا کنید:
$ gcloud services enable cloudkms.googleapis.com \ --project "${GOOGLE_CLOUD_PROJECT}"
فعال کردن آن ممکن است تا یک دقیقه طول بکشد. فرمان پس از پایان کار موفقیت را گزارش می کند.
یک حلقه کلید Cloud KMS ایجاد کنید. در Cloud KMS، حلقه کلید مجموعه ای منطقی از کلیدهای رمزنگاری است. حلقه کلید حاوی ابرداده در مورد کلیدها مانند مکان آنها است. یک حلقه کلید به نام my-keyring
در منطقه global
ایجاد کنید:
$ gcloud kms keyrings create "my-keyring" \ --location "global"
اکنون یک کلید رمزنگاری به نام enron-emails
با encryption
هدف در داخل حلقه کلیدی که ایجاد کرده اید ایجاد کنید.
$ gcloud kms keys create "enron-emails" \ --location "global" \ --keyring "my-keyring" \ --purpose "encryption"
رابط کاربری وب کلیدهای رمزنگاری را باز کنید و منابع جدید ایجاد شده را مشاهده کنید. این در زیر IAM & Admin در منوی اصلی موجود است.
میتوانید حلقههای کلید و کلیدهای رمزنگاری را در Cloud Console مشاهده و مدیریت کنید.
با استفاده از Cloud KMS، محتویات ایمیلی را که قبلا دانلود کرده بودیم، رمزگذاری کنید. این آموزش از ابزار خط فرمان gcloud
استفاده می کند، اما می توانید داده ها را با استفاده از Cloud KMS API رمزگذاری کنید.
$ gcloud kms encrypt \ --location "global" \ --keyring "my-keyring" \ --key "enron-emails" \ --plaintext-file ./1. \ --ciphertext-file ./1.enc
این یک فایل جدید روی دیسک 1.enc
ایجاد می کند که حاوی محتویات فایل رمزگذاری شده است. اکنون که داده ها با Cloud KMS رمزگذاری شده اند، فایل رمزگذاری شده را در سطل Cloud Storage آپلود کنید.
$ gsutil cp ./1.enc gs://${BUCKET_NAME}
Cloud KMS با Google Cloud Identity and Access Management (IAM) یکپارچه شده است. نقشهای Cloud KMS IAM تا حد زیادی به دو دسته تقسیم میشوند:
- اجازه مدیریت کلیدها
- اجازه استفاده از کلیدها
برای مثال، نقش roles/cloudkms.admin
به دارنده اجازه میدهد تا حلقههای کلید، کلیدهای رمزنگاری را ایجاد کند، سیاستهای IAM را تنظیم کند و عملیاتهای مرتبط با مدیریت را انجام دهد. roles/cloudkms.cryptoKeyEncrypterDecrypter
رمزگذاری و رمزگشایی داده ها را به دارنده اعطا می کند، اما شامل مجوزهای مدیریت نمی شود.
نقش های IAM توسط منبع والد آنها به ارث می رسد. اگر شخصی نقش roles/cloudkms.admin
را در پروژه Google Cloud داشته باشد، او مدیر تمام کلیدهای آن پروژه است. اگر روی حلقه کلید roles/cloudkms.admin
داشته باشند، ادمین همه کلیدهای آن حلقه کلید هستند. اگر roles/cloudkms.admin
را روی یک کلید رمزنگاری داشته باشند، فقط سرپرست آن کلید هستند.
برای این تمرین، از هویت خود استفاده کنید:
$ export MY_IDENTITY=you@gmail.com # or you@example.com
توانایی مدیریت منابع Cloud KMS را در حلقه کلید ایجاد شده در بالا با استفاده از ابزار خط فرمان gcloud
اختصاص دهید:
$ gcloud kms keyrings add-iam-policy-binding "my-keyring" \ --location "global" \ --member "user:${MY_IDENTITY}" \ --role "roles/cloudkms.admin"
نقش roles/cloudkms.admin
شامل مجوز استفاده از کلیدها نیست، فقط برای مدیریت آنها. برای اعطای قابلیت رمزگذاری و رمزگشایی دادهها با استفاده از enron-emails
Crypto Key:
$ gcloud kms keys add-iam-policy-binding "enron-emails" \ --location "global" \ --keyring "my-keyring" \ --member "user:${MY_IDENTITY}" \ --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
توجه داشته باشید که دستور اول نقش roles/cloudkms.admin
را در حلقه کلید اعطا می کند، که شامل هر منبع کلیدی رمزنگاری می شود. فرمان دوم roles/cloudkms.cryptoKeyEncrypterDecrypter
را اعطا میکند، اما فقط در enron-emails
Crypto Key.
همچنین میتوانید نقشها را در Cloud KMS UI در Cloud Console مشاهده و اختصاص دهید.
علاوه بر رمزگذاری یک فایل، میتوانید مجموعهای از فایلها را با مقداری اسکریپت رمزگذاری کنید. این مثال همه ایمیلها را برای allen-p پخش میکند، آنها را رمزگذاری میکند و مقادیر رمزگذاریشده حاصل را در سطل ذخیرهسازی ابری آپلود میکند:
DIR="gs://enron_emails/allen-p" for file in $(gsutil ls ${DIR}/**); do ENC_NAME="$(basename ${file}).enc" gsutil cat ${file} \ | \ gcloud kms encrypt \ --location "global" \ --keyring "my-keyring" \ --key "enron-emails" \ --plaintext-file - \ --ciphertext-file - \ | \ gsutil -q cp - gs://${BUCKET_NAME}/${ENC_NAME} echo "Copied ${ENC_NAME}" done
این مورد روی همه فایلهای فهرست داده شده در نمونه سطل ذخیرهسازی ابری تکرار میشود، آنها را با استفاده از Cloud KMS رمزگذاری میکند و در Google Cloud Storage شما آپلود میکند.
پس از تکمیل اسکریپت، می توانید فایل های رمزگذاری شده را در رابط کاربری Cloud Storage مشاهده کنید. شما باید چیزی شبیه به این را ببینید:
Cloud Audit Logging دارای دو جریان گزارش است - گزارشهای فعالیت مدیریت و گزارشهای دسترسی به داده - که توسط سرویسهای Google Cloud تولید میشوند تا به شما در پاسخ به این سوال کمک کنند "چه کسی چه کاری، کجا و چه زمانی انجام داد؟" در پروژه های Google Cloud Platform شما.
برای مشاهده فعالیت هر منبعی در KMS، روی حلقه کلید کلیک کرده و View Activity را انتخاب کنید. این شما را به رابط کاربری Cloud Activity میبرد، جایی که باید ایجاد و تمام تغییرات انجام شده در KeyRing را ببینید.
شما با استفاده از Cloud KMS داده ها را با موفقیت رمزگذاری کرده اید و داده های رمزگذاری شده را در Cloud Storage ذخیره کرده اید.
پاکسازی
منابع ایجاد شده در طول این آموزش را آزاد کنید. سطل Cloud Storage را که قبلاً ایجاد شده بود حذف کنید:
$ gsutil rm -r gs://${BUCKET_NAME}
منابع KMS ابری قابل حذف نیستند. با این حال، می توانید مواد کلیدی را از بین ببرید تا دوباره استفاده نشود:
$ gcloud kms keys versions destroy "1" \ --location "global" \ --key "enron-emails" \ --keyring "my-keyring"
پوشش دادیم
- استفاده از Cloud IAM برای مدیریت مجوزهای Cloud KMS
- استفاده از Cloud KMS برای رمزگذاری داده ها
- استفاده از Cloud Storage برای ذخیره داده های رمزگذاری شده
- استفاده از Cloud Audit Logging برای مشاهده تمام فعالیت های کلیدها و حلقه های کلید
مراحل بعدی
- از Cloud KMS برای رمزگذاری یک ستون در پایگاه داده مانند BigQuery استفاده کنید
- یک برنامه چرخش خودکار روی کلیدهای Cloud KMS خود تنظیم کنید
بیشتر بدانید
- درباره نحوه چرخش کلیدهای رمزگذاری بیشتر بدانید
- در مورد رمزگذاری پاکت بخوانید
- درباره رمزگذاری سمت سرور برای سطلهای ذخیرهسازی ابری بخوانید
- در Stackoverflow زیر برچسب google-cloud-kms سوالات خود را پست کنید و پاسخ ها را بیابید
مجوز
این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.