1. Tổng quan
Không gian bí mật cho phép các tổ chức chia sẻ và cộng tác dữ liệu nhiều bên một cách an toàn, đồng thời giú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 các tình huống mà bạn muốn có được giá trị chung 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) trong khi vẫn có toàn quyền kiểm soát đối với dữ liệu đó. Với Không gian mật, các tổ chức có thể nhận được giá trị lẫn nhau 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ật mã – trong khi vẫn có 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
- Kiến thức cơ bản về Google Compute Engine ( lớp học lập trình), Máy ảo bí 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)
- Kiến thức cơ bản về Tài khoản dịch vụ, Liên kết thông tin nhận dạng khối lượng công việc và các đ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 Không gian bảo mật
- Cách chạy khối lượng công việc trong máy ảo bảo mật chạy hình ảnh máy ảo Không gian bảo mật
- Cách cấp 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 mật giữa Primus và Secundus Bank để xác định các khách hàng chung của họ mà không cần chia sẻ toàn bộ danh sách tài khoản 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 cần thiết cho Primus và Secundus Banks. Các tài nguyên đám mây này bao gồm bộ chứa lưu trữ trên đám mây, khoá KMS, nhóm nhận dạng tải công việc và tài khoản dịch vụ cho Primus và Secundus Banks. Primus Bank và Secundus Bank lưu trữ dữ liệu khách hàng trong các bộ chứa Cloud Storage, đồng thời mã hoá dữ liệu bằng khoá của dịch vụ Quản lý khoá đám mây.
- Bước 2: Tạo một tài khoản dịch vụ cho tải công việc mà máy ảo tải công việc sẽ sử dụng. Ngân hàng Secundus (đơn vị vận hành tải công việc) sẽ khởi chạy máy ảo tải công việc. Primus Bank sẽ là bên cấp 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 2 lệnh CLI, một lệnh để đếm số khách hàng từ vị trí đã cung cấp và một lệnh khác để tìm những khách hàng phổ biến của Primus và Secundus Bank. Khối lượng công việc sẽ do Primus Bank tác giả và sẽ được đóng gói dưới dạng 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 tải công việc. Primus Bank sẽ sử dụng nhóm thông tin nhận dạng khối lượng công việc để cho phép các tải công việc truy cập vào dữ liệu khách hàng dựa trên đặc điểm của người 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í của khối lượng công việc.
- Bước 5: Khi chạy khối lượng công việc, khối lượng công việc sẽ yêu cầu quyền truy cập vào tài nguyên trên đám mây của các cộng tác viên dữ liệu (Primus Bank và Ngân hàng Secundus) bằng cách cung cấp mã thông báo dịch vụ Người xác minh chứng thực cùng với khối lượng công việc và xác nhận quyền sở hữu về môi trường. Nếu các yêu cầu 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 nhận dạng tải công việc của Primus và Secundus Banks, thì mã này sẽ trả về mã truy cập tài khoản dịch vụ có quyền truy cập vào tài nguyên tương ứng trên đám mây. Chỉ khối lượng công việc đang 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, trong đó tính số khách hàng của Primus Bank ở những địa điểm 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 kiêm tác giả của khối lượng công việc, cung cấp danh sách khách hàng được mã hoá cho khối lượng công việc đang chạy trong Không gian bảo mật. Secundus Bank là đơn vị điều hành khối lượng công việc và sẽ chạy khối lượng công việc trong 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 phổ biến của Primus và Secundus Banks. Đối với khối lượng công việc này, Primus Bank và Secundus Bank đều sẽ là những đối tác cộng tác về dữ liệu. Họ 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. Secundus Bank sẽ trở lại là nhà điều hành tải công việc. Khối lượng công việc này cũng sẽ được Secundus Bank uỷ quyền vì khối lượng công việc này cần phải truy cập vào danh sách khách hàng đã mã hoá của Secundus Bank cũng như để tìm những khách hàng thông thường. Trong trường hợp này, Secundus Bank sẽ uỷ quyền cho 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 đặc điểm về người 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í thực hiện khối lượng công việc, như đã đề cập trong bước 4 đối với ngân hàng Primus.
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 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
- Đảm bảo bạn đã thiết lập các biến môi trường bắt buộc của dự án như 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 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ã này với tê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 dự án của bạn.
- Bật Protected Computing API và các API sau đây 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 biến cho tên tài nguyên như đề cập dưới đây bằng lệnh này. Bạn có thể ghi đè tên tài nguyên bằng cách sử dụ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 hiện có trên đám mây 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 mới trên đám mây 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 Workload Identity (WIP) của Primus Bank giúp xác thực các đơn khiếu nại. |
| Nhà cung cấp Nhóm Workload Identity của Primus Bank có điều kiện uỷ quyền để dùng cho những mã thông báo do Dịch vụ người xác minh chứng thực ký. |
| Tài khoản dịch vụ của Primus Bank mà |
| Khoá KMS dùng để mã hoá dữ liệu lưu trữ trong |
| Móc khoá KMS sẽ 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 tải công việc sẽ được đẩy. |
- Bạn có thể đặt các biến sau bằng tên tài nguyên hiện có trên đám mây 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, thì 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 mới trên đám mây sẽ được tạo như sau:
| Bộ chứa lưu trữ tệp dữ liệu khách hàng của Secundus Bank |
| Nhóm Workload Identity (WIP) của Ngân hàng Secundus giúp xác thực các yêu cầu bồi thường. |
| Nhà cung cấp Nhóm Workload Identity của Ngân hàng Secundus có điều kiện uỷ quyền để dùng cho các mã thông báo do Dịch vụ người xác minh chứng thực ký. |
| Tài khoản dịch vụ của Ngân hàng Secundus mà |
| Khoá KMS dùng để mã hoá dữ liệu lưu trữ trong |
| Khoá KMS được dùng để tạo khoá mã hoá |
| Bộ chứa lưu trữ kết quả khối lượng công việc. |
| Tên hình ảnh của vùng chứa tải công việc. |
| Thẻ của hình ảnh vùng chứa tải 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. |
- Dưới đây là 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:
primus_customer_list.csv
: Tệp chứa dữ liệu khách hàng của Primus Bank. Đâ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 một số quyền nhất định cho hai dự án sau:
- Đối với
$PRIMUS_PROJECT_ID
, bạn sẽ cần có 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 nhóm công việc IAM. - Đố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 nhóm công việc 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 các 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
Cần có các tài nguyên đám mây sau đây cho Ngân hàng Primus. Chạy tập lệnh này để thiết lập tài nguyên cho Primus Bank:
- Bộ chứa Cloud Storage (
$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à phương thức khoá ($PRIMUS_ENC_KEYRING
) trong KMS để mã hoá tệp dữ liệu khách hàng của Primus Bank. - Nhóm Workload Identity (
$PRIMUS_WORKLOAD_IDENTITY_POOL
) để xác thực thông báo xác nhận quyền sở hữu dựa trên điều kiện về thuộc tính được định cấu hình theo nhà cung cấp. - Tài khoản dịch vụ (
$PRIMUS_SERVICE_ACCOUNT
) đính kèm với nhóm nhận dạng tải công việc ($PRIMUS_WORKLOAD_IDENTITY_POOL
) nêu trên 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 trong bộ chứa 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 nhận dạng tải công việc (sử dụngroles/iam.workloadIdentityUser
).
./setup_primus_bank_resources.sh
Thiết lập tài nguyên đám mây cho Ngân hàng Secundus
Đối với Ngân hàng Secundus, các tài nguyên đám mây sau đây là bắt buộc. Chạy tập lệnh này để thiết lập tài nguyên của Ngân hàng Secundus. Theo các bước dưới đây, chúng tôi sẽ tạo các tài nguyên được đề cập:
- Bộ chứa Cloud Storage (
$SECUNDUS_INPUT_STORAGE_BUCKET
) để lưu trữ tệp dữ liệu khách hàng đã mã hoá của Secundus Bank. - Khoá mã hoá (
$SECUNDUS_ENC_KEY
) và phương thức khoá ($SECUNDUS_ENC_KEYRING
) trong KMS để mã hoá tệp dữ liệu của Secundus Bank. - Nhóm Workload Identity (
$SECUNDUS_WORKLOAD_IDENTITY_POOL
) để xác thực thông báo xác nhận quyền sở hữu dựa trên điều kiện về thuộc tính được định cấu hình theo nhà cung cấp. - Tài khoản dịch vụ (
$SECUNDUS_SERVICE_ACCOUNT
) đính kèm với nhóm nhận dạng tải công việc ($SECUNDUS_WORKLOAD_IDENTITY_POOL
) nêu trên 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 trong bộ chứa 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 nhận dạng tải công việc (sử dụng vai tròroles/iam.workloadIdentityUser
). - Bộ chứa Cloud Storage (
$SECUNDUS_RESULT_STORAGE_BUCKET
) để lưu trữ kết quả thực thi tải 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ụ cho tải 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 cần thiết như đề cập dưới đây. Chạy tập lệnh sau để tạo tài khoản dịch vụ tải công việc trong dự án Secundus Bank. 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ụ của tải 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ụ tải 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 tài khoản dịch vụ tải công việc. Việc này cho phép môi trường Không gian bảo mật ghi nhật ký vào Cloud Logging 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 trong bộ chứa$PRIMUS_INPUT_STORAGE_BUCKET
trên đám mây.objectViewer
để đọc dữ liệu trong bộ chứa$SECUNDUS_INPUT_STORAGE_BUCKET
trên đám mây.objectAdmin
để ghi kết quả của khối lượng công việc vào bộ chứa$SECUNDUS_RESULT_STORAGE_BUCKET
trên đám mây.
./create_workload_service_account.sh
Tạo khối lượng công việc
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. Khối lượng công việc là một ứng dụng GoLang đơn giản:
- Đếm khách hàng ở một vị trí địa lý cụ thể.
- Tìm các khách hàng phổ biến của Primus và Secundus Bank trong danh sách khách hàng được lưu trữ trong bộ chứa lưu trữ trên đám mây tương ứng của họ.
Chạy tập lệnh sau để tạo khối lượng công việc đang thực hiện các bước sau đây:
- Tạo Artifact Registry (
$PRIMUS_ARTIFACT_REPOSITORY
) do ngân hàng Primus sở hữu, nơi sẽ xuất bản khối lượng công việc. - Tạo mã và cập nhật mã đó bằng các tên tài nguyên bắt buộc. Bạn có thể tìm thấy mã tải công việc dùng trong lớp học lập trình này tại đây.
- Tạo bản dựng 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.
- Xuất bản hình ảnh Docker lên Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY
) do Primus Bank sở hữu. - Cấp quyền đọc Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY
) cho tài khoản dịch vụ$WORKLOAD_SERVICE_ACCOUNT
.
./create_workload.sh
4. Cho phép và chạy(các) khối lượng công việc
Cho phép tải công việc
Primus Bank muốn cho phép tải công việc truy cập vào dữ liệu khách hàng dựa trên thuộc tính của những tài nguyên sau:
- Nội dung: Mã đã được xác minh
- Vị trí: Một môi trường an toàn
- Ai: Toán tử đáng tin cậy
Primus sử dụng Liên kết danh tính Workload để 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 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ế các danh tính có thể xác thực bằng nhóm nhận dạng tải công việc (WIP). Bạn có thể thêm Dịch vụ người xác minh chứng thực vào WIP làm nhà cung cấp nhóm danh tính tải công việc để trình bày hoạt động đo lường và thực thi chính sách này.
Nhóm Workload Identity đã đượ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 nhận dạng tải công việc OIDC mới. --attribute-condition
được chỉ định cho phép truy cập vào vùng chứa khối lượng công việc. Chương trình 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 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 đủ.
- Tên: 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, Ngân hàng Secundus muốn cho phép 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: Khối lượng công việc.
- Địa điểm: Môi trường không gian bảo mật.
- Người liên hệ: 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 có cần cấp quyền truy cập hay không. Họ kiểm soát kho lưu trữ từ xa, nên họ có thể chắc chắn chỉ gắn thẻ cho những hình ảnh không làm rò rỉ dữ liệu của họ.
Để so sánh, 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
. Không giống như image_reference
mà Primus Bank có thể thay đổi để trỏ đến một hình ảnh khác, Primus Bank không được 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 cho tải công việc, chúng ta sẽ thu thập image_digest
cho hình ảnh vùng chứa tải công việc. Hình ảnh này sẽ được dùng trong các điều kiện thuộc tính của trình cung cấp.
export WORKLOAD_IMAGE_DIGEST=$(docker images ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG --no-trunc --quiet)
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 Không gian bảo mật. Khối lượng công việc này sẽ lấy 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 Primus Bank và Secundus Bank tương ứng.
Các đối số TEE bắt buộc được truyền bằng cờ siêu dữ liệu. Đối số cho vùng chứa tải công việc được truyền bằng cách sử dụng "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 lần 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ố khách hàng của Primus Bank từ vị trí đã cung cấp trong đối số vùng chứa tải 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 "count-location
" và kết quả sẽ được lưu trữ tại $SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
.
gcloud config set project $SECUNDUS_PROJECT_ID
gcloud compute instances create first-workload-cvm \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=TERMINATE \
--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 để khối lượng công việc hoàn tất quá trình thực thi và kết quả sẽ có trên bộ chứa 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ả sẽ là 3
, vì đây là số người ở 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 đợt thực hiện tải công việc thứ hai, chúng ta sẽ tìm các khách hàng chung của Primus Bank và Secundus Bank. Như minh hoạ bên dưới, khối lượng công việc thứ hai sẽ thực thi "list-common-customers
" và kết quả sẽ được lưu trữ tại $SECUNDUS_RESULT_STORAGE_BUCKET/list-common-count
.
gcloud config set project $SECUNDUS_PROJECT_ID
gcloud compute instances create second-workload-cvm \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=TERMINATE \
--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 để khối lượng công việc hoàn tất quá trình thực thi và kết quả sẽ có trên bộ chứa 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ẽ như sau vì đây là những khách hàng phổ biến 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 Ngân hàng Secundus Bank truy cập vào dữ liệu của họ đã hết hạn. Vì vậy, Primus Bank sẽ cập nhật điều kiện về thuộc tính để cho phép sử dụng máy ảo bằng tài khoản dịch vụ của đối tác mới là Tertius Bank.
Primus Bank sửa đổi nhà cung cấp Nhóm Workload Identity
Trong $PRIMUS_PROJECT_ID
, hãy cập nhật điều kiện thuộc tính để nhà cung cấp danh tính Người xác minh chứng thực có thể cho phép tải công việc ở 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 này, Primus Bank sẽ sử dụng dữ liệu này để cập nhật điều kiện thuộc tính của nhà cung cấp nhóm nhận dạng cho tải công việc. Primus Bank sẽ không ngừng uỷ quyền các tài khoản dịch vụ cho tải công việc của Secundus Bank. Giờ đây, nền tảng này sẽ cho phép các tài khoản dịch vụ tải 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 (OpenID Connect) trong nhóm nhận dạng của khối lượng công việc. Ở đâ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 Secundus Bank. Giờ đây, tài khoản dịch vụ tải công việc của 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, nhưng 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à thực thể máy ảo
- Đặ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/seattle-result
- Xoá thực thể máy ảo bảo mật.
gcloud compute instances delete second-workload-cvm
Chạy khối lượng công việc trái phép:
gcloud compute instances create second-workload-cvm \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=TERMINATE \
--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 thông báo lỗi (The given credential is rejected by the attribute condition
).
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
Tương tự như vậy, nếu Primus Bank 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 Secundus Bank sang một nhóm mà Primus Bank 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 hình ảnh đã được uỷ quyền trong Nhóm Workload Identity của Ngân hàng Secundus.
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 sẽ bị xoá:
- Nhập bộ chứa bộ nhớ trên đám mây của Primus Bank (
$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ý giả của Ngân hàng Primus lưu giữ chữ ký hình ảnh (
$PRIMUS_COSIGN_REPOSITORY
). - Nhóm danh tính cho tải công việc của Primus Bank(
$PRIMUS_WORKLOAD_IDENTITY_POOL
). - Tài khoản dịch vụ tải công việc của Ngân hàng Secundus (
$WORKLOAD_SERVICE_ACCOUNT
). - Nhập bộ chứa bộ nhớ trên đám mây của Secundus Bank (
$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ý giả của Ngân hàng Secundus, nơi lưu giữ chữ ký hình ảnh (
$SECUNDUS_COSIGN_REPOSITORY
). - Nhóm nhận dạng cho tải công việc của Ngân hàng Secundus(
$SECUNDUS_WORKLOAD_IDENTITY_POOL
). - Tài khoản dịch vụ tải công việc của Ngân hàng Secundus (
$WORKLOAD_SERVICE_ACCOUNT
). - Các thực thể điện toán khối lượng công việc (workload).
- Bộ chứa lưu trữ kết quả của Secundus Bank (
$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 xem xét xoá dự án của bạn.
- Truy cập vào Bảng điều khiển Cloud Platform.
- Chọn dự án 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!
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í mật của dữ liệu đó bằng Không gian bí mật.
Tiếp theo là gì?
Hãy xem một số lớp học lập trình tương tự...
- 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 cơ chế tính toán của nhiều bên và không gian bảo mật
- Phân tích dữ liệu bí mật bằng Không gian mật
Tài liệu đọc thêm
- Bạn cảm thấy bị cô lập? Điện toán mật để giải cứu
- Điện toán bảo mật tại GCP
- Không gian bí mật: Tương lai của tính năng cộng tác bảo đảm quyền riêng tư
- Cách Google và Intel giúp giải pháp Điện toán bảo mật trở nên an toàn hơn
- Quyền riêng tư và tiến trình – Tăng cường bảo mật bằng giải pháp điện toán bảo mật của Google Cloud