1. Tổng quan
Không gian mật mang đến một môi trường bảo mật để nhiều bên cộng tác. Lớp học lập trình này minh hoạ cách sử dụng Không gian mật để bảo vệ tài sản trí tuệ nhạy cảm, chẳng hạn như các mô hình học máy.
Trong lớp học lập trình này, bạn sẽ sử dụng Không gian bảo mật để cho phép một công ty chia sẻ một cách an toàn mô hình học máy thuộc quyền sở hữu riêng của công ty đó với một công ty khác muốn sử dụng mô hình này. Cụ thể, Company Primus có một mô hình học máy chỉ được phát hành cho một khối lượng công việc chạy trong Không gian bảo mật, giúp Primus duy trì quyền kiểm soát hoàn toàn đối với tài sản trí tuệ của mình. Công ty Secundus sẽ là người điều hành khối lượng công việc và sẽ chạy khối lượng công việc học máy trong Không gian bảo mật. Secundus sẽ tải mô hình này và chạy dự đoán bằng cách sử dụng dữ liệu mẫu do Secundus sở hữu.
Trong ví dụ này, Primus là tác giả của tải công việc, đồng thời là tác giả của mã tải công việc, đồng thời là một cộng tác viên muốn bảo vệ tài sản trí tuệ của mình khỏi nhà điều hành tải công việc không đáng tin cậy là Secundus. Secundus là đơn vị vận hành khối lượng công việc của khối lượng công việc học máy.
Kiến thức bạn sẽ học được
- Cách định cấu hình môi trường mà một bên có thể chia sẻ mô hình học máy độc quyền của mình với một bên khác mà không mất quyền kiểm soát đối với tài sản trí tuệ của bên đó.
Bạn cần có
- Một dự án trên Google Cloud Platform
- 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ề Tài khoản dịch vụ, Liên kết thông tin nhận dạng tải công việc và các điều kiện thuộc tính.
Các vai trò liên quan đến việc thiết lập Không gian bảo mật
Trong lớp học lập trình này, Company Primus sẽ là chủ sở hữu tài nguyên và tác giả của tải công việc, chịu trách nhiệm về:
- Thiết lập tài nguyên đám mây bắt buộc bằng mô hình học máy
- Viết mã khối lượng công việc
- Xuất bản hình ảnh khối lượng công việc
- Định cấu hình chính sách Nhóm Workload Identity để bảo vệ mô hình học máy khỏi một toán tử không đáng tin cậy
Secundus Company sẽ là nhà điều hành và chịu trách nhiệm:
- Thiết lập tài nguyên đám mây cần thiết để lưu trữ hình ảnh mẫu được sử dụng theo khối lượng công việc và kết quả
- Chạy khối lượng công việc học máy trong Không gian bảo mật bằng mô hình do Primus cung cấp
Cách hoạt động của Không gian bí mật
Khi bạn chạy khối lượng công việc trong Không gian bảo mật, quá trình sau đây sẽ diễn ra bằng cách sử dụng các tài nguyên đã định cấu hình:
- Khối lượng công việc yêu cầu một mã truy cập chung của Google cho
$PRIMUS_SERVICEACCOUNT
trong Nhóm Workload Identity. Dịch vụ này cung cấp mã 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à các tuyên bố về môi trường. - Nếu các tuyên bố đo lường khối lượng công việc trong mã thông báo dịch vụ Trình xác minh chứng thực khớp với điều kiện thuộc tính trong WIP, thì mã này sẽ trả về mã truy cập cho
$PRIMUS_SERVICEACCOUNT.
- Khối lượng công việc này sử dụng mã truy cập tài khoản dịch vụ liên kết với
$PRIMUS_SERVICEACCOUNT
để truy cập vào mô hình học máy lưu trữ trong bộ chứa$PRIMUS_INPUT_STORAGE_BUCKET
. - Khối lượng công việc thực hiện một thao tác trên dữ liệu do Secundus sở hữu và khối lượng công việc đó được Secundus vận hành cũng như chạy trong dự án của mình.
- Khối lượng công việc này sử dụng tài khoản dịch vụ
$WORKLOAD_SERVICEACCOUNT
để ghi kết quả của toán tử đó vào bộ chứa$SECUNDUS_RESULT_STORAGE_BUCKET
.
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/ml_model_protection/scripts
- Đả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 thiết lập 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 điều 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>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus>
- 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 \
cloudresourcemanager.googleapis.com \
cloudshell.googleapis.com \
container.googleapis.com \
containerregistry.googleapis.com \
iam.googleapis.com \
confidentialcomputing.googleapis.com
- Gán giá trị cho biến đối với tên tài nguyên được chỉ định ở trên bằng lệnh sau đây. Các biến này cho phép bạn tuỳ chỉnh tên tài nguyên khi cần thiết, đồng thời sử dụng tài nguyên hiện có (nếu đã tạo). (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 bằng tên đó. Sau đây là các biến được hỗ trợ cho tên tài nguyên:
| Bộ chứa lưu trữ mô hình học máy của Primus. |
| Nhóm nhận dạng khối lượng công việc (WIP) của Primus giúp xác thực các thông báo xác nhận quyền sở hữu. |
| Nhà cung cấp nhóm nhận dạng tải công việc của Primus 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ụ Người xác minh chứng thực ký. |
| Tài khoản dịch vụ Primus mà |
| 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 này, tên tài nguyên trên đám mây sẽ được tạo từ tên dự án và một tài nguyên mới trên đám mây sẽ được tạo bằng tên đó. Sau đây là các biến được hỗ trợ cho tên tài nguyên:
| Bộ chứa lưu trữ hình ảnh mẫu mà Secundus muốn phân loại bằng mô hình do Primus cung cấp. |
| Bộ chứa lưu trữ kết quả của khối lượng công việc. |
| Tên của hình ảnh 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. |
- Bạn sẽ cần một số quyền nhất định đối với 2 dự án này và có thể tham khảo hướng dẫn này để biết cách cấp các vai trò IAM qua bảng điều khiển của GCP:
- Đối với
$PRIMUS_PROJECT_ID
, bạn sẽ cần có Quản trị viên bộ nhớ, Quản trị viên sổ đăng ký 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 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 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 của Công ty Primus
Trong bước này, bạn sẽ thiết lập các tài nguyên đám mây cần thiết cho Primus. Chạy tập lệnh sau để thiết lập tài nguyên cho Primus. Các tài nguyên sau sẽ được tạo trong quá trình thực thi tập lệnh:
- Bộ chứa Cloud Storage (
$PRIMUS_INPUT_STORAGE_BUCKET
) để lưu trữ mô hình học máy của Primus. - Nhóm Workload Identity (
$PRIMUS_WORKLOAD_IDENTITY_POOL
) để xác thực các thông báo xác nhận quyền sở hữu dựa trên các điều kiện về thuộc tính được thiết lập trong nhà cung cấp. - Tài khoản dịch vụ (
$PRIMUS_SERVICEACCOUNT
) đi 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 IAM để đọ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ụ này với nhóm nhận dạng của tải công việc (sử dụng vai tròroles/iam.workloadIdentityUser
).
Trong quá trình thiết lập tài nguyên đám mây này, chúng tôi sẽ sử dụng mô hình TensorFlow. Chúng ta có thể lưu toàn bộ mô hình, bao gồm cấu trúc, trọng số và cấu hình huấn luyện của mô hình trong một tệp lưu trữ ZIP. Để phục vụ mục đích của lớp học lập trình này, chúng ta sẽ sử dụng mô hình MobileNet V1 được huấn luyện trên tập dữ liệu ImageNet tại đây.
./setup_primus_company_resources.sh
Tập lệnh đã đề cập ở trên sẽ thiết lập tài nguyên đám mây, bây giờ, chúng ta sẽ tải xuống và xuất bản mô hình lên bộ chứa Cloud Storage do tập lệnh tạo.
- Tải mô hình huấn luyện trước xuống tại đây.
- Sau khi tải xuống, hãy đổi tên tệp tar đã tải xuống thành model.tar.gz.
- Xuất bản tệp model.tar.gz lên bộ chứa Cloud Storage bằng lệnh sau từ thư mục chứa tệp model.tar.gz.
gsutil cp model.tar.gz gs://${PRIMUS_INPUT_STORAGE_BUCKET}/
Thiết lập tài nguyên của Công ty Secundus
Trong bước này, bạn sẽ thiết lập các tài nguyên đám mây cần thiết cho Secundus. Chạy tập lệnh sau để thiết lập tài nguyên cho Secundus. Trong các bước này, các tài nguyên sau sẽ được tạo:
- Bộ chứa Cloud Storage (
$SECUNDUS_INPUT_STORAGE_BUCKET
) để lưu trữ hình ảnh mẫu dùng để chạy các phép dự đoán của Secundus. - 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 học máy của Secundus.
Một số hình ảnh mẫu có tại đây cho lớp học lập trình này.
./setup_secundus_company_resources.sh
3. Tạo khối lượng công việc
Tạo tài khoản dịch vụ 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. 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. Tài khoản dịch vụ này sẽ được máy ảo chạy khối lượng công việc học máy sử dụng.
Tài khoản dịch vụ của tải công việc này ($WORKLOAD_SERVICEACCOUNT
) sẽ có các vai trò sau:
confidentialcomputing.workloadUser
để nhận mã thông báo chứng thựclogging.logWriter
để ghi nhật ký vào Cloud Logging.objectViewer
để đọc dữ liệu trong bộ chứa$SECUNDUS_INPUT_STORAGE_BUCKET
trên đám mây.objectUser
để 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 tải công việc. Khối lượng công việc sẽ do Primus tác giả. Khối lượng công việc sử dụng trong lớp học lập trình này là mã Python học máy truy cập mô hình ML lưu trữ trong bộ chứa lưu trữ của Primus và chạy dự đoán với hình ảnh mẫu được lưu trữ trong bộ chứa lưu trữ.
Chỉ những khối lượng công việc đáp ứng các điều kiện thuộc tính bắt buộc mới có thể sử dụng mô hình học máy được lưu trữ trong bộ chứa lưu trữ của Primus. Các điều kiện thuộc tính này được mô tả chi tiết hơn trong phần tiếp theo về việc uỷ quyền khối lượng công việc.
Sau đây là phương thức run_inference() của khối lượng công việc sẽ được tạo và sử dụng trong lớp học lập trình này. Bạn có thể tìm thấy toàn bộ mã tải công việc tại đây.
def run_inference(image_path, model):
try:
# Read and preprocess the image
image = tf.image.decode_image(tf.io.read_file(image_path), channels=3)
image = tf.image.resize(image, (128, 128))
image = tf.image.convert_image_dtype(image, tf.float32)
image = tf.expand_dims(image, axis=0)
# Get predictions from the model
predictions = model(image)
predicted_class = np.argmax(predictions)
top_k = 5
top_indices = np.argsort(predictions[0])[-top_k:][::-1]
# Convert top_indices to a TensorFlow tensor
top_indices_tensor = tf.convert_to_tensor(top_indices, dtype=tf.int32)
# Use TensorFlow tensor for indexing
top_scores = tf.gather(predictions[0], top_indices_tensor)
return {
"predicted_class": int(predicted_class),
"top_k_predictions": [
{"class_index": int(idx), "score": float(score)}
for idx, score in zip(top_indices, top_scores)
],
}
except Exception as e:
return {"error": str(e)}
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_REGISTRY
) do Primus sở hữu. - Cập nhật mã của khối lượng công việc bằng các tên tài nguyên cần thiết.
- Xây dựng khối lượng công việc ML và tạo Dockerfile để xây dựng hình ảnh Docker của mã khối lượng công việc. Đây là Dockerfile dùng cho lớp học lập trình này.
- Tạo và xuất bản hình ảnh Docker lên Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY
) do Primus sở hữu. - Cấp quyền đọc cho
$WORKLOAD_SERVICEACCOUNT
đối với$PRIMUS_ARTIFACT_REGISTRY
. Điều này là cần thiết để vùng chứa tải công việc lấy hình ảnh Docker của tải công việc từ Artifact Registry.
./create_workload.sh
Ngoài ra, bạn có thể mã hoá khối lượng công việc để đảm bảo rằng khối lượng công việc đang tải phiên bản dự kiến của mô hình học máy bằng cách kiểm tra hàm băm hoặc chữ ký của mô hình trước khi sử dụng. Ưu điểm của các bước kiểm tra bổ sung như vậy là đảm bảo tính toàn vẹn của mô hình học máy. Do đó, người vận hành tải công việc cũng cần phải cập nhật hình ảnh tải công việc hoặc các thông số của khối lượng công việc khi khối lượng công việc dự kiến sẽ sử dụng các phiên bản khác nhau của mô hình ML.
4. Cho phép và chạy khối lượng công việc
Cho phép tải công việc
Primus muốn cho phép tải công việc truy cập vào mô hình học máy 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. Bây giờ, Primus sẽ tạo một nhà cung cấp nhóm nhận dạng cho khối lượng 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ụ Secundus
$WORKLOAD_SERVICE_ACCOUNT
.
export WORKLOAD_IMAGE_DIGEST=$(docker images –digests ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}| awk 'NR>1{ print $3 }')
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_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_SERVICEACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
Chạy khối lượng công việc
Trong bước này, chúng tôi sẽ chạy khối lượng công việc trong máy ảo Không gian bảo mật. 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
.
gcloud config set project $SECUNDUS_PROJECT_ID
gcloud compute instances create ${WORKLOAD_VM} \
--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_SERVICEACCOUNT}@${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}
Xem kết quả
Sau khi hoàn thành khối lượng công việc, kết quả của khối lượng công việc học máy sẽ được xuất bản lên $SECUNDUS_RESULT_STORAGE_BUCKET
.
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result
Sau đây là một số ví dụ về kết quả suy luận trên hình ảnh mẫu:
Image: sample_image_1.jpeg, Response: {'predicted_class': 531, 'top_k_predictions': [{'class_index': 531, 'score': 12.08437442779541}, {'class_index': 812, 'score': 10.269512176513672}, {'class_index': 557, 'score': 9.202644348144531}, {'class_index': 782, 'score': 9.08737564086914}, {'class_index': 828, 'score': 8.912498474121094}]}
Image: sample_image_2.jpeg, Response: {'predicted_class': 905, 'top_k_predictions': [{'class_index': 905, 'score': 9.53619384765625}, {'class_index': 557, 'score': 7.928380966186523}, {'class_index': 783, 'score': 7.70129919052124}, {'class_index': 531, 'score': 7.611623287200928}, {'class_index': 906, 'score': 7.021416187286377}]}
Image: sample_image_3.jpeg, Response: {'predicted_class': 905, 'top_k_predictions': [{'class_index': 905, 'score': 6.09878396987915}, {'class_index': 447, 'score': 5.992854118347168}, {'class_index': 444, 'score': 5.9582319259643555}, {'class_index': 816, 'score': 5.502010345458984}, {'class_index': 796, 'score': 5.450454235076904}]}
Đối với mỗi hình ảnh mẫu trong bộ chứa lưu trữ Secundus, bạn sẽ thấy một mục nhập trong kết quả. Mục này sẽ bao gồm hai thông tin chính:
- Chỉ mục của dự đoán lớp:Đây là một chỉ mục dạng số đại diện cho lớp mà mô hình dự đoán hình ảnh.
- Top_k_predictions: Mục này cung cấp tối đa k dự đoán cho hình ảnh, được xếp hạng từ nhiều nhất đến ít có khả năng nhất. Trong lớp học lập trình này, giá trị của k được thiết lập thành 5, nhưng bạn có thể điều chỉnh giá trị này trong mã tải công việc để nhận được nhiều hoặc ít thông tin dự đoán hơn.
Để chuyển chỉ mục lớp sang tên lớp mà con người có thể đọc được, hãy tham khảo danh sách các nhãn có tại đây. Ví dụ: nếu bạn thấy chỉ mục lớp là 2, thì chỉ mục này tương ứng với nhãn lớp "tench" trong danh sách nhãn.
Trong lớp học lập trình này, chúng ta đã chứng minh rằng một mô hình do Primus sở hữu chỉ được phát hành cho khối lượng công việc đang chạy trong TEE. Secundus chạy khối lượng công việc ML trong TEE và khối lượng công việc này có thể sử dụng mô hình do Primus sở hữu, trong khi Primus vẫn có toàn quyền kiểm soát mô hình này.
Chạy khối lượng công việc trái phép
Secundus thay đổi hình ảnh của khối lượng công việc bằng cách kéo một hình ảnh khối lượng công việc khác từ kho lưu trữ cấu phần phần mềm riêng mà Primus chưa cho phép. Nhóm Workload Identity của Primus chỉ cho phép ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG
hình ảnh Workload.
Chạy lại khối lượng công việc
Khi Secundus cố gắng chạy khối lượng công việc ban đầu bằng hình ảnh tải công việc mới này, nó 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.
Vui lòng đảm bảo rằng có một hình ảnh Docker mới được xuất bản trong sổ đăng ký cấu phần phần mềm của Secundus (dưới dạng us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/custom-image/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}
) và tài khoản dịch vụ của khối lượng công việc ($WORKLOAD_SERVICEACCOUNT
) đã cấp cho trình đọc sổ đăng ký cấu phần phần mềm quyền đọc hình ảnh khối lượng công việc mới này. Việc này nhằm đảm bảo rằng khối lượng công việc không thoát trước khi chính sách WIP của Primus từ chối mã thông báo được trình bày theo 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/result
- Xoá thực thể máy ảo bảo mật.
gcloud compute instances delete ${WORKLOAD_VM}
Chạy khối lượng công việc trái phép:
gcloud compute instances create ${WORKLOAD_VM} \
--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=us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/custom-image/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}
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/result
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á:
- Bộ chứa lưu trữ đầu vào của Primus (
$PRIMUS_INPUT_STORAGE_BUCKET)
. - Tài khoản dịch vụ Primus (
$PRIMUS_SERVICEACCOUNT
). - Kho lưu trữ cấu phần phần mềm của Primus (
$PRIMUS_ARTIFACT_REPOSITORY
). - Nhóm danh tính cho khối lượng công việc Primus (
$PRIMUS_WORKLOAD_IDENTITY_POOL
). - Tài khoản dịch vụ tải công việc của Secundus (
$WORKLOAD_SERVICEACCOUNT
). - Bộ chứa lưu trữ đầu vào của Secundus (
$SECUNDUS_INPUT_STORAGE_BUCKET)
. - 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 (
$SECUNDUS_RESULT_STORAGE_BUCKET
).
$ ./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
Tiếp theo là gì?
Hãy xem một số lớp học lập trình tương tự...