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

Bảo mật dữ liệu được chia sẻ đang sử dụng bằng Không gian bảo mật

Thông tin về lớp học lập trình này

subjectLần cập nhật gần đây nhất: thg 11 22, 2024
account_circleTác giả: Priya Pandey, Jiankun Lu, Meetrajsinh Vala

1. Tổng quan

Không gian bảo mật cung cấp tính năng chia sẻ và cộng tác dữ liệu an toàn giữa nhiều bên, đồng thời cho phép các tổ chức bảo mật 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 trong khi 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.

Không gian bảo mật mở ra những tình huống mà bạn muốn đạt đượ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 quản lý, đồng thời vẫn giữ toàn quyền kiểm soát dữ liệu đó. Với Không gian bảo mật, các tổ chức có thể đạt đượ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 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à bí mật mã hoá, đồ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 Không gian bảo mật
  • 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 không gian bảo mật
  • Cách uỷ quyền truy cập vào các tài nguyên được bảo vệ dựa trên các thuộc tính của mã khối lượng công việc (cái gì), môi trường Không gian bảo mật (ở đâu) và tài khoản đang chạy khối lượng công việc (ai).

Trong lớp học lập trình này, bạn sẽ thiết lập một Không gian bảo mật giữa Ngân hàng Primus và Ngân hàng Secundus để xác định những khách hàng chung 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 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 các bộ nhớ trên đá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 bộ chứa Cloud Storage và mã hoá dữ liệu bằng các khoá Dịch vụ quản lý khoá trên đám mây.
  • Bước 2: Tạo tài khoản dịch vụ cho khối lượng công việc mà máy ảo khối lượng công việc sẽ sử dụng. Ngân hàng Secundus sẽ là đơn vị vận hành khối lượng công việc và sẽ khởi chạy máy ảo khối lượng công việc. Primus Bank sẽ là tác giả của mã khối lượng công việc.
  • Bước 3: Tạo một khối lượng công việc bao gồm hai lệnh CLI, một lệnh để đếm khách hàng từ vị trí đã cung cấp và một lệnh để tìm khách hàng chung của Ngân hàng Primus và Secundus. Ngân hàng Primus sẽ là tác giả của khối lượng công việc này và khối lượng công việc sẽ được đóng gói dưới dạng hình ảnh Docker. Hình ảnh Docker này sẽ được phát hành lên Cơ sở lưu trữ cấu phần phần mềm.
  • 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 của người đang chạy tải, chức năng của tải và vị trí đang chạy tải.
  • Bước 5: Khi chạy, khối lượng công việc 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 (Ngân hàng Primus và Ngân hàng Secundus) bằng cách cung cấp mã thông báo dịch vụ Trình xác minh chứng thực có các tuyên bố về khối lượng công việc và môi trường. Nếu các thông báo xác nhận đo lường mức tải trong mã thông báo khớp với điều kiện thuộc tính trong nhóm nhận dạng mức tải của Ngân hàng Primus và Secundus, thì mã thông báo truy cập vào tài khoản dịch vụ sẽ trả về mã thông báo truy cập vào tài khoản dịch vụ có quyền truy cập vào các tài nguyên trên đám mây tương ứng. Chỉ khối lượng công việc chạy bên trong Không gian bảo mật mới có thể truy cập vào 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 để tính số khách hàng của Ngân hàng Primus ở một số vị trí cụ thể. Đối với khối lượng công việc này, Primus Bank sẽ là 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 chạy trong Không gian bảo mật. Secundus Bank sẽ là một trình 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 khối lượng công việc 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 là cộng tác viên dữ liệu. Các dịch vụ này sẽ cung cấp danh sách khách hàng đã mã hoá cho khối lượng công việc chạy trong Không gian bảo mật. Ngân hàng Secundus sẽ lại là toán tử khối lượng công việc. Ngân hàng Secundus cũng sẽ cho phép khối lượng công việc này vì khối lượng công việc này cũng cần truy cập vào danh sách khách hàng đã mã hoá của Ngân hàng Secundus để tìm khách hàng chung. Trong trường hợp này, Ngân hàng Secundus sẽ cho phép khối lượng 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 khối lượng công việc, chức năng của khối lượng công việc và vị trí khối lượng công việc đang chạy như đã đề cập trong bước 4 đối với Ngân hàng Primus.

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 dưới đây để lấy các tập lệnh bắt buộc đượ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ạ dưới đây. Để 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 đây để biết thông tin chi tiết về cách truy xuất mã dự án và sự 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 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 đây 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 từ dự án Primus sẽ được sử dụng. Nếu bạn không đặt biến này, tên tài nguyên trên đám mây sẽ được tạo từ tên dự án và tài nguyên trên đám mây mới sẽ được tạo trong các 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 thông báo xác nhận.

$PRIMUS_WIP_PROVIDER

Nhà cung cấp Workload Identity Pool (Nhóm danh tính tải) của Primus Bank, bao gồm điều kiện uỷ quyền để sử dụng cho mã thông báo do Dịch vụ xác minh chứng thực ký.

$PRIMUS_SERVICE_ACCOUNT

Tài khoản dịch vụ của Primus Bank mà $PRIMUS_WORKLOAD_IDENTITY_POOL sử 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 bộ 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

Khoá chuỗi 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 đẩy.

  • Bạn có thể đặt các biến sau đây 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 từ dự án Secundus sẽ được sử dụng. Nếu bạn không đặt biến, tên tài nguyên trên đám mây sẽ được tạo từ tên dự án và tài nguyên trên đám mây mới sẽ được tạo trong các phần 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

Nhóm Workload Identity (WIP) của Ngân hàng Secundus xác thực các thông báo xác nhận quyền sở hữu.

$SECUNDUS_WIP_PROVIDER

Nhà cung cấp Workload Identity Pool (Nhóm danh tính theo tải trọng) của Ngân hàng Secundus, bao gồm đ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 Ngân hàng Secundus mà $SECUNDUS_WORKLOAD_IDENTITY_POOL sử 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 bộ chứa $SECUNDUS_INPUT_STORAGE_BUCKET.

$SECUNDUS_ENC_KEY

Khoá KMS 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

Khoá truy cập KMS 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ả khối lượng công việc.

$WORKLOAD_IMAGE_NAME

Tên hình ảnh vùng chứa khối lượng công việc.

$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 sử dụng trong lớp học lập trình này như được đề 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. Dưới đây là tệp mẫu 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. Dưới đây là tệp mẫu 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 cần có Quản trị viên Cloud KMS, Quản trị viên bộ nhớ, Quản trị viên kho lưu trữ cấu phần phần mềm, Quản trị viên tài khoản dịch vụ, Quản trị viên nhóm nhận dạng theo tải công việc IAM.
  • Đối với $SECUNDUS_PROJECT_ID, bạn cần có vai trò Quản trị viên Compute, 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 nhóm nhận dạng theo mức tải IAM, Quản trị viên bảo mật (không bắt buộc).
  • Chạy tập lệnh sau để đặt tên biến còn lại thành giá trị dựa trên mã dự án của bạn cho tên tài nguyên.
source config_env.sh

Thiết lập tài nguyên trên đám mây cho Primus Bank

Ngân hàng Primus 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 bộ nhớ trên đám mây ($PRIMUS_INPUT_STORAGE_BUCKET) để lưu trữ tệp dữ liệu khách hàng đã mã hoá của Ngân hàng Primus.
  • Khoá mã hoá ($PRIMUS_ENC_KEY) và khoá truy cập ($PRIMUS_ENC_KEYRING) trong KMS để mã hoá tệp dữ liệu khách hàng của Ngân hàng Primus.
  • Nhóm danh tính tải ($PRIMUS_WORKLOAD_IDENTITY_POOL) để xác thực các tuyên bố dựa trên điều kiện thuộc tính được định cấu hình trong nhà cung cấp của nhóm.
  • Tài khoản dịch vụ ($PRIMUS_SERVICE_ACCOUNT) được đính kèm vào nhóm danh tính khối lượng công việc ($PRIMUS_WORKLOAD_IDENTITY_POOL) nêu trên có quyền giải mã dữ liệu bằng khoá KMS (sử dụng vai trò roles/cloudkms.cryptoKeyDecrypter), đọc dữ liệu từ bộ nhớ 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 khối lượng công việc (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 tài nguyên của Ngân hàng Secundus. Trong các bước này, các tài nguyên được đề cập bên dưới sẽ được tạo:

  • Bộ chứa bộ nhớ trên đá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á truy cập ($SECUNDUS_ENC_KEYRING) trong KMS để mã hoá tệp dữ liệu của Ngân hàng Secundus.
  • Nhóm danh tính tải ($SECUNDUS_WORKLOAD_IDENTITY_POOL) để xác thực các tuyên bố dựa trên điều kiện thuộc tính được định cấu hình trong nhà cung cấp của nhóm.
  • Tài khoản dịch vụ ($SECUNDUS_SERVICE_ACCOUNT) được đính kèm vào nhóm danh tính khối lượng công việc ($SECUNDUS_WORKLOAD_IDENTITY_POOL) nêu trên có quyền giải mã dữ liệu bằng khoá KMS (sử dụng vai trò roles/cloudkms.cryptoKeyDecrypter), đọc dữ liệu từ bộ nhớ 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 khối lượng công việc (sử dụng vai trò roles/iam.workloadIdentityUser).
  • Bộ chứa bộ nhớ 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 Ngân hàng Secundus.
./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ụ cho khối lượng công việc

Bây giờ, bạn sẽ tạo một tài khoản dịch vụ cho khối lượng công việc với các vai trò và quyền bắt buộc như được đề cập bên dưới. Chạy tập lệnh sau để tạo tài khoản dịch vụ khối lượng công việc trong dự án Ngân hàng Secundus. Máy ảo 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ụ khối lượng công việc 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ụ khối lượng công việc . Điều 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ụ khối lượng công việc. Điều này cho phép môi trường Không gian bảo mật ghi nhật ký vào Cloud Logging (Ghi nhật ký trên đám mây) ngoài Bảng điều khiển nối tiếp, nhờ đó, nhật ký sẽ có sẵn sau khi máy ảo bị chấm dứt.
  • objectViewer để đọc dữ liệu từ bộ nhớ trên đám mây $PRIMUS_INPUT_STORAGE_BUCKET.
  • objectViewer để đọc dữ liệu từ bộ nhớ trên đám mây $SECUNDUS_INPUT_STORAGE_BUCKET.
  • objectAdmin để ghi kết quả khối lượng công việc vào bộ nhớ trên đám mây $SECUNDUS_RESULT_STORAGE_BUCKET.
./create_workload_service_account.sh

Tạo mức tải

Trong bước này, bạn sẽ tạo một hình ảnh Docker cho khối lượng công việc được sử dụng trong lớp học lập trình này. Gói công việc là một ứng dụng GoLang đơn giản:

  • Tính số khách hàng ở một vị trí địa lý cụ thể.
  • Tìm khách hàng chung của Ngân hàng Primus và Secundus trong danh sách khách hàng được lưu trữ trong các bộ chứa bộ nhớ trên đám mây tương ứng.

Chạy tập lệnh sau để 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 trọng sẽ được phát hành.
  • 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ể xem mã khối lượng công việc được sử 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 hình ảnh Docker. Bạn có thể tìm thấy Dockerfile tương ứng tại đây.
  • Phát hành hình ảnh Docker lên Cấu phần phần mềm đăng ký ($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 Cấu phần phần mềm ($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 Workload

Primus Bank muốn uỷ quyền cho các khối lượng công việc truy cập vào dữ liệu khách hàng dựa trên các thuộc tính của các tài nguyên sau:

  • Nội dung: Mã được xác minh
  • Vị trí: Môi trường an toàn
  • Who (Ai): Một nhà vận hành đáng tin cậy

Primus sử dụng tính năng liên kết danh tính theo Workload Identity để thực thi chính sách truy cập dựa trên các yêu cầu này.

Tính năng liên kết danh tính theo khối lượng công việc cho phép bạn chỉ định điều kiện thuộc tính. Các điều kiện này hạn chế danh tính nào 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 nhà cung cấp nhóm danh tính tải để trình bày các kết quả đo lường 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 trên đám mây. Bây giờ, 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ẽ cấp quyền truy cập vào vùng chứa khối lượng công việc. 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 của Không gian bảo mật đang chạy trên hình ảnh máy ảo Không gian bảo mật được hỗ trợ đầy đủ.
  • Ai: Tài khoản dịch vụ $WORKLOAD_SERVICE_ACCOUNT của Ngân hàng Secundus.
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 khối lượng công việc truy cập vào dữ liệu khách hàng dựa trên:

  • Nội dung: Khối lượng công việc.
  • Vị trí: Môi trường không gian bảo mật.
  • Who (Ai): Tài khoản ($WORKLOAD_SERVICE_ACCOUNT) đang chạy khối lượng công việc.

Primus Bank sử dụng thông báo xác nhận quyền sở hữ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 rò rỉ dữ liệu của họ.

So sánh, Ngân hàng Secundus 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 uỷ quyền quyền 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 mà Ngân hàng Primus có thể thay đổi để trỏ đến một hình ảnh khác, Ngân hàng Primus không thể yêu cầu image_digest tham chiếu đến một hình ảnh khác với hình ảnh mà Ngân hàng Secundus đã 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 sẽ được sử 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, Ngân hàng Secundus sẽ chạy khối lượng công việc trên Không gian bảo mật. Gói công việc này sẽ nhận mã truy cập từ nhóm nhận dạng khối lượng công việc của Primus và nhóm nhận dạng khối lượng công việc 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 khối lượng công việc được truyền bằ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ẽ đếm số 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, khối lượng công việc đầ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. Chờ 3 đến 5 phút để khối lượng công việc hoàn tất quá trình thực thi và kết quả xuất hiện trên bộ chứa bộ nhớ trên đám mây.

gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result

Kết quả sẽ là 3, vì đây là số người đến từ Seattle, được liệt kê trong tệp primus_customer_list.csv!

Chạy khối lượng công việc 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, khối lượng công việc 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. Chờ 3 đến 5 phút để khối lượng công việc hoàn tất quá trình thực thi và kết quả xuất hiện trên bộ chứa bộ nhớ trên đá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 Ngân hàng Primus và Secundus.

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 Ngân hàng Primus cho phép Ngân hàng Secundus truy cập vào dữ liệu của họ sắp hết hạn. Vì vậy, Ngân hàng Primus 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, Ngân hàng Tertius.

Primus Bank sửa đổi nhà cung cấp Workload Identity Pool

Trong $PRIMUS_PROJECT_ID, hãy cập nhật điều kiện thuộc tính cho nhà cung cấp danh tính Trình xác minh chứng thực để uỷ quyền cho các khối lượng công việc ở 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ẽ 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 theo mức tải. Ngân hàng Primus sẽ không ngừng uỷ quyền cho các tài khoản dịch vụ khối lượng công việc của Ngân hàng Secundus. Giờ đây, chính sách 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. 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 của Ngân hàng Secundus, giờ đây, tài khoản dịch vụ tải công việc của Ngân hàng Tertius 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 cố gắng chạy khối lượng công việc ban đầu, Ngân hàng Secundus sẽ không thành công. Để xem lỗi, hãy xoá tệp kết quả ban đầu và thực thể máy ảo, sau đó thử chạy lại khối lượng công việc.

Xoá tệp kết quả hiện có và phiên bản máy ảo

  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á thực thể máy ảo bảo mật.
gcloud compute instances delete ${WORKLOAD_VM2} --zone=${SECUNDUS_PROJECT_ZONE}

Chạy khối lượng công việc 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ự như vậy, nếu Ngân hàng Primus bí mật sửa đổi khối lượng công việc để gửi toàn bộ danh sách khách hàng của Ngân hàng Secundus đến một bộ chứa mà Ngân hàng Primus sở hữu, thì nỗ lực đó sẽ không thành công vì chuỗi đại diện của khối lượng công việc độc hại sẽ khác với chuỗi đại diện của hình ảnh được uỷ quyền trong Vùng chứa danh tính khối lượng công việc của Ngân hàng Secundus.

5. Dọn dẹp

Dưới đâ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 sẽ bị xoá:

  • Nhập bộ nhớ trên đá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).
  • Cấu phần phần mềm đăng ký của Ngân hàng Primus 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ụ khối lượng công việc của Ngân hàng Secundus ($WORKLOAD_SERVICE_ACCOUNT).
  • Nhập bộ nhớ trên đá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).
  • Cấu phần đă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).
  • Một 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ụ tải trọng của Ngân hàng Secundus ($WORKLOAD_SERVICE_ACCOUNT).
  • Thực thể điện toán tải trọng.
  • Bộ nhớ 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 bạn đã khám phá xong, vui lòng cân nhắc xoá dự án của mình.

  • Truy cập vào Bảng điều khiển Cloud Platform.
  • Chọn dự án bạn muốn đóng, sau đó nhấp vào "Xoá" ở trên cùng: thao tác này sẽ lên lịch xoá dự án.

Chúc mừng bạn!

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 bằng không gian bảo mật.

Tiếp theo là gì?

Hãy xem một số lớp học lập trình tương tự sau đây...

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