1. Tổng quan
Không gian bảo mật cung cấp tính năng cộng tác và chia sẻ dữ liệu an toàn cho nhiều bên, đồng thời cho phép các tổ chức duy trì tính bảo mật cho dữ liệu của họ. Điều này có nghĩa là các tổ chức có thể cộng tác với nhau mà vẫn duy trì quyền kiểm soát đối với dữ liệu của mình và bảo vệ dữ liệu đó khỏi bị truy cập trái phép.
Confidential Space mở ra những trường hợp mà bạn muốn thu được giá trị tương hỗ từ việc tổng hợp và phân tích dữ liệu nhạy cảm (thường được kiểm soát), đồng thời vẫn giữ toàn quyền kiểm soát dữ liệu đó. Với Confidential Space, các tổ chức có thể cùng nhau khai thác giá trị từ việc tổng hợp và phân tích dữ liệu nhạy cảm như thông tin nhận dạng cá nhân (PII), thông tin sức khoẻ được bảo vệ (PHI), tài sản trí tuệ và các bí mật mật mã học, đồng thời vẫn giữ toàn quyền kiểm soát dữ liệu đó.
Bạn cần có
- Một dự án trên Google Cloud Platform
- Một trình duyệt, chẳng hạn như Chrome hoặc Firefox
- Có kiến thức cơ bản về Google Compute Engine ( lớp học lập trình), VM bảo mật, vùng chứa và kho lưu trữ từ xa
- Kiến thức cơ bản về Cloud KMS ( lớp học lập trình)
- Có kiến thức cơ bản về Tài khoản dịch vụ, Mạng liên kết danh tính cho khối lượng công việc và điều kiện thuộc tính.
Kiến thức bạn sẽ học được
- Cách định cấu hình các tài nguyên cần thiết trên Đám mây để chạy Confidential Space
- Cách chạy khối lượng công việc trong một Máy ảo bảo mật chạy hình ảnh Máy ảo trong Không gian bảo mật
- Cách cho phép truy cập vào các tài nguyên được bảo vệ dựa trên thuộc tính của mã đơn vị công việc (what), môi trường Confidential Space (where) và tài khoản đang chạy đơn vị công việc (who).
Trong lớp học lập trình này, bạn sẽ thiết lập một Confidential Space giữa Primus và Secundus Bank để xác định những khách hàng chung của họ mà không cần chia sẻ danh sách tài khoản đầy đủ với nhau. Quá trình này bao gồm các bước sau:
- Bước 1: Thiết lập các tài nguyên đám mây bắt buộc cho Ngân hàng Primus và Secundus. Các tài nguyên trên đám mây này bao gồm bộ chứa lưu trữ đám mây, khoá KMS, nhóm danh tính tải và tài khoản dịch vụ cho Ngân hàng Primus và Secundus. Primus Bank và Secundus Bank lưu trữ dữ liệu khách hàng trong các vùng chứa Cloud Storage và mã hoá dữ liệu bằng các khoá Cloud Key Management Service.
- Bước 2: Tạo tài khoản dịch vụ tải, tài khoản này sẽ được VM tải sử dụng. Secundus Bank (đơn vị vận hành khối lượng công việc) sẽ khởi chạy VM khối lượng công việc. Ngân hàng Primus sẽ là đơn vị cấp mã tải.
- Bước 3: Tạo một khối lượng công việc bao gồm 2 lệnh CLI, một lệnh để đếm số khách hàng ở vị trí được cung cấp và một lệnh khác để tìm khách hàng chung của Primus và Secundus Bank. Tải sẽ được Primus Bank tạo và đóng gói dưới dạng một hình ảnh Docker. Hình ảnh Docker này sẽ được xuất bản lên Artifact Registry.
- Bước 4: Uỷ quyền cho một khối lượng công việc. Primus Bank sẽ sử dụng nhóm danh tính tải để cho phép các tải truy cập vào dữ liệu khách hàng dựa trên các thuộc tính về người đang chạy tải, việc tải làm gì và nơi tải đang chạy.
- Bước 5: Khi chạy, tải sẽ yêu cầu quyền truy cập vào tài nguyên đám mây của các cộng tác viên dữ liệu (Primus Bank và Secundus Bank) bằng cách cung cấp mã thông báo dịch vụ Trình xác minh chứng thực với các yêu cầu về tải và môi trường. Nếu các thông tin xác nhận đo lường khối lượng công việc trong mã thông báo khớp với điều kiện thuộc tính trong nhóm danh tính khối lượng công việc của Ngân hàng Primus và Secundus, thì mã thông báo sẽ trả về mã thông báo truy cập tài khoản dịch vụ có quyền truy cập vào các tài nguyên tương ứng trên đám mây. Chỉ đơn vị công việc chạy trong Không gian bảo mật mới có thể truy cập vào các tài nguyên trên đám mây.
- Bước 5(a): Chạy khối lượng công việc đầu tiên để đếm số khách hàng của Ngân hàng Primus ở một số địa điểm cụ thể. Đối với khối lượng công việc này, Primus Bank sẽ là một cộng tác viên dữ liệu và tác giả khối lượng công việc, cung cấp danh sách khách hàng đã mã hoá cho khối lượng công việc đang chạy trong Confidential Space. Secundus Bank sẽ là một đơn vị vận hành khối lượng công việc và sẽ chạy khối lượng công việc trong một Không gian bảo mật.
- Bước 5(b): Chạy tải thứ hai để tìm những khách hàng chung của Ngân hàng Primus và Secundus. Đối với khối lượng công việc này, cả Primus Bank và Secundus Bank đều sẽ là cộng tác viên dữ liệu. Chúng sẽ cung cấp danh sách khách hàng đã mã hoá cho tải chạy trong Confidential Space. Secundus Bank sẽ lại là một toán tử tải. Secundus Bank cũng sẽ uỷ quyền cho tải này vì tải cần truy cập vào danh sách khách hàng được mã hoá của Secundus Bank để tìm những khách hàng chung. Trong trường hợp này, Secundus Bank sẽ uỷ quyền cho tải công việc truy cập vào dữ liệu khách hàng của họ dựa trên các thuộc tính của người đang chạy tải công việc, chức năng của tải công việc và vị trí chạy tải công việc như đã đề cập trong bước 4 đối với Primus Bank.

2. Thiết lập tài nguyên trên đám mây
Trước khi bắt đầu
- Sao chép kho lưu trữ này bằng lệnh bên dưới để lấy các tập lệnh cần thiết được dùng trong lớp học lập trình này.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- Thay đổi thư mục cho lớp học lập trình này.
cd confidential-space/codelabs/bank_data_analysis_codelab/scripts
- Đảm bảo bạn đã thiết lập các biến môi trường dự án bắt buộc như minh hoạ bên dưới. Để biết thêm thông tin về cách tạo dự án GCP, vui lòng tham khảo lớp học lập trình này. Bạn có thể tham khảo bài viết này để biết thông tin chi tiết về cách truy xuất mã dự án và điểm khác biệt giữa mã dự án với tên dự án và số dự án.
export PRIMUS_PROJECT_ID=<GCP project id of Primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus bank>
- Bật tính năng Thanh toán cho các dự án của bạn.
- Bật Confidential Computing API và các API sau cho cả hai dự án.
gcloud services enable \
cloudapis.googleapis.com \
cloudkms.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudshell.googleapis.com \
container.googleapis.com \
containerregistry.googleapis.com \
iam.googleapis.com \
confidentialcomputing.googleapis.com
- Đặt các biến cho tên tài nguyên như đề cập bên dưới bằng lệnh này. Bạn có thể ghi đè tên tài nguyên bằng các biến này (ví dụ:
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket') - Bạn có thể đặt các biến sau bằng tên tài nguyên đám mây hiện có trong dự án Primus. Nếu bạn đặt biến này, thì tài nguyên đám mây hiện có tương ứng trong dự án Primus sẽ được dùng. Nếu bạn chưa đặt biến, tên tài nguyên đám mây sẽ được tạo từ tên dự án và tài nguyên đám mây mới sẽ được tạo trong phần sau:
| Bộ chứa lưu trữ tệp dữ liệu khách hàng của Primus Bank. |
| Nhóm danh tính tải (WIP) của Ngân hàng Primus xác thực các yêu cầu. |
| Nhà cung cấp Workload Identity Pool của Primus Bank, bao gồm cả điều kiện uỷ quyền để sử dụng cho các mã thông báo do Attestation Verifier Service ký. |
| Tài khoản dịch vụ của Primus Bank mà |
| Khoá KMS dùng để mã hoá dữ liệu được lưu trữ trong |
| Chuỗi khoá KMS sẽ được dùng để tạo khoá mã hoá |
| Kho lưu trữ cấu phần phần mềm nơi hình ảnh Docker của khối lượng công việc sẽ được chuyển. |
- Bạn có thể đặt các biến sau bằng tên tài nguyên đám mây hiện có trong dự án Secundus. Nếu bạn đặt biến này, thì tài nguyên đám mây hiện có tương ứng trong dự án Secundus sẽ được dùng. Nếu bạn chưa đặt biến, tên tài nguyên đám mây sẽ được tạo từ tên dự án và tài nguyên đám mây mới sẽ được tạo trong quá trình sau:
| Bộ chứa lưu trữ tệp dữ liệu khách hàng của Ngân hàng Secundus |
| Workload Identity Pool (WIP) của Secundus Bank xác thực các yêu cầu. |
| Nhà cung cấp Workload Identity Pool của Secundus Bank, bao gồm cả điều kiện uỷ quyền để sử dụng cho các mã thông báo do Dịch vụ xác minh chứng thực ký. |
| Tài khoản dịch vụ của Secundus Bank mà |
| Khoá KMS được dùng để mã hoá dữ liệu được lưu trữ trong |
| Chuỗi khoá KMS được dùng để tạo khoá mã hoá |
| Bộ chứa lưu trữ kết quả của khối lượng công việc. |
| Tên hình ảnh vùng chứa tải. |
| Thẻ của hình ảnh vùng chứa khối lượng công việc. |
| Tài khoản dịch vụ có quyền truy cập vào Máy ảo bảo mật chạy khối lượng công việc. |
- Có một số cấu phần phần mềm được dùng trong lớp học lập trình này như đề cập dưới đây:
primus_customer_list.csv: Tệp chứa dữ liệu khách hàng của Ngân hàng Primus. Đây là tệp mẫu được dùng trong lớp học lập trình này.secundus_customer_list.csv: Tệp chứa dữ liệu khách hàng của Ngân hàng Secundus. Đây là tệp mẫu được dùng trong lớp học lập trình này.- Bạn sẽ cần có một số quyền nhất định cho hai dự án này:
- Đối với
$PRIMUS_PROJECT_ID, bạn sẽ cần có quyền Quản trị viên Cloud KMS, Quản trị viên bộ nhớ, Quản trị viên Artifact Registry, Quản trị viên tài khoản dịch vụ, Quản trị viên IAM Workload Identity Pool. - Đối với
$SECUNDUS_PROJECT_ID, bạn sẽ cần có Quản trị viên điện toán, Quản trị viên bộ nhớ, Quản trị viên tài khoản dịch vụ, Quản trị viên Cloud KMS, Quản trị viên IAM Workload Identity Pool, Quản trị viên bảo mật (không bắt buộc). - Chạy tập lệnh sau để đặt các tên biến còn lại thành giá trị dựa trên mã dự án cho tên tài nguyên.
source config_env.sh
Thiết lập tài nguyên đám mây cho Primus Bank
Primus Bank cần có các tài nguyên đám mây sau. Chạy tập lệnh này để thiết lập tài nguyên cho Primus Bank:
- Bộ chứa lưu trữ đám mây (
$PRIMUS_INPUT_STORAGE_BUCKET) để lưu trữ tệp dữ liệu khách hàng đã mã hoá của Primus Bank. - Khoá mã hoá (
$PRIMUS_ENC_KEY) và khoá ($PRIMUS_ENC_KEYRING) trong KMS để mã hoá tệp dữ liệu khách hàng của Ngân hàng Primus. - Workload Identity Pool (
$PRIMUS_WORKLOAD_IDENTITY_POOL) để xác thực các yêu cầu dựa trên các điều kiện thuộc tính được định cấu hình trong nhà cung cấp của nhóm này. - Tài khoản dịch vụ (
$PRIMUS_SERVICE_ACCOUNT) được đính kèm vào nhóm danh tính tải nêu trên ($PRIMUS_WORKLOAD_IDENTITY_POOL) có quyền truy cập để giải mã dữ liệu bằng khoá KMS (sử dụng vai tròroles/cloudkms.cryptoKeyDecrypter), đọc dữ liệu từ vùng lưu trữ trên đám mây (sử dụng vai tròobjectViewer) và kết nối tài khoản dịch vụ với nhóm danh tính tải (sử dụngroles/iam.workloadIdentityUser).
./setup_primus_bank_resources.sh
Thiết lập tài nguyên trên đám mây cho Ngân hàng Secundus
Đối với Ngân hàng Secundus, bạn cần có các tài nguyên đám mây sau. Chạy tập lệnh này để thiết lập các tài nguyên của Secundus Bank. Trong các bước này, các tài nguyên được đề cập dưới đây sẽ được tạo:
- Bộ chứa lưu trữ đám mây (
$SECUNDUS_INPUT_STORAGE_BUCKET) để lưu trữ tệp dữ liệu khách hàng đã mã hoá của Ngân hàng Secundus. - Khoá mã hoá (
$SECUNDUS_ENC_KEY) và khoá ($SECUNDUS_ENC_KEYRING) trong KMS để mã hoá tệp dữ liệu của Ngân hàng Secundus. - Workload Identity Pool (
$SECUNDUS_WORKLOAD_IDENTITY_POOL) để xác thực các yêu cầu dựa trên các điều kiện thuộc tính được định cấu hình trong nhà cung cấp của nhóm này. - Tài khoản dịch vụ (
$SECUNDUS_SERVICE_ACCOUNT) được đính kèm vào nhóm danh tính tải nêu trên ($SECUNDUS_WORKLOAD_IDENTITY_POOL) có quyền truy cập để giải mã dữ liệu bằng khoá KMS (sử dụng vai tròroles/cloudkms.cryptoKeyDecrypter), đọc dữ liệu từ vùng lưu trữ trên đám mây (sử dụng vai tròobjectViewer) và kết nối tài khoản dịch vụ với nhóm danh tính tải (sử dụng vai tròroles/iam.workloadIdentityUser). - Bộ chứa lưu trữ trên đám mây (
$SECUNDUS_RESULT_STORAGE_BUCKET) để lưu trữ kết quả thực thi khối lượng công việc của Secundus Bank.
./setup_secundus_bank_resources.sh
3. Tạo khối lượng công việc
Tạo tài khoản dịch vụ tải
Bây giờ, bạn sẽ tạo một tài khoản dịch vụ cho tải với các vai trò và quyền bắt buộc như đề cập dưới đây. Chạy tập lệnh sau đây để tạo tài khoản dịch vụ tải trong dự án Secundus Bank. VM chạy khối lượng công việc sẽ sử dụng tài khoản dịch vụ này.
Tài khoản dịch vụ tải này ($WORKLOAD_SERVICE_ACCOUNT) sẽ có các vai trò sau:
- Cấp vai trò
confidentialcomputing.workloadUsercho tài khoản dịch vụ của tải . Thao tác này sẽ cho phép tài khoản người dùng tạo mã thông báo chứng thực. - Cấp vai trò
logging.logWritercho quyền tài khoản dịch vụ của khối lượng công việc. Điều này cho phép môi trường Confidential Space ghi nhật ký vào Cloud Logging ngoài Serial Console, nhờ đó, nhật ký vẫn có sẵn sau khi VM bị chấm dứt. objectViewerđể đọc dữ liệu từ bộ chứa lưu trữ đám mây$PRIMUS_INPUT_STORAGE_BUCKET.objectViewerđể đọc dữ liệu từ bộ chứa lưu trữ đám mây$SECUNDUS_INPUT_STORAGE_BUCKET.objectAdminđể ghi kết quả của tải vào bộ chứa lưu trữ đám mây$SECUNDUS_RESULT_STORAGE_BUCKET.
./create_workload_service_account.sh
Tạo đơn vị công việc
Trong bước này, bạn sẽ tạo một hình ảnh Docker cho tải trọng được dùng trong lớp học lập trình này. Tải là một ứng dụng GoLang đơn giản:
- Đếm số khách hàng ở một vị trí địa lý cụ thể.
- Tìm những khách hàng chung của Primus và Secundus Bank trong danh sách khách hàng được lưu trữ trong các bộ chứa lưu trữ đám mây tương ứng của họ.
Chạy tập lệnh sau đây để tạo một khối lượng công việc trong đó các bước sau đang được thực hiện:
- Tạo Artifact Registry (
$PRIMUS_ARTIFACT_REPOSITORY) do Primus Bank sở hữu, nơi tải sẽ được xuất bản. - Tạo mã và cập nhật mã đó bằng tên tài nguyên bắt buộc. Bạn có thể tìm thấy mã tải được dùng trong lớp học lập trình này tại đây.
- Tạo mã và đóng gói mã đó trong một hình ảnh Docker. Bạn có thể tìm thấy Dockerfile tương ứng tại đây.
- Xuất bản hình ảnh Docker lên Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY) do Primus Bank sở hữu. - Cấp cho tài khoản dịch vụ
$WORKLOAD_SERVICE_ACCOUNTquyền đọc đối với Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY).
./create_workload.sh
4. Uỷ quyền và chạy(các) khối lượng công việc
Uỷ quyền cho khối lượng công việc
Primus Bank muốn uỷ quyền cho các tải để truy cập vào dữ liệu khách hàng dựa trên các thuộc tính của những tài nguyên sau:
- Nội dung: Mã đã được xác minh
- Nơi: Môi trường an toàn
- Đối tượng: Một nhà mạng đáng tin cậy
Primus sử dụng Liên kết danh tính tải để thực thi chính sách truy cập dựa trên các yêu cầu này.
Liên kết thông tin nhận dạng của khối lượng công việc cho phép bạn chỉ định các điều kiện thuộc tính. Các điều kiện này hạn chế những danh tính có thể xác thực bằng nhóm danh tính tải (WIP). Bạn có thể thêm Dịch vụ xác minh chứng thực vào WIP dưới dạng một nhà cung cấp nhóm danh tính tải để trình bày các phép đo và thực thi chính sách.
Nhóm danh tính tải đã được tạo trước đó trong bước thiết lập tài nguyên đám mây. Giờ đây, Primus Bank sẽ tạo một nhà cung cấp nhóm danh tính tải OIDC mới. --attribute-condition được chỉ định sẽ cho phép truy cập vào vùng chứa tải. Tính năng này yêu cầu:
- Nội dung:
$WORKLOAD_IMAGE_NAMEmới nhất được tải lên kho lưu trữ$PRIMUS_ARTIFACT_REPOSITORY. - Vị trí: Môi trường thực thi đáng tin cậy Confidential Space đang chạy trên hình ảnh máy ảo Confidential Space được hỗ trợ đầy đủ.
- Đối tượng: Tài khoản dịch vụ
$WORKLOAD_SERVICE_ACCOUNTcủa Secundus Bank.
gcloud config set project $PRIMUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $PRIMUS_WIP_PROVIDER \
--location="global" \
--workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject='assertion.sub'" \
--attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes &&
assertion.submods.container.image_reference == 'us-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
Tương tự như WIP được tạo cho Primus Bank, Secundus Bank muốn uỷ quyền cho các tải công việc truy cập vào dữ liệu khách hàng của họ dựa trên:
- Nội dung: Đơn vị công việc.
- Nơi: Môi trường Confidential Space.
- Đối tượng: Tài khoản (
$WORKLOAD_SERVICE_ACCOUNT) đang chạy khối lượng công việc.
Primus Bank sử dụng yêu cầu image_reference (bao gồm cả thẻ hình ảnh) để xác định xem họ có nên cho phép truy cập hay không. Họ kiểm soát kho lưu trữ từ xa, vì vậy họ có thể chắc chắn rằng chỉ gắn thẻ những hình ảnh không làm rò rỉ dữ liệu của họ.
Ngược lại, Secundus Bank không kiểm soát kho lưu trữ nơi họ lấy hình ảnh, vì vậy, họ không thể đưa ra giả định đó một cách an toàn. Thay vào đó, họ chọn cho phép truy cập vào khối lượng công việc dựa trên image_digest của khối lượng công việc đó. Không giống như image_reference (Primus Bank có thể thay đổi để trỏ đến một hình ảnh khác), Primus Bank không thể để image_digest tham chiếu đến một hình ảnh khác với hình ảnh mà Secundus Bank đã kiểm tra ở bước trước.
Trước khi tạo nhà cung cấp nhóm danh tính tải, chúng ta sẽ thu thập image_digest cho hình ảnh vùng chứa tải. Hình ảnh này sẽ được dùng trong các điều kiện thuộc tính của nhà cung cấp.
export WORKLOAD_IMAGE_DIGEST=$(gcloud artifacts docker images describe ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG --format="value(image_summary.digest)" --project ${PRIMUS_PROJECT_ID})
gcloud config set project $SECUNDUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $SECUNDUS_WIP_PROVIDER \
--location="global" \
--workload-identity-pool="$SECUNDUS_WORKLOAD_IDENTITY_POOL" \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject='assertion.sub'" \
--attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes &&
assertion.submods.container.image_digest == '${WORKLOAD_IMAGE_DIGEST}' &&
assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
Chạy(các) khối lượng công việc
Trong bước này, Secundus Bank sẽ chạy khối lượng công việc trên Confidential Space. Tải này sẽ nhận mã truy cập từ nhóm danh tính tải của Primus và nhóm danh tính tải của Secundus để đọc và giải mã dữ liệu khách hàng của Ngân hàng Primus và Ngân hàng Secundus tương ứng.
Các đối số TEE bắt buộc được truyền bằng cờ siêu dữ liệu. Các đối số cho vùng chứa tải được truyền bằng cách sử dụng phần "tee-cmd" của cờ. Kết quả thực thi khối lượng công việc sẽ được xuất bản lên $SECUNDUS_RESULT_STORAGE_BUCKET.
Chạy khối lượng công việc đầu tiên
Trong quá trình thực thi khối lượng công việc đầu tiên, khối lượng công việc sẽ tính số lượng khách hàng của Ngân hàng Primus từ vị trí được cung cấp trong các đối số vùng chứa khối lượng công việc. Như minh hoạ bên dưới, tải đầu tiên sẽ thực thi lệnh "count-location" và kết quả sẽ được lưu trữ tại $SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result.
gcloud compute instances create ${WORKLOAD_VM1} \
--project=${SECUNDUS_PROJECT_ID} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"count-location\",\"Seattle\",\"gs://${SECUNDUS_RESULT_STORAGE_BUCKET}/seattle-result\"]""
Xem kết quả
Trong dự án Secundus, hãy xem kết quả của khối lượng công việc đầu tiên. Đợi 3-5 phút để tải hoàn tất quá trình thực thi và kết quả có sẵn trên vùng lưu trữ đám mây.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
Kết quả phải là 3, vì đây là số người ở Seattle được liệt kê trong tệp primus_customer_list.csv!
Chạy tải thứ hai
Trong quá trình thực thi khối lượng công việc thứ hai, chúng ta sẽ tìm thấy những khách hàng chung của Ngân hàng Primus và Ngân hàng Secundus. Như minh hoạ bên dưới, tải thứ hai sẽ thực thi lệnh "list-common-customers" và kết quả sẽ được lưu trữ tại $SECUNDUS_RESULT_STORAGE_BUCKET/list-common-count.
gcloud compute instances create ${WORKLOAD_VM2} \
--project=${SECUNDUS_PROJECT_ID} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""
Xem kết quả
Trong dự án Secundus, hãy xem kết quả của khối lượng công việc thứ hai. Đợi 3-5 phút để tải hoàn tất quá trình thực thi và kết quả có sẵn trên vùng lưu trữ đám mây.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
Kết quả sẽ là danh sách sau đây vì đây là những khách hàng chung giữa Primus và Secundus Bank.
Kết quả:
Eric
Clinton
Ashley
Cooper
Chạy khối lượng công việc trái phép
Hợp đồng của Primus Bank cho phép Secundus Bank truy cập vào dữ liệu của họ hết hạn. Vì vậy, Primus Bank cập nhật điều kiện thuộc tính để cho phép các máy ảo có tài khoản dịch vụ của đối tác mới là Tertius Bank.
Ngân hàng Primus sửa đổi nhà cung cấp Nhóm danh tính tải
Trong $PRIMUS_PROJECT_ID, hãy cập nhật điều kiện thuộc tính cho trình xác minh chứng thực để uỷ quyền cho các tải ở một vị trí mới.
- Đặt dự án thành $PRIMUS_PROJECT_ID.
gcloud config set project $PRIMUS_PROJECT_ID
- Xuất mã dự án GCP của Tertius Bank bằng lệnh bên dưới. Sau đó, Primus Bank sẽ dùng thông tin này để cập nhật điều kiện thuộc tính của nhà cung cấp nhóm danh tính tải. Ngân hàng Primus sẽ không ngừng uỷ quyền cho tài khoản dịch vụ tải của Ngân hàng Secundus. Giờ đây, tính năng này sẽ cho phép các tài khoản dịch vụ khối lượng công việc của Tertius Bank.
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
- Cập nhật nhà cung cấp OIDC trong nhóm danh tính tải. Ở đây,
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accountsđược thay đổi thành'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts.Thay vì uỷ quyền cho tài khoản dịch vụ tải công việc từ Secundus Bank, giờ đây, tài khoản dịch vụ tải công việc từ Tertius Bank sẽ được uỷ quyền.
gcloud iam workload-identity-pools providers update-oidc $PRIMUS_WIP_PROVIDER \
--location="global" \
--workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject='assertion.sub'" \
--attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes &&
assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
Chạy lại khối lượng công việc
Khi Secundus Bank cố gắng chạy khối lượng công việc ban đầu, thao tác này sẽ không thành công. Để xem lỗi, hãy xoá tệp kết quả ban đầu và phiên bản máy ảo, sau đó thử chạy lại tải.
Xoá tệp kết quả và phiên bản máy ảo hiện có
- Đặt dự án thành dự án
$SECUNDUS_PROJECT_ID.
gcloud config set project $SECUNDUS_PROJECT_ID
- Xoá tệp kết quả.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
- Xoá phiên bản VM bảo mật.
gcloud compute instances delete ${WORKLOAD_VM2} --zone=${SECUNDUS_PROJECT_ZONE}
Chạy tải trái phép:
gcloud compute instances create ${WORKLOAD_VM2} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE}\
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""
Xem lỗi
Thay vì kết quả của khối lượng công việc, bạn sẽ thấy một lỗi (The given credential is rejected by the attribute condition).
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
Tương tự, nếu Primus Bank bí mật sửa đổi tải để gửi toàn bộ danh sách khách hàng của Secundus Bank đến một nhóm mà Primus Bank sở hữu, thì nỗ lực đó sẽ thất bại vì bản tóm tắt của tải độc hại sẽ khác với bản tóm tắt hình ảnh được uỷ quyền trong Nhóm danh tính tải của Secundus Bank.
5. Dọn dẹp
Đây là tập lệnh có thể dùng để dọn dẹp các tài nguyên mà chúng ta đã tạo trong lớp học lập trình này. Trong quá trình dọn dẹp này, các tài nguyên sau đây sẽ bị xoá:
- Nhập bộ chứa lưu trữ đám mây của Ngân hàng Primus (
$PRIMUS_INPUT_STORAGE_BUCKET). - Một tài khoản dịch vụ của Ngân hàng Primus (
$PRIMUS_SERVICE_ACCOUNT). - Một sổ đăng ký cấu phần phần mềm của Ngân hàng Primus, nơi lưu giữ chữ ký hình ảnh (
$PRIMUS_COSIGN_REPOSITORY). - Một nhóm danh tính tải của Ngân hàng Primus(
$PRIMUS_WORKLOAD_IDENTITY_POOL). - Tài khoản dịch vụ tải của Ngân hàng Secundus (
$WORKLOAD_SERVICE_ACCOUNT). - Nhập bộ chứa lưu trữ đám mây của Ngân hàng Secundus (
$SECUNDUS_INPUT_STORAGE_BUCKET). - Một tài khoản dịch vụ của Ngân hàng Secundus (
$SECUNDUS_SERVICE_ACCOUNT). - Một sổ đăng ký cấu phần phần mềm của Ngân hàng Secundus lưu giữ chữ ký hình ảnh (
$SECUNDUS_COSIGN_REPOSITORY). - Nhóm danh tính tải của Ngân hàng Secundus(
$SECUNDUS_WORKLOAD_IDENTITY_POOL). - Tài khoản dịch vụ cho khối lượng công việc của Ngân hàng Secundus (
$WORKLOAD_SERVICE_ACCOUNT). - Các phiên bản điện toán của khối lượng công việc.
- Bộ chứa lưu trữ kết quả của Ngân hàng Secundus (
$SECUNDUS_RESULT_STORAGE_BUCKET). - Kho lưu trữ cấu phần phần mềm của Primus Bank (
$PRIMUS_ARTIFACT_REPOSITORY).
./cleanup.sh
Nếu đã khám phá xong, vui lòng cân nhắc việc xoá dự án của bạn.
- Truy cập vào Cloud Platform Console.
- Chọn dự án mà bạn muốn tắt, sau đó nhấp vào "Xoá" ở trên cùng: thao tác này sẽ lên lịch xoá dự án.
Xin chúc mừng
Xin chúc mừng, bạn đã hoàn tất thành công lớp học lập trình này!
Bạn đã tìm hiểu cách bảo mật dữ liệu được chia sẻ mà vẫn giữ được tính bảo mật của dữ liệu đó bằng Confidential Space.
Tiếp theo là gì?
Hãy xem một số lớp học lập trình tương tự này...
- Lớp học lập trình về hình ảnh vùng chứa đã ký
- Cách giao dịch tài sản kỹ thuật số bằng điện toán nhiều bên và không gian bảo mật
- Phân tích dữ liệu mật bằng Không gian bảo mật
Tài liệu đọc thêm
- Bạn cảm thấy cô lập? Điện toán bảo mật sẽ giúp bạn
- Điện toán bảo mật tại GCP
- Không gian bảo mật: Tương lai của hoạt động cộng tác bảo đảm quyền riêng tư
- Cách Google và Intel tăng cường bảo mật cho Điện toán bảo mật
- Quyền riêng tư so với tiến trình – Nâng cao tính bảo mật bằng Điện toán bảo mật của Google Cloud