Dữ liệu được chia sẻ an toàn được sử dụng với Không gian bảo mật

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ó

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.

fdef93a6868a976.png

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>
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:

$PRIMUS_INPUT_STORAGE_BUCKET

Bộ chứa lưu trữ tệp dữ liệu khách hàng của Primus Bank.

$PRIMUS_WORKLOAD_IDENTITY_POOL

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.

$PRIMUS_WIP_PROVIDER

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ý.

$PRIMUS_SERVICE_ACCOUNT

Tài khoản dịch vụ của Primus Bank mà $PRIMUS_WORKLOAD_IDENTITY_POOL dùng để truy cập vào các tài nguyên được bảo vệ. Ở bước này, ứng dụng có quyền xem dữ liệu khách hàng được lưu trữ trong vùng chứa $PRIMUS_INPUT_STORAGE_BUCKET.

$PRIMUS_ENC_KEY

Khoá KMS dùng để mã hoá dữ liệu được lưu trữ trong $PRIMUS_INPUT_STORAGE_BUCKET cho Ngân hàng Primus.

$PRIMUS_ENC_KEYRING

Chuỗi khoá KMS sẽ được dùng để tạo khoá mã hoá $PRIMUS_ENC_KEY cho Ngân hàng Primus.

$PRIMUS_ARTIFACT_REPOSITORY

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:

$SECUNDUS_INPUT_STORAGE_BUCKET

Bộ chứa lưu trữ tệp dữ liệu khách hàng của Ngân hàng Secundus

$SECUNDUS_WORKLOAD_IDENTITY_POOL

Workload Identity Pool (WIP) của Secundus Bank xác thực các yêu cầu.

$SECUNDUS_WIP_PROVIDER

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ý.

$SECUNDUS_SERVICE_ACCOUNT

Tài khoản dịch vụ của Secundus Bank mà $SECUNDUS_WORKLOAD_IDENTITY_POOL dùng để truy cập vào các tài nguyên được bảo vệ. Ở bước này, ứng dụng có quyền xem dữ liệu khách hàng được lưu trữ trong vùng chứa $SECUNDUS_INPUT_STORAGE_BUCKET.

$SECUNDUS_ENC_KEY

Khoá KMS được dùng để mã hoá dữ liệu được lưu trữ trong $SECUNDUS_INPUT_STORAGE_BUCKET cho Ngân hàng Secundus.

$SECUNDUS_ENC_KEYRING

Chuỗi khoá KMS được dùng để tạo khoá mã hoá $SECUNDUS_ENV_KEY cho Ngân hàng Secundus.

$SECUNDUS_RESULT_STORAGE_BUCKET

Bộ chứa lưu trữ kết quả của khối lượng công việc.

$WORKLOAD_IMAGE_NAME

Tên hình ảnh vùng chứa tải.

$WORKLOAD_IMAGE_TAG

Thẻ của hình ảnh vùng chứa khối lượng công việc.

$WORKLOAD_SERVICE_ACCOUNT

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ụng roles/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.workloadUser cho 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.logWriter cho 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_ACCOUNT quyề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_NAME mớ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_ACCOUNT củ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.

  1. Đặt dự án thành $PRIMUS_PROJECT_ID.
gcloud config set project $PRIMUS_PROJECT_ID
  1. 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>
  1. 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ó

  1. Đặt dự án thành dự án $SECUNDUS_PROJECT_ID.
gcloud config set project $SECUNDUS_PROJECT_ID
  1. Xoá tệp kết quả.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
  1. 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...

Tài liệu đọc thêm