1. ภาพรวม
Confidential Space ช่วยให้การแชร์ข้อมูลและการทำงานร่วมกันแบบหลายฝ่ายเป็นไปอย่างปลอดภัย ในขณะที่ยังช่วยให้องค์กรสามารถรักษาความลับของข้อมูลได้ ซึ่งหมายความว่าองค์กรต่างๆ สามารถทำงานร่วมกันได้ในขณะที่ยังคงควบคุมข้อมูลของตนเองและปกป้องข้อมูลจากการเข้าถึงที่ไม่ได้รับอนุญาต
Confidential Space จะช่วยให้คุณได้รับประโยชน์ร่วมกันจากการรวบรวมและวิเคราะห์ข้อมูลที่ละเอียดอ่อนซึ่งมักจะอยู่ภายใต้การกำกับดูแล ในขณะที่ยังคงควบคุมข้อมูลได้อย่างเต็มที่ Confidential Space ช่วยให้องค์กรได้รับคุณค่าร่วมกันจากการรวบรวมและวิเคราะห์ข้อมูลที่ละเอียดอ่อน เช่น ข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII), ข้อมูลสุขภาพที่ได้รับการคุ้มครอง (PHI), ทรัพย์สินทางปัญญา และข้อมูลลับที่เข้ารหัส ในขณะที่ยังคงควบคุมข้อมูลดังกล่าวได้อย่างเต็มที่
สิ่งที่คุณต้องมี
- โปรเจ็กต์ Google Cloud Platform
- เบราว์เซอร์ เช่น Chrome หรือ Firefox
- ความรู้พื้นฐานเกี่ยวกับ Google Compute Engine ( codelab), Confidential VM, Containers และที่เก็บข้อมูลระยะไกล
- ความรู้พื้นฐานเกี่ยวกับ Cloud KMS ( codelab)
- ความรู้พื้นฐานเกี่ยวกับบัญชีบริการ การรวมศูนย์ของ Workload Identity และเงื่อนไขของแอตทริบิวต์
สิ่งที่คุณจะได้เรียนรู้
- วิธีกำหนดค่าทรัพยากรระบบคลาวด์ที่จำเป็นสำหรับการเรียกใช้ Confidential Space
- วิธีเรียกใช้เวิร์กโหลดใน VM ที่เป็นความลับซึ่งเรียกใช้อิมเมจ VM ของ Confidential Space
- วิธีให้สิทธิ์เข้าถึงทรัพยากรที่ได้รับการปกป้องตามแอตทริบิวต์ของโค้ดภาระงาน (อะไร) สภาพแวดล้อม Confidential Space (ที่ไหน) และบัญชีที่เรียกใช้ภาระงาน (ใคร)
ในโค้ดแล็บนี้ คุณจะได้ตั้งค่าพื้นที่ทำงานลับระหว่าง Primus และ Secundus Bank เพื่อระบุลูกค้าที่ใช้บริการร่วมกันโดยไม่ต้องแชร์รายการบัญชีทั้งหมดกับอีกฝ่าย โดยมีขั้นตอนดังนี้
- ขั้นตอนที่ 1: ตั้งค่าทรัพยากรระบบคลาวด์ที่จำเป็นสำหรับธนาคาร Primus และ Secundus ทรัพยากรระบบคลาวด์เหล่านี้ประกอบด้วยที่เก็บข้อมูลของพื้นที่เก็บข้อมูลบนระบบคลาวด์ คีย์ KMS, Workload Identity Pool และบัญชีบริการสำหรับ Primus Bank และ Secundus Bank Primus Bank และ Secundus Bank จัดเก็บข้อมูลลูกค้าไว้ในที่เก็บข้อมูล Cloud Storage และเข้ารหัสข้อมูลโดยใช้คีย์ของบริการการจัดการคีย์ระบบคลาวด์
- ขั้นตอนที่ 2: สร้างบัญชีบริการของเวิร์กโหลดซึ่ง VM ของเวิร์กโหลดจะใช้ Secundus Bank ซึ่งจะเป็นผู้ให้บริการของเวิร์กโหลดจะเปิดใช้ VM ของเวิร์กโหลด Primus Bank จะเป็นผู้เขียนโค้ดภาระงาน
- ขั้นตอนที่ 3: สร้างเวิร์กโหลดที่มีคำสั่ง CLI 2 รายการ รายการหนึ่งสำหรับนับลูกค้าจากสถานที่ที่ระบุ และอีกรายการหนึ่งสำหรับค้นหาลูกค้าร่วมของ Primus และ Secundus Bank โดย Primus Bank จะเป็นผู้สร้างเวิร์กโหลดและจะแพ็กเกจเป็นอิมเมจ Docker ระบบจะเผยแพร่รูปภาพ Docker นี้ไปยัง Artifact Registry
- ขั้นตอนที่ 4: ให้สิทธิ์เวิร์กโหลด Primus Bank จะใช้ Workload Identity Pool เพื่อให้สิทธิ์ภาระงานในการเข้าถึงข้อมูลลูกค้าตามแอตทริบิวต์ของผู้ที่เรียกใช้ภาระงาน สิ่งที่ภาระงานทำ และตำแหน่งที่ภาระงานทำงาน
- ขั้นตอนที่ 5: เมื่อภาระงานทำงาน ระบบจะขอสิทธิ์เข้าถึงทรัพยากรระบบคลาวด์ของผู้ร่วมงานด้านข้อมูล (Primus Bank และ Secundus Bank) โดยเสนอโทเค็นบริการเครื่องมือตรวจสอบการรับรองพร้อมการอ้างสิทธิ์ของภาระงานและสภาพแวดล้อม หากการอ้างสิทธิ์การวัดภาระงานในโทเค็นตรงกับเงื่อนไขแอตทริบิวต์ใน Workload Identity Pool ของธนาคาร Primus และ Secundus ระบบจะแสดงโทเค็นเพื่อการเข้าถึงบัญชีบริการที่มีสิทธิ์เข้าถึงทรัพยากรระบบคลาวด์ที่เกี่ยวข้อง โดยทรัพยากรระบบคลาวด์จะเข้าถึงได้เฉพาะเวิร์กโหลดที่ทำงานภายใน Confidential Space เท่านั้น
- ขั้นตอนที่ 5(ก): เรียกใช้ภาระงานแรกซึ่งนับลูกค้าของ Primus Bank จากสถานที่ตั้งที่เฉพาะเจาะจง สำหรับภาระงานนี้ Primus Bank จะเป็นผู้ทำงานร่วมกันด้านข้อมูลและผู้เขียนภาระงาน ซึ่งจะให้รายชื่อลูกค้าที่เข้ารหัสแก่ภาระงานที่ทำงานใน Confidential Space Secundus Bank จะเป็นผู้ให้บริการเวิร์กโหลดและจะเรียกใช้เวิร์กโหลดในพื้นที่ทำงานที่เป็นความลับ
- ขั้นตอนที่ 5(ข): เรียกใช้ภาระงานที่ 2 ซึ่งจะค้นหาลูกค้าร่วมของธนาคาร Primus และ Secundus สำหรับภาระงานนี้ ทั้ง Primus Bank และ Secundus Bank จะเป็นผู้ร่วมใช้ข้อมูล โดยจะให้รายชื่อลูกค้าที่เข้ารหัสแก่เวิร์กโหลดที่ทำงานใน Confidential Space Secundus Bank จะเป็นผู้ปฏิบัติงานด้านเวิร์กโหลดอีกครั้ง Secundus Bank จะให้สิทธิ์เวิร์กโหลดนี้ด้วย เนื่องจากเวิร์กโหลดต้องเข้าถึงรายชื่อลูกค้าที่เข้ารหัสของ Secundus Bank ด้วยเพื่อค้นหาลูกค้าร่วมกัน ในกรณีนี้ Secundus Bank จะให้สิทธิ์ภาระงานในการเข้าถึงข้อมูลลูกค้าตามแอตทริบิวต์ของผู้ที่เรียกใช้ภาระงาน สิ่งที่ภาระงานทำ และตำแหน่งที่ภาระงานทำงานตามที่กล่าวไว้ในขั้นตอนที่ 4 สำหรับ Primus Bank

2. ตั้งค่าทรัพยากรระบบคลาวด์
ก่อนเริ่มต้น
- โคลน ที่เก็บนี้โดยใช้คำสั่งด้านล่างเพื่อรับสคริปต์ที่จำเป็นซึ่งใช้เป็นส่วนหนึ่งของโค้ดแล็บนี้
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- เปลี่ยนไดเรกทอรีสำหรับ Codelab นี้
cd confidential-space/codelabs/bank_data_analysis_codelab/scripts
- ตรวจสอบว่าคุณได้ตั้งค่าตัวแปรสภาพแวดล้อมของโปรเจ็กต์ที่จำเป็นตามที่แสดงด้านล่าง ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างโปรเจ็กต์ GCP ได้ที่ Codelab นี้ คุณสามารถดูรายละเอียดเกี่ยวกับวิธีดึงรหัสโปรเจ็กต์และวิธีที่รหัสโปรเจ็กต์แตกต่างจากชื่อโปรเจ็กต์และหมายเลขโปรเจ็กต์ได้จากที่นี่
export PRIMUS_PROJECT_ID=<GCP project id of Primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus bank>
- เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์
- เปิดใช้ Confidential Computing API และ API ต่อไปนี้สำหรับทั้ง 2 โปรเจ็กต์
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
- ตั้งค่าตัวแปรสำหรับชื่อทรัพยากรตามที่ระบุไว้ด้านล่างโดยใช้คำสั่งนี้ คุณลบล้างชื่อทรัพยากรได้โดยใช้ตัวแปรเหล่านี้ (เช่น
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket') - คุณตั้งค่าตัวแปรต่อไปนี้ได้โดยใช้ชื่อทรัพยากรระบบคลาวด์ที่มีอยู่ในโปรเจ็กต์ Primus หากตั้งค่าตัวแปร ระบบจะใช้ทรัพยากรระบบคลาวด์ที่มีอยู่ซึ่งสอดคล้องกันจากโปรเจ็กต์ Primus หากไม่ได้ตั้งค่าตัวแปร ระบบจะสร้างชื่อทรัพยากรระบบคลาวด์จากชื่อโปรเจ็กต์ และจะสร้างทรัพยากรระบบคลาวด์ใหม่เป็นส่วนหนึ่งของรายการต่อไปนี้
| ที่เก็บข้อมูลที่จัดเก็บไฟล์ข้อมูลลูกค้าของ Primus Bank |
| Workload Identity Pool (WIP) ของ Primus Bank ที่ตรวจสอบการอ้างสิทธิ์ |
| ผู้ให้บริการ Workload Identity Pool ของ Primus Bank ซึ่งมีเงื่อนไขการให้สิทธิ์ที่จะใช้สำหรับโทเค็นที่ลงนามโดยบริการเครื่องมือตรวจสอบการรับรอง |
| บัญชีบริการของ Primus Bank ที่ |
| คีย์ KMS ที่ใช้ในการเข้ารหัสข้อมูลที่จัดเก็บไว้ใน |
| พวงกุญแจ KMS ที่จะใช้สร้างคีย์การเข้ารหัส |
| ที่เก็บที่เก็บอาร์ติแฟกต์ที่จะพุชอิมเมจ Docker ของเวิร์กโหลด |
- คุณตั้งค่าตัวแปรต่อไปนี้ได้โดยใช้ชื่อทรัพยากรระบบคลาวด์ที่มีอยู่ในโปรเจ็กต์ Secundus หากตั้งค่าตัวแปรไว้ ระบบจะใช้ทรัพยากรระบบคลาวด์ที่มีอยู่ซึ่งสอดคล้องกันจากโปรเจ็กต์ Secundus หากไม่ได้ตั้งค่าตัวแปร ระบบจะสร้างชื่อทรัพยากรระบบคลาวด์จากชื่อโปรเจ็กต์ และจะสร้างทรัพยากรระบบคลาวด์ใหม่เป็นส่วนหนึ่งของรายการต่อไปนี้
| ที่เก็บข้อมูลที่จัดเก็บไฟล์ข้อมูลลูกค้าของ Secundus Bank |
| Workload Identity Pool (WIP) ของ Secundus Bank ที่ตรวจสอบการอ้างสิทธิ์ |
| ผู้ให้บริการ Workload Identity Pool ของ Secundus Bank ซึ่งมีเงื่อนไขการให้สิทธิ์ที่จะใช้สำหรับโทเค็นที่ลงนามโดย Attestation Verifier Service |
| บัญชีบริการของ Secundus Bank ที่ |
| คีย์ KMS ที่ใช้ในการเข้ารหัสข้อมูลที่จัดเก็บไว้ใน |
| พวงกุญแจ KMS ที่ใช้สร้างคีย์การเข้ารหัส |
| ที่เก็บข้อมูลที่จัดเก็บผลลัพธ์ของเวิร์กโหลด |
| ชื่ออิมเมจคอนเทนเนอร์ของภาระงาน |
| แท็กของอิมเมจคอนเทนเนอร์ของภาระงาน |
| บัญชีบริการที่มีสิทธิ์เข้าถึง VM ที่ประมวลผลข้อมูลลับซึ่งเรียกใช้ภาระงาน |
- มีอาร์ติแฟกต์บางอย่างที่ใช้เป็นส่วนหนึ่งของโค้ดแล็บนี้ตามที่ระบุไว้ด้านล่าง
primus_customer_list.csv: ไฟล์ที่มีข้อมูลลูกค้าของ Primus Bank ที่นี่คือไฟล์ตัวอย่างที่ใช้ในโค้ดแล็บนี้secundus_customer_list.csv: ไฟล์ที่มีข้อมูลลูกค้าของ Secundus Bank ที่นี่คือไฟล์ตัวอย่างที่ใช้ในโค้ดแล็บนี้- คุณจะต้องมีสิทธิ์บางอย่างสำหรับโปรเจ็กต์ทั้ง 2 รายการนี้
- สำหรับ
$PRIMUS_PROJECT_IDคุณจะต้องมีผู้ดูแลระบบ Cloud KMS, ผู้ดูแลระบบพื้นที่เก็บข้อมูล, ผู้ดูแลระบบ Artifact Registry, ผู้ดูแลระบบบัญชีบริการ และผู้ดูแลระบบ IAM Workload Identity Pool - สำหรับ
$SECUNDUS_PROJECT_IDคุณจะต้องมีผู้ดูแลระบบ Compute, ผู้ดูแลระบบพื้นที่เก็บข้อมูล, ผู้ดูแลระบบบัญชีบริการ, ผู้ดูแลระบบ Cloud KMS, ผู้ดูแลระบบ IAM Workload Identity Pool และผู้ดูแลระบบความปลอดภัย (ไม่บังคับ) - เรียกใช้สคริปต์ต่อไปนี้เพื่อตั้งค่าชื่อตัวแปรที่เหลือเป็นค่าตามรหัสโปรเจ็กต์สำหรับชื่อทรัพยากร
source config_env.sh
ตั้งค่าทรัพยากรระบบคลาวด์สำหรับ Primus Bank
Primus Bank ต้องใช้ทรัพยากรระบบคลาวด์ต่อไปนี้ เรียกใช้สคริปต์นี้เพื่อตั้งค่าทรัพยากรสำหรับ Primus Bank
- ที่เก็บข้อมูล Cloud Storage (
$PRIMUS_INPUT_STORAGE_BUCKET) เพื่อจัดเก็บไฟล์ข้อมูลลูกค้าที่เข้ารหัสของ Primus Bank - คีย์การเข้ารหัส (
$PRIMUS_ENC_KEY) และพวงกุญแจ ($PRIMUS_ENC_KEYRING) ใน KMS เพื่อเข้ารหัสไฟล์ข้อมูลลูกค้าของ Primus Bank - Workload Identity Pool (
$PRIMUS_WORKLOAD_IDENTITY_POOL) เพื่อตรวจสอบการอ้างสิทธิ์ตามเงื่อนไขแอตทริบิวต์ที่กำหนดค่าไว้ภายใต้ผู้ให้บริการ - บัญชีบริการ (
$PRIMUS_SERVICE_ACCOUNT) ที่แนบกับพูล Workload Identity ที่กล่าวถึงข้างต้น ($PRIMUS_WORKLOAD_IDENTITY_POOL) มีสิทธิ์เข้าถึงเพื่อถอดรหัสข้อมูลโดยใช้คีย์ KMS (โดยใช้บทบาทroles/cloudkms.cryptoKeyDecrypter) อ่านข้อมูลจากที่เก็บข้อมูลใน Cloud Storage (โดยใช้บทบาทobjectViewer) และเชื่อมต่อบัญชีบริการกับพูล Workload Identity (โดยใช้roles/iam.workloadIdentityUser)
./setup_primus_bank_resources.sh
ตั้งค่าทรัพยากรระบบคลาวด์สำหรับ Secundus Bank
สำหรับ Secundus Bank คุณต้องมีทรัพยากรระบบคลาวด์ต่อไปนี้ เรียกใช้สคริปต์นี้เพื่อตั้งค่าทรัพยากรของ Secundus Bank ในขั้นตอนต่อไปนี้ ระบบจะสร้างทรัพยากรที่กล่าวถึงด้านล่าง
- ที่เก็บข้อมูล Cloud Storage (
$SECUNDUS_INPUT_STORAGE_BUCKET) เพื่อจัดเก็บไฟล์ข้อมูลลูกค้าที่เข้ารหัสของ Secundus Bank - คีย์การเข้ารหัส (
$SECUNDUS_ENC_KEY) และพวงกุญแจ ($SECUNDUS_ENC_KEYRING) ใน KMS เพื่อเข้ารหัสไฟล์ข้อมูลของ Secundus Bank - Workload Identity Pool (
$SECUNDUS_WORKLOAD_IDENTITY_POOL) เพื่อตรวจสอบการอ้างสิทธิ์ตามเงื่อนไขแอตทริบิวต์ที่กำหนดค่าไว้ภายใต้ผู้ให้บริการ - บัญชีบริการ (
$SECUNDUS_SERVICE_ACCOUNT) ที่แนบกับพูล Workload Identity ที่กล่าวถึงข้างต้น ($SECUNDUS_WORKLOAD_IDENTITY_POOL) มีสิทธิ์เข้าถึงเพื่อถอดรหัสข้อมูลโดยใช้คีย์ KMS (โดยใช้บทบาทroles/cloudkms.cryptoKeyDecrypter) อ่านข้อมูลจากที่เก็บข้อมูล Cloud Storage (โดยใช้บทบาทobjectViewer) และเชื่อมต่อบัญชีบริการกับพูล Workload Identity (โดยใช้บทบาทroles/iam.workloadIdentityUser) - ที่เก็บข้อมูล Cloud Storage (
$SECUNDUS_RESULT_STORAGE_BUCKET) เพื่อจัดเก็บผลการเรียกใช้เวิร์กโหลดโดย Secundus Bank
./setup_secundus_bank_resources.sh
3. สร้างภาระงาน
สร้างบัญชีบริการของเวิร์กโหลด
ตอนนี้คุณจะสร้างบัญชีบริการสำหรับภาระงานที่มีบทบาทและสิทธิ์ที่จำเป็นตามที่ระบุไว้ด้านล่าง เรียกใช้สคริปต์ต่อไปนี้เพื่อสร้างบัญชีบริการของเวิร์กโหลดในโปรเจ็กต์ Secundus Bank VM ที่เรียกใช้เวิร์กโหลดจะใช้บัญชีบริการนี้
บัญชีบริการของเวิร์กโหลดนี้ ($WORKLOAD_SERVICE_ACCOUNT) จะมีบทบาทต่อไปนี้
- มอบบทบาท
confidentialcomputing.workloadUserให้กับบัญชีบริการของภาระงาน ซึ่งจะช่วยให้บัญชีผู้ใช้สร้างโทเค็นการรับรองได้ - ให้สิทธิ์บทบาท
logging.logWriterแก่สิทธิ์ของบัญชีบริการของภาระงาน ซึ่งจะช่วยให้สภาพแวดล้อม Confidential Space เขียนบันทึกลงใน Cloud Logging นอกเหนือจากคอนโซลอนุกรมได้ เพื่อให้บันทึกพร้อมใช้งานหลังจากที่ระบบสิ้นสุด VM objectViewerเพื่ออ่านข้อมูลจากที่เก็บข้อมูล$PRIMUS_INPUT_STORAGE_BUCKETในระบบคลาวด์objectViewerเพื่ออ่านข้อมูลจากที่เก็บข้อมูล$SECUNDUS_INPUT_STORAGE_BUCKETในระบบคลาวด์objectAdminเพื่อเขียนผลลัพธ์ของเวิร์กโหลดไปยังที่เก็บข้อมูล$SECUNDUS_RESULT_STORAGE_BUCKETใน Cloud Storage
./create_workload_service_account.sh
สร้างภาระงาน
ในขั้นตอนนี้ คุณจะได้สร้างอิมเมจ Docker สำหรับภาระงานที่ใช้ในโค้ดแล็บนี้ เวิร์กโหลดเป็นแอปพลิเคชัน GoLang แบบง่ายๆ ซึ่งมีลักษณะดังนี้
- นับลูกค้าในสถานที่ตั้งทางภูมิศาสตร์ที่ระบุ
- ค้นหาลูกค้าร่วมกันของ Primus และ Secundus Bank จากรายชื่อลูกค้าที่จัดเก็บไว้ในที่เก็บข้อมูลบนระบบคลาวด์ของแต่ละราย
เรียกใช้สคริปต์ต่อไปนี้เพื่อสร้างภาระงานที่จะดำเนินการตามขั้นตอนต่อไปนี้
- สร้าง Artifact Registry (
$PRIMUS_ARTIFACT_REPOSITORY) ที่ Primus Bank เป็นเจ้าของซึ่งจะมีการเผยแพร่เวิร์กโหลด - สร้างโค้ดและอัปเดตด้วยชื่อทรัพยากรที่จำเป็น คุณดูโค้ดภาระงานที่ใช้ใน Codelab นี้ได้ที่นี่
- สร้างโค้ดและแพ็กเกจในอิมเมจ Docker ดู Dockerfile ที่เกี่ยวข้องได้ที่นี่
- เผยแพร่อิมเมจ Docker ไปยัง Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY) ที่ Primus Bank เป็นเจ้าของ - ให้
$WORKLOAD_SERVICE_ACCOUNTสิทธิ์อ่านแก่บัญชีบริการสำหรับ Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY)
./create_workload.sh
4. ให้สิทธิ์และเรียกใช้ภาระงาน
ให้สิทธิ์ภาระงาน
Primus Bank ต้องการให้สิทธิ์เวิร์กโหลดในการเข้าถึงข้อมูลลูกค้าตามแอตทริบิวต์ของทรัพยากรต่อไปนี้
- อะไร: รหัสที่ได้รับการยืนยัน
- ที่ไหน: สภาพแวดล้อมที่ปลอดภัย
- ใคร: ผู้ให้บริการที่เชื่อถือได้
Primus ใช้การเชื่อมโยงข้อมูลประจำตัวของเวิร์กโหลดเพื่อบังคับใช้นโยบายการเข้าถึงตามข้อกำหนดเหล่านี้
การรวมศูนย์ข้อมูลระบบตัวตนของภาระงานช่วยให้คุณระบุเงื่อนไขแอตทริบิวต์ได้ เงื่อนไขเหล่านี้จะจำกัดข้อมูลประจำตัวที่สามารถตรวจสอบสิทธิ์ด้วย Workload Identity Pool (WIP) คุณสามารถเพิ่ม Attestation Verifier Service ลงใน WIP เป็นผู้ให้บริการ Workload Identity Pool เพื่อแสดงการวัดผลและบังคับใช้นโยบาย
Workload Identity Pool ได้รับการสร้างไว้ก่อนหน้านี้แล้วเป็นส่วนหนึ่งของขั้นตอนการตั้งค่าทรัพยากรระบบคลาวด์ ตอนนี้ Primus Bank จะสร้างผู้ให้บริการ Workload Identity Pool ของ OIDC รายใหม่ --attribute-condition ที่ระบุจะให้สิทธิ์เข้าถึงคอนเทนเนอร์ของภาระงาน โดยต้องมีสิ่งต่อไปนี้
- สิ่งที่ทำ: อัปโหลด
$WORKLOAD_IMAGE_NAMEล่าสุดไปยังที่เก็บ$PRIMUS_ARTIFACT_REPOSITORY - ที่ไหน: สภาพแวดล้อมการดำเนินการที่เชื่อถือได้ของ Confidential Space ทำงานบนอิมเมจ VM ของ Confidential Space ที่รองรับอย่างเต็มรูปแบบ
- ใคร: บัญชีบริการของ Secundus Bank
$WORKLOAD_SERVICE_ACCOUNT
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"
Secundus Bank ต้องการให้สิทธิ์ภาระงานในการเข้าถึงข้อมูลลูกค้าโดยอิงตามเกณฑ์ต่อไปนี้ ซึ่งคล้ายกับ WIP ที่สร้างขึ้นสำหรับ Primus Bank
- อะไร: ภาระงาน
- ที่ไหน: สภาพแวดล้อม Confidential Space
- ใคร: บัญชี (
$WORKLOAD_SERVICE_ACCOUNT) ที่เรียกใช้เวิร์กโหลด
Primus Bank ใช้การอ้างสิทธิ์ image_reference ซึ่งรวมถึงแท็กรูปภาพ เพื่อพิจารณาว่าควรให้สิทธิ์เข้าถึงหรือไม่ โดยผู้ให้บริการจะควบคุมที่เก็บข้อมูลระยะไกล จึงมั่นใจได้ว่าจะติดแท็กเฉพาะรูปภาพที่ไม่มีการรั่วไหลของข้อมูล
ในทางตรงกันข้าม Secundus Bank ไม่ได้ควบคุมที่เก็บที่ใช้รับรูปภาพ จึงไม่สามารถสรุปได้อย่างปลอดภัย แต่จะเลือกให้สิทธิ์เข้าถึงเวิร์กโหลดตาม image_digest แทน Primus Bank ไม่สามารถทำให้ image_digest อ้างอิงถึงรูปภาพอื่นนอกเหนือจากรูปภาพที่ Secundus Bank ตรวจสอบในขั้นตอนก่อนหน้าได้ ซึ่งแตกต่างจาก image_reference ที่ Primus Bank สามารถเปลี่ยนให้ชี้ไปยังรูปภาพอื่นได้
ก่อนสร้างผู้ให้บริการ Workload Identity Pool เราจะรวบรวม image_digest สำหรับอิมเมจคอนเทนเนอร์ของเวิร์กโหลดซึ่งจะใช้ในเงื่อนไขแอตทริบิวต์ของผู้ให้บริการ
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"
เรียกใช้ภาระงาน
ในขั้นตอนนี้ Secundus Bank จะเรียกใช้ภาระงานใน Confidential Space โดยเวิร์กโหลดนี้จะรับโทเค็นการเข้าถึงจากกลุ่ม Workload Identity ของ Primus และกลุ่ม Workload Identity ของ Secundus เพื่ออ่านและถอดรหัสข้อมูลลูกค้าของ Primus Bank และ Secundus Bank ตามลำดับ
ระบบจะส่งอาร์กิวเมนต์ TEE ที่จำเป็นโดยใช้แฟล็กข้อมูลเมตา อาร์กิวเมนต์สำหรับคอนเทนเนอร์ของเวิร์กโหลดจะส่งผ่านโดยใช้ส่วน "tee-cmd" ของแฟล็ก ผลการดำเนินการของเวิร์กโหลดจะเผยแพร่ไปยัง $SECUNDUS_RESULT_STORAGE_BUCKET
เรียกใช้ภาระงานแรก
ในส่วนของการดำเนินการเวิร์กโหลดครั้งแรก เวิร์กโหลดจะนับลูกค้าของ Primus Bank จากสถานที่ที่ระบุไว้ในอาร์กิวเมนต์ของคอนเทนเนอร์เวิร์กโหลด ดังที่แสดงด้านล่างนี้ เวิร์กโหลดแรกจะเรียกใช้คำสั่ง "count-location" และระบบจะจัดเก็บผลลัพธ์ไว้ที่ $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\"]""
ดูผลลัพธ์
ในโปรเจ็กต์ Secundus ให้ดูผลลัพธ์ของภาระงานแรก รอ 3-5 นาทีเพื่อให้เวิร์กโหลดดำเนินการเสร็จสมบูรณ์และผลลัพธ์พร้อมใช้งานในที่เก็บข้อมูลบนคลาวด์
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
ผลลัพธ์ควรเป็น 3 เนื่องจากนี่คือจำนวนผู้ที่มาจากซีแอตเทิลซึ่งแสดงอยู่ในไฟล์ primus_customer_list.csv
เรียกใช้ภาระงานที่ 2
ในการดำเนินการเวิร์กโหลดครั้งที่ 2 เราจะค้นหาลูกค้าร่วมของ Primus Bank และ Secundus Bank ดังที่แสดงด้านล่างนี้ เวิร์กโหลดที่ 2 จะเรียกใช้คำสั่ง "list-common-customers" และระบบจะจัดเก็บผลลัพธ์ไว้ที่ $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\"]""
ดูผลลัพธ์
ในโปรเจ็กต์ Secundus ให้ดูผลลัพธ์ของภาระงานที่ 2 รอ 3-5 นาทีเพื่อให้เวิร์กโหลดดำเนินการเสร็จสมบูรณ์และผลลัพธ์พร้อมใช้งานในที่เก็บข้อมูลบนคลาวด์
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
ผลลัพธ์ควรเป็นรายชื่อต่อไปนี้ เนื่องจากเป็นลูกค้าร่วมกันระหว่าง Primus และ Secundus Bank
เอาต์พุต:
Eric
Clinton
Ashley
Cooper
เรียกใช้ภาระงานที่ไม่ได้รับอนุญาต
สัญญาของ Primus Bank ที่อนุญาตให้ Secundus Bank เข้าถึงข้อมูลของตนหมดอายุ ดังนั้น Primus Bank จึงอัปเดตเงื่อนไขแอตทริบิวต์เพื่ออนุญาตให้ใช้ VM ที่มีบัญชีบริการจากพาร์ทเนอร์รายใหม่คือ Tertius Bank
Primus Bank แก้ไขผู้ให้บริการพูล Workload Identity
ใน $PRIMUS_PROJECT_ID ให้อัปเดตเงื่อนไขแอตทริบิวต์สำหรับผู้ให้บริการข้อมูลประจำตัวของ Attestation Verifier เพื่อให้สิทธิ์ภาระงานในตำแหน่งใหม่
- ตั้งค่าโปรเจ็กต์เป็น $PRIMUS_PROJECT_ID
gcloud config set project $PRIMUS_PROJECT_ID
- ส่งออกรหัสโปรเจ็กต์ GCP ของ Tertius Bank โดยใช้คำสั่งด้านล่าง ต่อมา Primus Bank จะใช้ข้อมูลนี้เพื่ออัปเดตเงื่อนไขแอตทริบิวต์ของผู้ให้บริการ Workload Identity Pool ธนาคาร Primus จะไม่หยุดให้สิทธิ์บัญชีบริการของเวิร์กโหลด Secundus Bank ตอนนี้จะอนุญาตให้ใช้บัญชีบริการภาระงานของ Tertius Bank แล้ว
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
- อัปเดตผู้ให้บริการ OIDC ในพูล Workload Identity ในกรณีนี้
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accountsจะเปลี่ยนเป็น'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts.แทนที่จะให้สิทธิ์บัญชีบริการของเวิร์กโหลดจาก Secundus Bank ตอนนี้ระบบจะให้สิทธิ์บัญชีบริการของเวิร์กโหลดจาก Tertius Bank
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"
เรียกใช้ภาระงานอีกครั้ง
เมื่อ Secundus Bank พยายามเรียกใช้เวิร์กโหลดเดิม ระบบจะดำเนินการไม่สำเร็จ หากต้องการดูข้อผิดพลาด ให้ลบไฟล์ผลลัพธ์และอินสแตนซ์ VM ต้นฉบับ แล้วลองเรียกใช้เวิร์กโหลดอีกครั้ง
ลบไฟล์ผลลัพธ์และอินสแตนซ์ VM ที่มีอยู่
- ตั้งค่าโปรเจ็กต์เป็นโปรเจ็กต์
$SECUNDUS_PROJECT_ID
gcloud config set project $SECUNDUS_PROJECT_ID
- ลบไฟล์ผลลัพธ์
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
- ลบอินสแตนซ์ Confidential VM
gcloud compute instances delete ${WORKLOAD_VM2} --zone=${SECUNDUS_PROJECT_ZONE}
เรียกใช้ภาระงานที่ไม่ได้รับอนุญาต
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\"]""
ดูข้อผิดพลาด
คุณเห็นข้อผิดพลาด (The given credential is rejected by the attribute condition) แทนผลลัพธ์ของภาระงาน
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
ในทำนองเดียวกัน หาก Primus Bank แก้ไขเวิร์กโหลดอย่างลับๆ เพื่อส่งรายชื่อลูกค้าทั้งหมดของ Secundus Bank ไปยังที่เก็บข้อมูลที่ Primus Bank เป็นเจ้าของ ความพยายามดังกล่าวจะล้มเหลวเนื่องจากข้อมูลสรุปของเวิร์กโหลดที่เป็นอันตรายจะแตกต่างจากข้อมูลสรุปของอิมเมจที่ได้รับอนุญาตในกลุ่ม Workload Identity ของ Secundus Bank
5. ล้าง
ที่นี่คือสคริปต์ที่ใช้ล้างข้อมูลทรัพยากรที่เราสร้างขึ้นเป็นส่วนหนึ่งของ Codelab นี้ได้ การล้างข้อมูลนี้จะลบทรัพยากรต่อไปนี้
- ที่เก็บข้อมูลระบบคลาวด์ของ Primus Bank (
$PRIMUS_INPUT_STORAGE_BUCKET) - บัญชีบริการของ Primus Bank (
$PRIMUS_SERVICE_ACCOUNT) - รีจิสทรีอาร์ติแฟกต์ของ Primus Bank ซึ่งมีลายเซ็นรูปภาพ (
$PRIMUS_COSIGN_REPOSITORY) - Workload Identity Pool ของ Primus Bank(
$PRIMUS_WORKLOAD_IDENTITY_POOL) - บัญชีบริการของภาระงานของ Secundus Bank (
$WORKLOAD_SERVICE_ACCOUNT) - ที่เก็บข้อมูลระบบคลาวด์ของ Secundus Bank (
$SECUNDUS_INPUT_STORAGE_BUCKET) - บัญชีบริการของ Secundus Bank (
$SECUNDUS_SERVICE_ACCOUNT) - รีจิสทรีอาร์ติแฟกต์ของ Secundus Bank ซึ่งมีลายเซ็นรูปภาพ (
$SECUNDUS_COSIGN_REPOSITORY) - พูล Workload Identity ของ Secundus Bank(
$SECUNDUS_WORKLOAD_IDENTITY_POOL) - บัญชีบริการของภาระงานของ Secundus Bank (
$WORKLOAD_SERVICE_ACCOUNT) - อินสแตนซ์การประมวลผลของภาระงาน
- ที่เก็บข้อมูลผลลัพธ์ของ Secundus Bank (
$SECUNDUS_RESULT_STORAGE_BUCKET) - ที่เก็บอาร์ติแฟกต์ของ Primus Bank (
$PRIMUS_ARTIFACT_REPOSITORY)
./cleanup.sh
หากสำรวจเสร็จแล้ว โปรดพิจารณาลบโปรเจ็กต์
- ไปที่คอนโซล Cloud Platform
- เลือกโปรเจ็กต์ที่ต้องการปิด แล้วคลิก "ลบ" ที่ด้านบน ซึ่งจะเป็นการกำหนดเวลาให้ลบโปรเจ็กต์
ขอแสดงความยินดี
ยินดีด้วย คุณทำ Codelab เสร็จเรียบร้อยแล้ว
คุณได้เรียนรู้วิธีรักษาความปลอดภัยของข้อมูลที่แชร์ในขณะที่ยังคงรักษาความเป็นส่วนตัวไว้โดยใช้ Confidential Space
สิ่งต่อไปที่ควรทำ
ลองดู Codelab ที่คล้ายกันเหล่านี้
- Codelab เกี่ยวกับอิมเมจคอนเทนเนอร์ที่ลงชื่อ
- วิธีทำธุรกรรมเนื้อหาดิจิทัลด้วยการประมวลผลแบบหลายฝ่ายและพื้นที่ลับ
- วิเคราะห์ข้อมูลที่เป็นความลับด้วยพื้นที่ลับ
อ่านเพิ่มเติม
- รู้สึกโดดเดี่ยวใช่ไหม Confidential Computing ช่วยได้
- การประมวลผลข้อมูลแบบเป็นความลับใน GCP
- Confidential Space: อนาคตของการทำงานร่วมกันที่รักษาความเป็นส่วนตัว
- วิธีที่ Google และ Intel ทำให้การประมวลผลแบบเป็นความลับปลอดภัยยิ่งขึ้น
- ความเป็นส่วนตัวเทียบกับความก้าวหน้า - การรักษาความปลอดภัยที่ดียิ่งขึ้นด้วยการประมวลผลแบบเป็นความลับของ Google Cloud