Bắt đầu với Cloud KMS

Cloud KMS là dịch vụ quản lý khóa được lưu trữ trên đám mây cho phép bạn quản lý khóa mật mã cho các dịch vụ đám mây của mình giống như cách bạn làm tại chỗ. Trung tâm này hỗ trợ mã hóa, giải mã, ký và xác minh bằng nhiều loại khóa và nguồn khác nhau, bao gồm Cloud HSM cho các khóa 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 và Privacy API, bao gồm:

  • Thiết lập bộ chứa Cloud Storage an toàn
  • Quản lý khóa và dữ liệu được mã hóa bằng Cloud KMS
  • Xem nhật ký kiểm tra Cloud Storage

Bạn sẽ thu thập dữ liệu được rút gọn từ Enron Corpus, mã hóa dữ liệu và tải dữ liệu đó lên Cloud Storage.

Bạn sẽ tìm hiểu

  • Cách mã hóa dữ liệu và quản lý khóa mã hóa bằng Dịch vụ quản lý khóa (KMS)

Bạn sẽ sử dụng

  • Cloud KMS
  • Cloud Storage
  • SDK đám mây

Thiết lập môi trường theo tiến độ riêng

Nếu chưa có Tài khoản Google (Gmail hoặc Google Apps), thì bạn phải tạo một tài khoản. Đăng nhập vào bảng điều khiển của Google Cloud Platform (console.cloud.google.com) và tạo một dự án mới:

Ảnh chụp màn hình từ 2016-02-10 12:45:26.png

Hãy ghi nhớ mã dự án, một tên duy nhất trên tất cả các dự án Google Cloud (tên ở trên đã được sử dụng và sẽ không hoạt động cho bạn!). Lớp học này sẽ được gọi sau này trong lớp học lập trình này là PROJECT_ID.

Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên của Google Cloud.

Nếu tham gia lớp học lập trình này, bạn sẽ không mất quá vài đô la, nhưng có thể sẽ hiệu quả 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 đó hoạt động (xem "cleanup" ở 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ử 300 đô la dùng thử miễn phí.

Khởi động Cloud Shell

Trong lớp học lập trình này, bạn sẽ dùng Cloud Shell, một môi trường ảo ảo miễn phí chạy trên Google Cloud. Từ 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:

Bạn chỉ cần dành vài phút để cấp phép và kết nối với môi trường. Khi hoàn tất, bạn sẽ thấy nội dung như sau:

Máy ảo này được tải bằng tất cả các công cụ phát triển mà bạn cần. cung cấp một thư mục gốc 5GB cố định và chạy trên Google Cloud, qua đó nâng cao đáng kể hiệu suất và khả năng xác thực mạng. Nếu không có hướng dẫn khác, hãy chạy tất cả lệnh từ màn hình 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 lưu trữ đám mây. Vì tên bộ chứa trên Cloud Storage phải là duy nhất trên toàn cầu, nên hãy thêm mã dự án vào trước tên bộ chứa:

$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails

Sau đó, tạo bộ 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 Enron Corporation 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 cục 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 này thực sự là một email:

$ tail 1.

Email sẽ chứa thông báo như:

Attached is the Delta position for 1/18...
# ...

Ngoài email, bộ chứa này cũng chứa hình ảnh. Tài liệu hướng dẫn này dùng cả email và hình ảnh dạng văn bản thuần túy.

Để 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 tối đa 1 phút. Lệnh này sẽ báo cáo thành công khi hoàn tất.

Tạo Vòng khóa đám mây KMS. Trong Cloud KMS, Vòng khóa là một tập hợp hợp lý gồm các khóa mật mã. Vòng khóa chứa siêu dữ liệu về các khóa như vị trí của các khóa đó. Tạo Vòng khóa có tên my-keyring trong khu vực global:

$ gcloud kms keyrings create "my-keyring" \
    --location "global"

Bây giờ, hãy tạo một Khóa mã hóa có tên enron-emails với mục đích là encryption bên trong Vòng khóa 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 về khóa mật mã và xem các tài nguyên mới tạo. Tính năng này có trong IAM và amp; Quản trị viên trong trình đơn chính.

Bạn có thể xem và quản lý Vòng khóa và Khóa tiền mã hóa trong Cloud Console.

Mã hóa nội dung email mà chúng tôi đã tải xuống trước đây 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ã hóa dữ liệu bằng API Cloud KMS.

$ 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 tệp mã hóa. Bây giờ, dữ liệu đã được mã hóa bằng Cloud KMS, hãy tải tệp đã mã hóa lên bộ chứa Cloud Storage.

$ gsutil cp ./1.enc gs://${BUCKET_NAME}

Cloud KMS được tích hợp với Google Cloud Identity và Access Management (IAM). Phần lớn vai trò trong IAM của Cloud KMS được chia thành hai danh mục:

  • Quyền quản lý khóa
  • Quyền sử dụng khóa

Ví dụ: vai trò roles/cloudkms.admin cho phép chủ sở hữu tạo Vòng khóa, Khóa tiền mã hóa, đặt chính sách IAM và thực hiện các thao tác liên quan đến quản lý. roles/cloudkms.cryptoKeyEncrypterDecrypter cấp cho chủ sở hữu mã hóa và giải mã dữ liệu, nhưng không bao gồm các quyền quản lý.

Vai trò IAM được kế thừa bởi tài nguyên gốc của chúng. Nếu ai đó có vai trò roles/cloudkms.admin đối với dự án Google Cloud, thì họ sẽ là quản trị viên của tất cả các khóa trong dự án đó. Nếu họ có roles/cloudkms.admin trên Vòng khóa thì họ sẽ là quản trị viên của tất cả các khóa trong Vòng khóa đó. Nếu có roles/cloudkms.admin trên một Khoá mã hóa, thì họ chỉ là quản trị viên của khóa đó.

Đối với bài tập này, bạn hãy sử dụng danh tính của mình:

$ export MY_IDENTITY=you@gmail.com # or you@example.com

Gán danh tính cho phép quản lý các tài nguyên Cloud KMS trong Vòng khóa được tạo ở trên bằng cách sử dụ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 các khóa mà chỉ cho phép quản lý các khóa đó. Để cấp cho danh tính của bạn khả năng mã hóa và giải mã dữ liệu bằng Khóa mật mã 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 sẽ cấp vai trò roles/cloudkms.admin cho Vòng khóa. Khóa này sẽ bao gồm mọi tài nguyên con trong Khóa mật mã. Lệnh thứ hai cấp cho roles/cloudkms.cryptoKeyEncrypterDecrypter, nhưng chỉ trên Khóa mã hóa 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ã hóa một tệp, bạn cũng có thể mã hóa một tập hợp các 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ã hóa chúng và tải lên các giá trị được mã hóa thu được vào bộ chứa 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

Hành động này sẽ 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ã hóa các tệp này 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ã hóa trong giao diện người dùng Cloud Storage. Bạn sẽ thấy như sau:

Nhật ký kiểm tra trên đám mây 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 về ai: ai đã làm gì, ở đâu và khi nào{/8} làm trong các dự án Google Cloud Platform.

Để xem hoạt động cho bất kỳ tài nguyên nào trong KMS, hãy nhấp vào vòng khóa và chọn Xem hoạt động. Thao tác này sẽ đưa bạn đến giao diện người dùng Cloud Activity, nơi bạn sẽ thấy bản tạo và tất cả các sửa đổi được thực hiện đối với Key Ring.

Bạn đã mã hóa thành công dữ liệu bằng Cloud KMS và lưu trữ dữ liệu được mã hóa trong Cloud Storage.

Dọn dẹp

Hủy bỏ các tài nguyên được tạo trong hướng dẫn này. Xóa bộ chứa Cloud Storage tạo trước đó:

$ gsutil rm -r gs://${BUCKET_NAME}

Không thể xóa tài nguyên Cloud KMS. Tuy nhiên, bạn có thể hủy bỏ tài liệu chính để không thể sử dụng lại tài liệu đó:

$ gcloud kms keys versions destroy "1" \
    --location "global" \
    --key "enron-emails" \
    --keyring "my-keyring"

Chúng tôi đã đề cập

  • Sử dụng IAM trên Cloud để quản lý quyền trên Cloud KMS
  • Sử dụng Cloud KMS để mã hóa dữ liệu
  • Sử dụng Cloud Storage để lưu trữ dữ liệu đã mã hóa
  • 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 liên quan đến khóa và vòng khóa

Các bước tiếp theo

  • Dùng Cloud KMS để mã hóa một cột trong cơ sở dữ liệu, chẳng hạn như BigQuery
  • Đặt lịch xoay tự động trên các phím Cloud KMS của bạn

Tìm hiểu thêm

Giấy phép

Tài liệu này được cấp phép theo Giấy phép chung Creative Commons 2.0.