1. Tổng quan
Lớp học lập trình này dựa trên lớp học lập trình về Không gian bảo mật. Hỗ trợ hình ảnh vùng chứa đã ký cho phép xác thực vùng chứa bằng khoá công khai đã chứng thực thay vì chỉ định hàm băm hình ảnh trong chính sách Workload Identity Pool (WIP).
Những thay đổi đối với tính năng hỗ trợ hình ảnh vùng chứa đã ký trong Không gian bảo mật:
Cải thiện khả năng hữu dụng: Với việc ra mắt tính năng hình ảnh vùng chứa đã ký, giờ đây, chúng ta có thể chuyển từ phương pháp tóm tắt hình ảnh tải trọng sang phương pháp chữ ký vùng chứa cho cộng tác viên/người kiểm tra uỷ quyền hình ảnh.
- Khi sử dụng trực tiếp chuỗi đại diện hình ảnh, chủ sở hữu tài nguyên phải cập nhật chính sách của họ bằng chuỗi đại diện hình ảnh mỗi khi uỷ quyền cho một hình ảnh mới. Bằng cách sử dụng chữ ký hình ảnh, chính sách này chứa vân tay khoá công khai, trong đó khoá riêng tư tương ứng thuộc sở hữu của cộng tác viên/người kiểm tra và được dùng để ký các hình ảnh đã kiểm tra.
- Đối với một số mô hình bảo mật, việc tham chiếu khoá ký hình ảnh đáng tin cậy sẽ thuận tiện hơn so với việc cập nhật danh sách các giá trị chuỗi đại diện hình ảnh mới.
Không có hồi quy bảo mật: Phương pháp chữ ký vùng chứa này sẽ không gây ra bất kỳ hồi quy bảo mật nào so với phương pháp chuỗi đại diện hình ảnh trước đó vì các ranh giới tin cậy vẫn giữ nguyên. Trong phương pháp chữ ký vùng chứa, chủ sở hữu tài nguyên sẽ uỷ quyền cho khoá xác minh bằng cách chỉ định vân tay khoá công khai đáng tin cậy trong chính sách WIP. Việc kiểm tra uỷ quyền do Dịch vụ xác minh chứng thực và WIP thực hiện; Dịch vụ xác minh chứng thực xác minh chữ ký được liên kết với khối lượng công việc đang chạy và chính sách WIP kiểm tra để đảm bảo khoá công khai do dịch vụ xác nhận là được uỷ quyền theo chính sách.
Mức độ bảo mật cao: Việc sử dụng chữ ký hình ảnh vùng chứa cho phép người dùng uỷ quyền một phần niềm tin cho chữ ký hình ảnh. Bằng cách chỉ định vân tay khoá công khai của chữ ký đáng tin cậy trong chính sách chứng thực, chủ sở hữu tài nguyên sẽ cho phép chữ ký đó chứng thực những hình ảnh vùng chứa đáp ứng chính sách. Dịch vụ xác minh chứng thực xác minh chữ ký được liên kết với khối lượng công việc đang chạy và chính sách sẽ kiểm tra để đảm bảo khoá công khai đã tạo chữ ký được chính sách cho phép. Thông qua việc này, lớp gián tiếp bổ sung mà tính năng ký hình ảnh cung cấp sẽ duy trì khả năng bảo mật mạnh mẽ của Không gian bảo mật.
Điểm khác biệt duy nhất giữa các phương pháp này là phương pháp sau sử dụng thêm một lớp gián tiếp, trong đó hình ảnh tải trọng được uỷ quyền bằng khoá ký. Điều này không gây ra bất kỳ lỗ hổng bảo mật mới nào vì các ranh giới tin cậy vẫn giữ nguyên.
Kiến thức bạn sẽ học được
Trong lớp học lập trình này, bạn sẽ tìm hiểu cách sử dụng chữ ký hình ảnh vùng chứa để cho phép truy cập vào các tài nguyên được bảo vệ:
- Cách ký hình ảnh vùng chứa đã kiểm tra bằng
cosign
- Cách tải chữ ký hình ảnh vùng chứa lên sổ đăng ký OCI để khám phá và lưu trữ chữ ký
- Cách định cấu hình các tài nguyên đám mây cần thiết để chạy Không gian bảo mật
- Cách chạy khối lượng công việc trong Không gian bảo mật bằng tính năng hỗ trợ hình ảnh vùng chứa đã ký
Lớp học lập trình này hướng dẫn bạn cách sử dụng Không gian bảo mật để chứng thực từ xa một hình ảnh vùng chứa do khoá đáng tin cậy ký và chạy trên Google Compute Engine.
Bạn cần có
- Hoàn thành lớp học lập trình về Không gian bảo mật
- Một dự án trên Google Cloud Platform
- Trình duyệt, chẳng hạn như Chrome hoặc Firefox
- Làm quen với các trình soạn thảo văn bản chuẩn của Linux như Vim, Emacs hoặc Nano
- Kiến thức cơ bản về tính năng ký song song của Sigstore
- 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 cơ bản về Cấu phần phần mềm
- Kiến thức cơ bản về Chữ ký số
Vai trò liên quan đến Không gian bảo mật có Hình ảnh vùng chứa đã ký
Trong lớp học lập trình này, Primus Bank sẽ là bên kiểm tra và chủ sở hữu tài nguyên, chịu trách nhiệm về những việc sau:
- Thiết lập tài nguyên bắt buộc bằng dữ liệu mẫu.
- Kiểm tra mã khối lượng công việc.
- Sử dụng
cosign
để ký hình ảnh khối lượng công việc. - Tải chữ ký lên kho lưu trữ.
- Định cấu hình chính sách WIP để bảo vệ dữ liệu khách hàng.
Ngân hàng Secundus sẽ là tác giả và nhà điều hành khối lượng công việc, đồng thời chịu trách nhiệm về:
- Thiết lập các tài nguyên cần thiết để lưu trữ kết quả.
- Viết mã khối lượng công việc.
- Xuất bản hình ảnh tải trọng.
- Chạy khối lượng công việc trong Không gian bảo mật với tính năng hỗ trợ hình ảnh vùng chứa đã ký.
Ngân hàng Secundus sẽ phát triển và phát hành một khối lượng công việc sẽ truy vấn dữ liệu khách hàng được lưu trữ trong một bộ nhớ trên đám mây và thuộc sở hữu của Ngân hàng Primus. Ngân hàng Primus sẽ kiểm tra khối lượng công việc, ký hình ảnh vùng chứa và định cấu hình các chính sách WIP để cho phép truy cập vào dữ liệu của họ theo khối lượng công việc đã phê duyệt. Kết quả của quá trình thực thi khối lượng công việc này sẽ được lưu trữ trong một bộ chứa bộ nhớ trên đám mây thuộc sở hữu của ngân hàng Secundus.
Các tài nguyên liên quan đến việc thiết lập Không gian bảo mật
Lớp học lập trình này tham chiếu đến một số biến mà bạn nên đặt thành các giá trị thích hợp cho dự án GCP của mình. Các lệnh trong lớp học lập trình này giả định rằng bạn đã đặt các biến này. (ví dụ: bạn có thể dùng export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket'
để đặt tên cho bộ chứa bộ nhớ đầu vào của ngân hàng Primus.) Nếu bạn chưa đặt biến của resource-names, thì biến này sẽ được tạo dựa trên mã dự án GCP.
Định cấu hình các thông tin sau trong dự án Primus:
$PRIMUS_INPUT_STORAGE_BUCKET
: bộ chứa lưu trữ tệp dữ liệu khách hàng.$PRIMUS_WORKLOAD_IDENTITY_POOL
: Nhóm Workload Identity (WIP) xác thực các thông báo xác nhận.$PRIMUS_WIP_PROVIDER
: nhà cung cấp Workload Identity Pool (WIP) 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_SERVICEACCOUNT
: tài khoản dịch vụ 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
.
Tài nguyên mới trong lớp học lập trình này:
$PRIMUS_COSIGN_REPOSITORY
: Cấu phần lưu trữ cấu phần phần mềm để lưu trữ chữ ký hình ảnh tải trọng.$PRIMUS_SIGNING_KEY
: khoá KMS dùng để ký hình ảnh khối lượng công việc của người kiểm tra/người cộng tác dữ liệu (ví dụ: ngân hàng Primus trong trường hợp này).
Định cấu hình những nội dung sau trong dự án Secundus:
$SECUNDUS_ARTIFACT_REGISTRY
: kho lưu trữ cấu phần phần mềm nơi hình ảnh docker tải trọng sẽ được đẩy.$WORKLOAD_IMAGE_NAME
: tên của hình ảnh docker cho khối lượng công việc.$WORKLOAD_IMAGE_TAG
: thẻ của hình ảnh docker tải trọng.$WORKLOAD_SERVICEACCOUNT
: 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.$SECUNDUS_RESULT_BUCKET
: bộ chứa lưu trữ kết quả của khối lượng công việc.
Tài nguyên Khác:
primus_customer_list.csv
chứa dữ liệu khách hàng. Chúng ta sẽ tải dữ liệu này lên$PRIMUS_INPUT_STORAGE_BUCKET
và tạo một khối lượng công việc sẽ truy vấn dữ liệu này.
Quy trình làm việc hiện có
Khi bạn chạy khối lượng công việc trong Không gian bảo mật, quy 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:
- Gói công việc yêu cầu mã thông báo truy cập chung của Google cho
$PRIMUS_SERVICEACCOUNT
từ WIP. Tệp này cung cấp mã thông báo dịch vụ Trình xác minh chứng thực với các tuyên bố về môi trường và khối lượng công việc. - Nếu các tuyên bố đo lường mức tải 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ã thông báo này sẽ trả về mã thông báo truy cập cho
$PRIMUS_SERVICEACCOUNT.
- Gói công việc 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 dữ liệu khách hàng trong bộ chứa$PRIMUS_INPUT_STORAGE_BUCKET
. - Gánh nặng công việc thực hiện một thao tác trên dữ liệu đó.
- Gói công việc sử dụng tài khoản dịch vụ
$WORKLOAD_SERVICEACCOUNT
để ghi kết quả của thao tác đó vào bộ chứa$SECUNDUS_RESULT_STORAGE_BUCKET
.
Quy trình công việc mới có hỗ trợ vùng chứa đã ký
Tính năng hỗ trợ vùng chứa đã ký sẽ được tích hợp vào quy trình làm việc hiện có, như được nêu rõ bên dưới. Khi bạn chạy khối lượng công việc trong Không gian bảo mật có hỗ trợ hình ảnh vùng chứa đã ký, quy 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:
- Confidential Space phát hiện mọi chữ ký vùng chứa liên quan đến hình ảnh tải trọng đang chạy hiện tại và gửi các chữ ký này đến trình xác minh chứng thực. Trình xác minh chứng thực sẽ xác minh chữ ký và đưa mọi chữ ký hợp lệ vào tuyên bố chứng thực.
- Gói công việc yêu cầu mã thông báo truy cập chung của Google cho
$PRIMUS_SERVICEACCOUNT
từ WIP. Tệp này cung cấp mã thông báo dịch vụ Trình xác minh chứng thực với các tuyên bố về môi trường và khối lượng công việc. - Nếu thông báo xác nhận chữ ký vùng chứa 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ã thông báo này sẽ trả về mã truy cập cho
$PRIMUS_SERVICEACCOUNT
. - Gói công việc 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 dữ liệu khách hàng trong bộ chứa$PRIMUS_INPUT_STORAGE_BUCKET
. - Gánh nặng công việc thực hiện một thao tác trên dữ liệu đó.
- Gói công việc sử dụng
$WORKLOAD_SERVICEACCOUNT
để ghi kết quả của phép tính đó vào bộ chứa$SECUNDUS_RESULT_STORAGE_BUCKET
.
2. Thiết lập tài nguyên trên đám mây
Trong quá trình thiết lập Confidential Space, trước tiên, bạn sẽ tạo các tài nguyên đám mây cần thiết trong các dự án GCP của ngân hàng Primus và Secundus. Sau đây là các tài nguyên mới trong lớp học lập trình này:
Trong dự án Primus:
- Khoá ký KMS dùng để ký khối lượng công việc Secundus, sau khi kiểm tra mã.
- Kho lưu trữ của Artifact Registry để lưu trữ chữ ký Cosign.
Không có tài nguyên mới nào trong dự án Secundus. Sau khi thiết lập các tài nguyên này, 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. Sau đó, bạn sẽ tạo một hình ảnh khối lượng công việc và đơn vị kiểm tra (ngân hàng Primus) sẽ ký hình ảnh khối lượng công việc đó. Sau đó, khối lượng công việc sẽ được các cộng tác viên dữ liệu (Ngân hàng Primus trong lớp học lập trình này) uỷ quyền và người vận hành khối lượng công việc (Ngân hàng Secundus trong trường hợp này) sẽ chạy khối lượng công việc.
Trong quá trình thiết lập Không gian bảo mật, bạn sẽ tạo các tài nguyên đám mây cần thiết trong dự án Primus và Secundus trên Google Cloud.
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
- Thay đổi thư mục cho lớp học lập trình này.
cd confidential-space/codelabs/signed_container_codelab/scripts
- Đảm bảo bạn đã thiết lập các dự án bắt buộc như minh hoạ dưới đây.
export PRIMUS_PROJECT_ID=<GCP project id of primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of secundus bank>
- Đặt các biến cho tên tài nguyên được đề cập ở trên 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'
) - 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
- Cài đặt cosign theo hướng dẫn tại đây.
Thiết lập tài nguyên ngân hàng Primus
Trong bước này, bạn sẽ thiết lập các tài nguyên đám mây bắt buộc cho ngân hàng Primus. Chạy tập lệnh sau để thiết lập tài nguyên cho ngân hàng Primus. 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 (
$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 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_SERVICEACCOUNT
) được đính kèm vào nhóm danh tính khối lượng công việc ($PRIMUS_WORKLOAD_IDENTITY_POOL
) được đề cập ở trên với quyền truy cập IAM sau đây: roles/cloudkms.cryptoKeyDecrypter
để giải mã dữ liệu bằng khoá KMS.objectViewer
để đọc dữ liệu từ bộ nhớ trên đám mây.roles/iam.workloadIdentityUser
để kết nối tài khoản dịch vụ này với nhóm danh tính tải.
./setup_primus_bank_resources.sh
Thiết lập tài nguyên ngân hàng Secundus
Trong bước này, bạn sẽ thiết lập các tài nguyên đám mây bắt buộc cho ngân hàng Secundus. Chạy tập lệnh sau để thiết lập tài nguyên cho 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_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 và ký khối lượng công việc
Tạo tài khoản dịch vụ 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. 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. Tài khoản dịch vụ này sẽ được máy ảo chạy khối lượng công việc sử dụng.
- Tài khoản dịch vụ khối lượng 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 từ bộ nhớ trên đám mây$PRIMUS_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_serviceaccount.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ông việc được sử dụng trong lớp học lập trình này là một ứng dụng Go đơn giản dựa trên CLI, ứng dụng này đếm số khách hàng (từ dữ liệu khách hàng của ngân hàng Primus) từ một vị trí địa lý được cung cấp trong đối số. 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(
$SECUNDUS_ARTIFACT_REGISTRY
) thuộc sở hữu của ngân hàng Secundus. - Cập nhật mã khối lượng công việc bằng tên tài nguyên bắt buộc. Dưới đây là mã khối lượng công việc dùng cho lớp học lập trình này.
- Tạo tệp nhị phân Go và tạo Dockerfile để tạo 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à phát hành hình ảnh Docker lên Cấu phần phần mềm đăng ký (
$SECUNDUS_ARTIFACT_REGISTRY
) do ngân hàng Secundus sở hữu. - Cấp quyền đọc
$WORKLOAD_SERVICEACCOUNT
cho$SECUNDUS_ARTIFACT_REGISTRY
. Điều này cần thiết để vùng chứa khối lượng công việc lấy hình ảnh docker khối lượng công việc từ Cấu phần phần mềm.
./create_workload.sh
Ký khối lượng công việc
Chúng ta sẽ sử dụng Cosign để ký hình ảnh khối lượng công việc. Cosign sẽ mặc định lưu trữ chữ ký trong cùng một kho lưu trữ với hình ảnh mà nó đang ký. Để chỉ định một kho lưu trữ khác cho chữ ký, bạn có thể đặt biến môi trường COSIGN_REPOSITORY
.
Ở đây, chúng ta sẽ lấy Registry Artifact (Cấu phần phần mềm đăng ký) làm ví dụ. Bạn cũng có thể chọn các sổ đăng ký dựa trên OCI khác như Docker Hub, AWS CodeArtifact dựa trên lựa chọn ưu tiên của mình.
- Tạo kho lưu trữ docker của Artifact Registry.
gcloud config set project $PRIMUS_PROJECT_ID
gcloud artifacts repositories create $PRIMUS_COSIGN_REPOSITORY \
--repository-format=docker --location=${PRIMUS_PROJECT_REPOSITORY_REGION}
- Tạo một bộ khoá và khoá trong KMS để ký hình ảnh tải trọng.
gcloud config set project $PRIMUS_PROJECT_ID
gcloud kms keyrings create $PRIMUS_SIGNING_KEYRING \
--location=${PRIMUS_PROJECT_LOCATION}
gcloud kms keys create $PRIMUS_SIGNING_KEY \
--keyring=$PRIMUS_SIGNING_KEYRING \
--purpose=asymmetric-signing \
--default-algorithm=ec-sign-p256-sha256 \
--location=${PRIMUS_PROJECT_LOCATION}
- Đối với Cấu phần phần mềm đăng ký, bạn nên sử dụng tên hình ảnh đầy đủ như
$LOCATION/$PROJECT/$REPOSITORY/$IMAGE_NAME
. Bạn có thể tải bất kỳ hình ảnh vùng chứa nào lên kho lưu trữ để lưu trữ chữ ký.
export COSIGN_REPOSITORY=us-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_COSIGN_REPOSITORY}/demo
- Cấp vai trò Người xem trên kho lưu trữ
$PRIMUS_COSIGN_REPOSITORY
cho tài khoản dịch vụ$WORKLOAD_SERVICEACCOUNT
. Điều này cho phép Không gian bảo mật khám phá mọi chữ ký hình ảnh vùng chứa được tải lên$PRIMUS_COSIGN_REPOSITORY
.
gcloud artifacts repositories add-iam-policy-binding ${PRIMUS_COSIGN_REPOSITORY} \
--project=${PRIMUS_PROJECT_ID} --role='roles/viewer' --location=us \
--member="serviceAccount:${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com"
Cosign là một công cụ mạnh mẽ có nhiều tính năng ký. Đối với trường hợp sử dụng của mình, chúng ta chỉ yêu cầu Cosign ký bằng một cặp khoá. Tính năng ký không cần khoá đồng ký không được hỗ trợ cho tính năng hình ảnh vùng chứa đã ký này.
Khi ký bằng một cặp khoá, bạn có hai lựa chọn:
- Ký bằng cặp khoá cục bộ do Cosign tạo.
- Ký bằng một cặp khoá được lưu trữ ở nơi khác (ví dụ: trong KMS).
- Tạo một cặp khoá trong Cosign nếu bạn chưa có. Tham khảo phần ký bằng khoá tự quản lý để biết thêm thông tin chi tiết. Ở đây, chúng tôi đã chỉ định cả hai cách (tại cục bộ và sử dụng nhà cung cấp KMS) để tạo cặp khoá và ký tải trọng. Vui lòng làm theo một trong những cách này để ký vùng chứa tải trọng.
// Set Application Default Credentials.
gcloud auth application-default login
// Generate keys using a KMS provider.
cosign generate-key-pair --kms <provider>://<key>
// Generate keys using Cosign.
cosign generate-key-pair
Trong đoạn mã trên, hãy thay thế <provider>://<key> bằng gcpkms://projects/$PRIMUS_PROJECT_ID/locations/global/keyRings/$PRIMUS_SIGNING_KEYRING/cryptoKeys/$PRIMUS_SIGNING_KEY/cryptoKeyVersions/$PRIMUS_SIGNING_KEYVERSION
- <provider> : Tham chiếu đến giải pháp KMS mà bạn đang sử dụng
- <key> : Tham chiếu đến đường dẫn khoá trong KMS
- Truy xuất khoá công khai để xác minh.
// For KMS providers.
cosign public-key --key <some provider>://<some key> > pub.pem
// For local key pair signing.
cosign public-key --key cosign.key > pub.pem
- Ký khối lượng công việc bằng tính năng Ký cùng. Thực hiện mã hoá base64 không thêm khoảng đệm trên khoá công khai
PUB=$(cat pub.pem | openssl base64)
// Remove spaces and trailing "=" signs.
PUB=$(echo $PUB | tr -d '[:space:]' | sed 's/[=]*$//')
- Ký khối lượng công việc bằng Cosign với khoá công khai đã xuất và các thuật toán chữ ký đính kèm.
IMAGE_REFERENCE=us-docker.pkg.dev/$SECUNDUS_PROJECT_ID/$SECUNDUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG
// Sign with KMS support.
cosign sign --key <some provider>://<some key> $IMAGE_REFERENCE \
-a dev.cosignproject.cosign/sigalg=ECDSA_P256_SHA256 \
-a dev.cosignproject.cosign/pub=$PUB
// Sign with a local key pair.
cosign sign --key cosign.key $IMAGE_REFERENCE \
-a dev.cosignproject.cosign/sigalg=ECDSA_P256_SHA256 \
-a dev.cosignproject.cosign/pub=$PUB
--key
[BẮT BUỘC] chỉ định khoá ký cần sử dụng. Khi tham chiếu đến một khoá do nhà cung cấp KMS quản lý, vui lòng làm theo định dạng URI cụ thể trong phần Hỗ trợ KMS Sigstore. Khi tham chiếu đến khoá do Cosign tạo, hãy sử dụng cosign.key.$IMAGE_REFERENCE
[BẮT BUỘC] chỉ định hình ảnh vùng chứa cần ký. Bạn có thể xác định định dạng củaIMAGE_REFERENCE
bằng thẻ hoặc chuỗi đại diện hình ảnh. Ví dụ:us-docker.pkg.dev/$SECUNDUS_PROJECT_ID/secundus-workloads/workload-container:latest or us-docker.pkg.dev/$SECUNDUS_PROJECT_ID/secundus-workloads/workload-container
[IMAGE-digest]
- -a [BẮT BUỘC] chỉ định các chú thích đính kèm vào tải trọng chữ ký. Đối với hình ảnh vùng chứa được ký trong Không gian bảo mật, bạn phải đính kèm khoá công khai và thuật toán chữ ký vào tải trọng chữ ký.
dev.cosignproject.cosign/sigalg
CHỈ chấp nhận 3 giá trị:- RSASSA_PSS_SHA256: Thuật toán RSASSA với PSS đệm bằng chuỗi đại diện SHA256.
- RSASSA_PKCS1V15_SHA256: Thuật toán RSASSA với PKCS#1 v1.5 được đệm bằng thông báo SHA256.
- ECDSA_P256_SHA256: ECDSA trên Đường cong P-256 với chuỗi đại diện SHA256. Đây cũng là thuật toán chữ ký mặc định cho các cặp khoá do Cosign tạo.
- Tải chữ ký lên kho lưu trữ docker
Tính năng ký cùng sẽ tự động tải chữ ký lên COSIGN_REPOSITORY.
đã chỉ định
4. Uỷ quyền và chạy khối lượng công việc
Uỷ quyền cho Workload
Trong bước này, chúng ta sẽ thiết lập nhà cung cấp danh tính tải trong nhóm danh tính tải ($PRIMUS_WORKLOAD_IDENTITY_POOL
). Có các điều kiện thuộc tính được định cấu hình cho danh tính tải như minh hoạ bên dưới. Một trong các điều kiện là xác thực vân tay chữ ký hình ảnh tải trọng dựa trên vân tay của khoá công khai ký. Với điều kiện thuộc tính này, khi Ngân hàng Secundus phát hành hình ảnh khối lượng công việc mới, Ngân hàng Primus sẽ kiểm tra mã khối lượng công việc và ký hình ảnh khối lượng công việc mới mà không cần cập nhật chính sách WIP bằng chuỗi đại diện hình ảnh.
gcloud config set project $PRIMUS_PROJECT_ID
PUBLIC_KEY_FINGERPRINT=$(openssl pkey -pubin -in pub.pem -outform DER | openssl sha256 | cut -d' ' -f2)
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
&& '${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com' in
assertion.google_service_accounts
&& ['ECDSA_P256_SHA256:${PUBLIC_KEY_FINGERPRINT}']
.exists(fingerprint, fingerprint in assertion.submods.container.image_signatures.map(sig,sig.signature_algorithm+':'+sig.key_id))"
Chạy khối lượng công việc
Trong bước này, chúng ta sẽ chạy khối lượng công việc trên Máy ảo bảo mật. 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ờ. Công việc được mã hoá để xuất bản kết quả của nó vào $SECUNDUS_RESULT_STORAGE_BUCKET
.
gcloud compute instances create ${WORKLOAD_VM} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE} \
--project=${SECUNDUS_PROJECT_ID} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/${SECUNDUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"count-location\",\"Seattle\",\"gs://${SECUNDUS_RESULT_STORAGE_BUCKET}/seattle-result\"]"~tee-signed-image-repos=us-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_COSIGN_REPOSITORY}/demo"
Xem kết quả
Trong dự án Secundus, hãy xem kết quả của khối lượng công việc.
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
!
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á:
- Bộ chứa bộ nhớ đầu vào của ngân hàng Primus (
$PRIMUS_INPUT_STORAGE_BUCKET
). - Tài khoản dịch vụ ngân hàng Primus (
$PRIMUS_SERVICEACCOUNT
). - Sổ đăng ký cấu phần phần mềm của Primus Bank lưu giữ chữ ký hình ảnh (
$PRIMUS_COSIGN_REPOSITORY
). - Nhóm danh tính theo khối lượng công việc của Primus Bank (
$PRIMUS_WORKLOAD_IDENTITY_POOL
). - Tài khoản dịch vụ tải trọng của Ngân hàng Secundus (
$WORKLOAD_SERVICEACCOUNT
). - Phiên bản điện toán tải trọng.
- Bộ chứa kết quả của Ngân hàng Secundus (
$SECUNDUS_RESULT_STORAGE_BUCKET
). - Cấu phần phần mềm đăng ký của Ngân hàng Secundus (
$SECUNDUS_ARTIFACT_REGISTRY
). - Máy ảo khối lượng công việc của Ngân hàng Secundus (
$WORKLOAD_VM
).
./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
Xin chúc mừng
Xin chúc mừng, bạn đã hoàn tất thành công lớp học lập trình này!
Bạn đã tìm hiểu cách tận dụng tính năng hình ảnh vùng chứa đã ký để cải thiện khả năng hữu dụng của 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...
- Dữ liệu dùng chung được bảo mật đang được sử dụng với Không gian bảo mật
- 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