Thông tin về lớp học lập trình này
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ó
- 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ả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)
- 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 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.
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>
- Bật tính năng Thanh toán cho các dự án của bạn.
- Bật API điện toán bảo mật 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 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:
| 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 thông báo xác nhận. |
| 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ý. |
| 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 |
| Khoá chuỗi 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 đẩ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:
| Bộ chứa lưu trữ tệp dữ liệu khách hàng của Ngân hàng Secundus |
| 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. |
| 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ý. |
| Tài khoản dịch vụ của Ngân hàng Secundus mà |
| Khoá KMS dùng để mã hoá dữ liệu được lưu trữ trong |
| Khoá truy cập KMS 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 vùng chứa khối lượng công việc. |
| 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 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ụ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 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.
- Đặ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ẽ 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>
- 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
- Đặ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á 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...
- 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 tính toán đa 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 giải quyết vấn đề này
- Tính năng điện toán bảo mật trên 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 tính năng Điện toán bảo mật
- Quyền riêng tư so với tiến bộ – Nâng cao bảo mật bằng tính năng Điện toán bảo mật của Google Cloud