Cloud KMS là một dịch vụ quản lý khoá được lưu trữ trên đám mây, cho phép bạn quản lý các khoá mã hoá cho dịch vụ đám mây theo cách tương tự như khi bạn quản lý tại cơ sở hạ tầng riêng. Thư viện này hỗ trợ mã hoá, giải mã, ký và xác minh bằng nhiều loại khoá và nguồn, bao gồm cả Cloud HSM cho các khoá dựa trên phần cứng.
Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng các tính năng nâng cao của Cloud Security and Privacy API, bao gồm:
- Thiết lập bộ chứa Cloud Storage an toàn
- Quản lý khoá và dữ liệu đã mã hoá bằng Cloud KMS
- Xem nhật ký kiểm tra Cloud Storage
Bạn sẽ lấy dữ liệu rút gọn từ Enron Corpus, mã hoá dữ liệu đó và tải vào Cloud Storage.
Bạn sẽ tìm hiểu
- Cách mã hoá dữ liệu và quản lý khoá mã hoá bằng Key Management Service (KMS)
Bạn sẽ sử dụng
- Cloud KMS
- Cloud Storage
- SDK đám mây
Thiết lập môi trường theo tốc độ của riêng bạn
Nếu chưa có Tài khoản Google (Gmail hoặc Google Apps), bạn phải tạo một tài khoản. Đăng nhập vào bảng điều khiển Google Cloud Platform (console.cloud.google.com) rồi tạo một dự án mới:
Hãy nhớ mã dự án, một tên duy nhất trong tất cả các dự án trên Google Cloud (tên ở trên đã được sử dụng và sẽ không hoạt động đối với bạn, xin lỗi!). Sau này trong lớp học lập trình này, chúng ta sẽ gọi nó là PROJECT_ID
.
Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên của Google Cloud.
Việc thực hiện lớp học lập trình này sẽ không tốn của bạn quá vài đô la, nhưng có thể tốn nhiều hơn nếu bạn quyết định sử dụng nhiều tài nguyên hơn hoặc nếu bạn để các tài nguyên đó chạy (xem phần "dọn dẹp" ở cuối tài liệu này).
Người dùng mới của Google Cloud Platform đủ điều kiện dùng thử miễn phí 300 USD.
Khởi động Cloud Shell
Trong lớp học lập trình này, bạn sẽ sử dụng Cloud Shell, một môi trường ảo hoá miễn phí chạy trên Google Cloud. Trên Bảng điều khiển GCP, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:
Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:
Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Trừ phi có hướng dẫn khác, hãy chạy tất cả các lệnh từ shell này.
Để lưu trữ dữ liệu cho hướng dẫn này, hãy tạo một bộ chứa Cloud Storage. Vì tên bộ chứa Cloud Storage phải là duy nhất trên toàn cầu, hãy thêm mã dự án vào tên bộ chứa:
$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails
Sau đó, hãy tạo vùng chứa:
$ gsutil mb gs://${BUCKET_NAME}
Enron Corpus là một cơ sở dữ liệu lớn gồm hơn 600.000 email do 158 nhân viên của Tập đoàn Enron tạo ra. Dữ liệu này đã được sao chép vào bộ chứa Cloud Storage có tên gs://enron_emails/
.
Tải một trong các tệp email xuống thiết bị:
$ gsutil cp gs://enron_emails/allen-p/inbox/1. . # <-- don't forget the dot!
Kiểm tra tệp đã tải xuống để xác minh rằng tệp đó thực sự là một email:
$ tail 1.
Email này sẽ có nội dung như sau:
Attached is the Delta position for 1/18... # ...
Ngoài email, nhóm này còn chứa hình ảnh. Hướng dẫn này sử dụng cả email và hình ảnh ở dạng văn bản thuần tuý.
Trước khi có thể sử dụng Cloud KMS, trước tiên, bạn phải bật dịch vụ này trong dự án của mình. Bạn chỉ cần thực hiện việc này một lần cho mỗi dự án. Để bật dịch vụ Cloud KMS, hãy chạy lệnh sau:
$ gcloud services enable cloudkms.googleapis.com \ --project "${GOOGLE_CLOUD_PROJECT}"
Quá trình bật có thể mất đến 1 phút. Lệnh này sẽ báo cáo thành công khi hoàn tất.
Tạo một bộ khoá Cloud KMS. Trong Cloud KMS, Bộ khoá là một tập hợp logic gồm các khoá mã hoá. Key Ring chứa siêu dữ liệu về các khoá, chẳng hạn như vị trí của khoá. Tạo một Bộ khoá có tên là my-keyring
trong khu vực global
:
$ gcloud kms keyrings create "my-keyring" \ --location "global"
Bây giờ, hãy tạo một Khoá mã hoá có tên là enron-emails
với mục đích encryption
trong Bộ khoá mà bạn vừa tạo.
$ gcloud kms keys create "enron-emails" \ --location "global" \ --keyring "my-keyring" \ --purpose "encryption"
Mở Giao diện người dùng web cho khoá mật mã rồi xem các tài nguyên mới tạo. Bạn có thể tìm thấy mục này trong phần IAM & Admin (Quản trị và quản lý danh tính và quyền truy cập) trong trình đơn chính.
Bạn có thể xem và quản lý Nhóm khoá và Khoá mã hoá trong Cloud Console.
Mã hoá nội dung của email mà chúng ta đã tải xuống trước đó bằng Cloud KMS. Hướng dẫn này sử dụng công cụ dòng lệnh gcloud
, nhưng bạn cũng có thể mã hoá dữ liệu bằng Cloud KMS API.
$ gcloud kms encrypt \ --location "global" \ --keyring "my-keyring" \ --key "enron-emails" \ --plaintext-file ./1. \ --ciphertext-file ./1.enc
Thao tác này sẽ tạo một tệp mới trên ổ đĩa 1.enc
, chứa nội dung của tệp được mã hoá. Giờ đây, khi dữ liệu đã được mã hoá bằng Cloud KMS, hãy tải tệp đã mã hoá lên bộ chứa Cloud Storage.
$ gsutil cp ./1.enc gs://${BUCKET_NAME}
Cloud KMS được tích hợp với giải pháp Quản lý danh tính và quyền truy cập (IAM) của Google Cloud. Các vai trò IAM của Cloud KMS được chia thành 2 danh mục chính:
- Quyền quản lý khoá
- Quyền sử dụng khoá
Ví dụ: vai trò roles/cloudkms.admin
cho phép người nắm giữ tạo Vòng khoá, Khoá mã hoá, đặt chính sách IAM và thực hiện các thao tác liên quan đến việc quản lý. roles/cloudkms.cryptoKeyEncrypterDecrypter
cấp cho người nắm giữ quyền mã hoá và giải mã dữ liệu, nhưng không bao gồm quyền quản lý.
Các vai trò IAM được kế thừa bởi tài nguyên mẹ của chúng. Nếu có vai trò roles/cloudkms.admin
trong dự án trên Google Cloud, thì người đó là quản trị viên của tất cả các khoá trong dự án đó. Nếu có biểu tượng roles/cloudkms.admin
trên một Vòng khoá, thì họ là quản trị viên của tất cả các khoá trong Vòng khoá đó. Nếu có biểu tượng roles/cloudkms.admin
trên một Khoá mã hoá duy nhất, thì họ chỉ là quản trị viên của khoá đó.
Đối với bài tập này, hãy sử dụng danh tính của bạn:
$ export MY_IDENTITY=you@gmail.com # or you@example.com
Chỉ định cho danh tính khả năng quản lý các tài nguyên Cloud KMS trong Bộ khoá đã tạo ở trên bằng công cụ dòng lệnh gcloud
:
$ gcloud kms keyrings add-iam-policy-binding "my-keyring" \ --location "global" \ --member "user:${MY_IDENTITY}" \ --role "roles/cloudkms.admin"
Vai trò roles/cloudkms.admin
không bao gồm quyền sử dụng khoá mà chỉ có quyền quản lý khoá. Để cấp cho danh tính của bạn khả năng mã hoá và giải mã dữ liệu bằng Khoá mã hoá enron-emails
:
$ gcloud kms keys add-iam-policy-binding "enron-emails" \ --location "global" \ --keyring "my-keyring" \ --member "user:${MY_IDENTITY}" \ --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
Xin lưu ý rằng lệnh đầu tiên cấp vai trò roles/cloudkms.admin
trên Key Ring, bao gồm mọi tài nguyên Khoá mã hoá con. Lệnh thứ hai cấp roles/cloudkms.cryptoKeyEncrypterDecrypter
, nhưng chỉ trên Khoá mã hoá enron-emails
.
Bạn cũng có thể xem và chỉ định vai trò trong giao diện người dùng Cloud KMS trong Cloud Console.
Ngoài việc mã hoá một tệp, bạn cũng có thể mã hoá một nhóm tệp bằng một số tập lệnh. Ví dụ này truyền trực tuyến tất cả email cho allen-p, mã hoá các email đó và tải các giá trị đã mã hoá thu được lên vùng lưu trữ Cloud Storage:
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
Thao tác này lặp lại tất cả các tệp trong thư mục đã cho trong bộ chứa Cloud Storage mẫu, mã hoá các tệp đó bằng Cloud KMS và tải các tệp đó lên Google Cloud Storage.
Sau khi tập lệnh hoàn tất, bạn có thể xem các tệp đã mã hoá trong Giao diện người dùng Bộ nhớ đám mây. Bạn sẽ thấy như sau:
Cloud Audit Logging có 2 luồng nhật ký (Nhật ký hoạt động của quản trị viên và Nhật ký truy cập dữ liệu) do các dịch vụ của Google Cloud tạo ra để giúp bạn trả lời câu hỏi "ai đã làm gì, ở đâu và khi nào?" trong các dự án trên Google Cloud Platform.
Để xem hoạt động của bất kỳ tài nguyên nào trong KMS, hãy nhấp vào chuỗi khoá rồi chọn Xem hoạt động. Thao tác này sẽ đưa bạn đến giao diện người dùng Hoạt động trên đám mây. Tại đây, bạn sẽ thấy hoạt động tạo và tất cả các hoạt động sửa đổi được thực hiện đối với KeyRing.
Bạn đã mã hoá thành công dữ liệu bằng Cloud KMS và lưu trữ dữ liệu đã mã hoá trong Cloud Storage.
Dọn dẹp
Phát hành các tài nguyên được tạo trong hướng dẫn này. Xoá bộ chứa Cloud Storage đã tạo trước đó:
$ gsutil rm -r gs://${BUCKET_NAME}
Bạn không thể xoá các tài nguyên Cloud KMS. Tuy nhiên, bạn có thể huỷ khoá để không sử dụng được nữa:
$ gcloud kms keys versions destroy "1" \ --location "global" \ --key "enron-emails" \ --keyring "my-keyring"
Chúng tôi đã đề cập đến
- Sử dụng Cloud IAM để quản lý các quyền đối với Cloud KMS
- Sử dụng Cloud KMS để mã hoá dữ liệu
- Sử dụng Cloud Storage để lưu trữ dữ liệu đã mã hoá
- Sử dụng tính năng Ghi nhật ký kiểm tra trên đám mây để xem tất cả hoạt động đối với khoá và bộ khoá
Các bước tiếp theo
- Sử dụng Cloud KMS để mã hoá một cột trong cơ sở dữ liệu như BigQuery
- Thiết lập lịch xoay vòng tự động cho các khoá Cloud KMS
Tìm hiểu thêm
- Tìm hiểu thêm về cách xoay vòng khoá mã hoá
- Đọc bài viết về mã hoá phong bì
- Đọc về Mã hoá phía máy chủ cho các bộ chứa Cloud Storage
- Đăng câu hỏi và tìm câu trả lời trên Stack Overflow trong thẻ google-cloud-kms
Giấy phép
Tác phẩm này được cấp phép theo Giấy phép chung Ghi nhận tác giả theo Creative Commons 2.0.