เกี่ยวกับ Codelab นี้
1 ภาพรวม
พื้นที่ทำงานที่ปลอดภัยมีการแชร์และทำงานร่วมกันกับหลายฝ่ายอย่างปลอดภัย ทั้งยังช่วยให้องค์กรรักษาความลับของข้อมูลได้ ซึ่งหมายความว่าองค์กรต่างๆ สามารถทำงานร่วมกันได้ในขณะที่ยังคงควบคุมข้อมูลและปกป้องข้อมูลจากการเข้าถึงที่ไม่ได้รับอนุญาต
พื้นที่ส่วนบุคคลจะปลดล็อกสถานการณ์ที่คุณต้องการรับคุณค่าร่วมกันจากการรวบรวมและวิเคราะห์ข้อมูลที่ละเอียดอ่อนซึ่งมักอยู่ภายใต้การควบคุมดูแลของรัฐ ขณะเดียวกันก็ยังคงควบคุมข้อมูลดังกล่าวได้อย่างเต็มที่ พื้นที่ทำงานที่ปลอดภัยช่วยให้องค์กรต่างๆ ได้รับคุณค่าร่วมกันจากการรวบรวมและวิเคราะห์ข้อมูลที่ละเอียดอ่อน เช่น ข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII) ข้อมูลสุขภาพที่ได้รับการคุ้มครอง (PHI) ทรัพย์สินทางปัญญา และข้อมูลลับที่เข้ารหัส ขณะเดียวกันก็ยังคงควบคุมข้อมูลดังกล่าวได้อย่างเต็มที่
สิ่งที่ต้องมี
- โปรเจ็กต์ Google Cloud Platform
- เบราว์เซอร์ เช่น Chrome หรือ Firefox
- ความรู้พื้นฐานเกี่ยวกับ Google Compute Engine ( codelab), VM ที่มีข้อมูลลับ, คอนเทนเนอร์ และที่เก็บข้อมูลระยะไกล
- ความรู้พื้นฐานเกี่ยวกับ Cloud KMS ( codelab)
- ความรู้พื้นฐานเกี่ยวกับบัญชีบริการ การรวมศูนย์ Workload Identity และเงื่อนไขแอตทริบิวต์
สิ่งที่คุณจะได้เรียนรู้
- วิธีกำหนดค่าทรัพยากรในระบบคลาวด์ที่จำเป็นสำหรับเรียกใช้พื้นที่ทำงานที่มีข้อมูลลับ
- วิธีเรียกใช้เวิร์กโหลดใน VM ที่เป็นความลับซึ่งใช้รูปภาพ VM ของพื้นที่ทำงานที่เป็นความลับ
- วิธีให้สิทธิ์เข้าถึงทรัพยากรที่ได้รับการปกป้องตามแอตทริบิวต์ของโค้ดภาระงาน (สิ่งที่) สภาพแวดล้อมของพื้นที่ทำงานที่ปลอดภัย (ตำแหน่ง) และบัญชีที่เรียกใช้ภาระงาน (ผู้ใช้)
ในโค้ดแล็บนี้ คุณจะต้องสร้างพื้นที่ส่วนบุคคลระหว่าง Primus Bank กับ Secundus Bank เพื่อระบุลูกค้าร่วมกันโดยไม่ต้องแชร์รายการบัญชีทั้งหมด ซึ่งประกอบด้วยขั้นตอนต่อไปนี้
- ขั้นตอนที่ 1: ตั้งค่าทรัพยากรระบบคลาวด์ที่จําเป็นสําหรับธนาคาร Primus และ Secundus ทรัพยากรระบบคลาวด์เหล่านี้รวมถึงที่เก็บข้อมูลระบบคลาวด์ คีย์ KMS, Workload Identity Pool และบัญชีบริการของ Primus และ Secundus Banks 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 เพื่อให้สิทธิ์ภาระงานในการเข้าถึงข้อมูลลูกค้าตามแอตทริบิวต์ของบุคคลที่เรียกใช้ภาระงาน การดำเนินการของภาระงาน และตำแหน่งที่เรียกใช้ภาระงาน
- ขั้นตอนที่ 5: เมื่อภาระงานทำงาน ภาระงานจะขอสิทธิ์เข้าถึงทรัพยากรระบบคลาวด์ของผู้ร่วมให้ข้อมูล (Primus Bank และ Secundus Bank) โดยเสนอโทเค็นบริการโปรแกรมตรวจสอบการรับรองพร้อมการอ้างสิทธิ์ภาระงานและสภาพแวดล้อม หากการอ้างสิทธิ์การวัดผลภาระงานในโทเค็นตรงกับเงื่อนไขแอตทริบิวต์ใน Workload Identity Pool ของ Primus และ Secundus Banks ระบบจะแสดงโทเค็นการเข้าถึงบัญชีบริการที่มีสิทธิ์เข้าถึงทรัพยากรระบบคลาวด์ที่เกี่ยวข้อง เฉพาะเวิร์กโหลดที่ทำงานภายในพื้นที่ทำงานที่มีข้อมูลลับเท่านั้นที่จะเข้าถึงทรัพยากรในระบบคลาวด์ได้
- ขั้นตอนที่ 5(ก): เรียกใช้เวิร์กโหลดแรกซึ่งนับลูกค้าของ Primus Bank จากสถานที่ที่เฉพาะเจาะจง สำหรับเวิร์กโหลดนี้ Primus Bank จะเป็นผู้ทำงานร่วมกันด้านข้อมูลและผู้เขียนเวิร์กโหลด ซึ่งจะให้รายชื่อลูกค้าที่เข้ารหัสแก่เวิร์กโหลดที่ทำงานในพื้นที่ทำงานที่ปลอดภัย Secundus Bank จะเป็นผู้ให้บริการระบบเวิร์กโหลดและจะเรียกใช้เวิร์กโหลดในพื้นที่ทำงานที่ปลอดภัย
- ขั้นตอนที่ 5(ข): เรียกใช้เวิร์กโหลดที่ 2 ซึ่งจะค้นหาลูกค้าทั่วไปของธนาคาร Primus และ Secundus สำหรับภาระงานนี้ Primus Bank และ Secundus Bank จะเป็นทั้งผู้ทำงานร่วมกันด้านข้อมูล โดยจะให้รายชื่อลูกค้าที่เข้ารหัสไว้กับเวิร์กโหลดที่ทำงานในพื้นที่ทำงานที่ปลอดภัย Secundus Bank จะเป็นผู้ให้บริการเวิร์กโหลดอีกครั้ง ธนาคาร Secundus จะเป็นผู้ให้สิทธิ์สำหรับเวิร์กโหลดนี้ด้วย เนื่องจากเวิร์กโหลดต้องเข้าถึงรายชื่อลูกค้าที่เข้ารหัสของธนาคาร Secundus เพื่อค้นหาลูกค้าทั่วไปด้วย ในกรณีนี้ 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 ได้ที่ โค้ดแล็บนี้ โปรดดูรายละเอียดเกี่ยวกับวิธีเรียกข้อมูลรหัสโปรเจ็กต์และความแตกต่างระหว่างรหัสโปรเจ็กต์กับชื่อโปรเจ็กต์และหมายเลขโปรเจ็กต์ได้ที่นี่
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 หากไม่ได้ตั้งค่าตัวแปร ระบบจะสร้างชื่อทรัพยากรระบบคลาวด์จาก project-name และสร้างทรัพยากรระบบคลาวด์ใหม่เป็นส่วนหนึ่งของการดำเนินการต่อไปนี้
| ที่เก็บข้อมูลซึ่งจัดเก็บไฟล์ข้อมูลลูกค้าของ Primus Bank |
| พูล Workload Identity (WIP) ของ Primus Bank ที่ตรวจสอบการอ้างสิทธิ์ |
| ผู้ให้บริการ Workload Identity Pool ของ Primus Bank ซึ่งมีเงื่อนไขการให้สิทธิ์เพื่อใช้กับโทเค็นที่ Service Verifier ของการรับรองลงนาม |
| บัญชีบริการของ Primus Bank ที่ |
| คีย์ KMS ที่ใช้เข้ารหัสข้อมูลที่จัดเก็บไว้ใน |
| กระเป๋าสตางค์ KMS ที่จะใช้สําหรับสร้างคีย์การเข้ารหัส |
| ที่เก็บอาร์ติแฟกต์ที่จะพุชอิมเมจ Docker ของเวิร์กโหลด |
- คุณสามารถตั้งค่าตัวแปรต่อไปนี้ด้วยชื่อทรัพยากรระบบคลาวด์ที่มีอยู่ได้ในโปรเจ็กต์ Secundus หากตั้งค่าตัวแปร ระบบจะใช้ทรัพยากรระบบคลาวด์ที่มีอยู่ที่เกี่ยวข้องจากโปรเจ็กต์ Secundus หากไม่ได้ตั้งค่าตัวแปร ระบบจะสร้างชื่อทรัพยากรในระบบคลาวด์จาก project-name และสร้างทรัพยากรใหม่ในระบบคลาวด์โดยเป็นส่วนหนึ่งของการดำเนินการต่อไปนี้
| ที่เก็บข้อมูลที่จัดเก็บไฟล์ข้อมูลลูกค้าของ Secundus Bank |
| พูล Workload Identity (WIP) ของธนาคาร Secundus ที่ตรวจสอบการอ้างสิทธิ์ |
| ผู้ให้บริการ Workload Identity Pool ของ Secundus Bank ซึ่งมีเงื่อนไขการให้สิทธิ์เพื่อใช้กับโทเค็นที่ Service Verifier ของการรับรองลงนาม |
| บัญชีบริการของธนาคาร Secundus ที่ |
| คีย์ KMS ที่ใช้เข้ารหัสข้อมูลที่จัดเก็บไว้ใน |
| กระเป๋าสตางค์ KMS ที่ใช้สร้างคีย์การเข้ารหัส |
| ที่เก็บข้อมูลที่จัดเก็บผลลัพธ์ของภาระงาน |
| ชื่ออิมเมจคอนเทนเนอร์ของภาระงาน |
| แท็กของอิมเมจคอนเทนเนอร์ของภาระงาน |
| บัญชีบริการที่มีสิทธิ์เข้าถึง VM ข้อมูลที่เป็นความลับซึ่งเรียกใช้ภาระงาน |
- มีอาร์ติแฟกต์บางส่วนที่ใช้เป็นส่วนหนึ่งของโค้ดแล็บนี้ตามที่ระบุไว้ด้านล่าง
primus_customer_list.csv
: ไฟล์ที่มีข้อมูลลูกค้าของ Primus Bank ที่นี่เป็นไฟล์ตัวอย่างที่ใช้ในโค้ดแล็บนี้secundus_customer_list.csv
: ไฟล์ที่มีข้อมูลลูกค้าของธนาคาร Secundus ที่นี่เป็นไฟล์ตัวอย่างที่ใช้ในโค้ดแล็บนี้- คุณจะต้องมีสิทธิ์บางอย่างสำหรับโปรเจ็กต์ 2 รายการนี้
- สำหรับ
$PRIMUS_PROJECT_ID
คุณจะต้องมีผู้ดูแลระบบ Cloud KMS, ผู้ดูแลระบบพื้นที่เก็บข้อมูล, ผู้ดูแลระบบรีจิสทรีอาร์ติแฟกต์, ผู้ดูแลระบบบัญชีบริการ, ผู้ดูแลระบบพูล Workload Identity ของ IAM - สำหรับ
$SECUNDUS_PROJECT_ID
คุณจะต้องมีผู้ดูแลระบบ Compute, ผู้ดูแลระบบพื้นที่เก็บข้อมูล, ผู้ดูแลระบบบัญชีบริการ, ผู้ดูแลระบบ Cloud KMS, ผู้ดูแลระบบพูล Workload Identity ของ IAM, ผู้ดูแลระบบความปลอดภัย (ไม่บังคับ) - เรียกใช้สคริปต์ต่อไปนี้เพื่อตั้งค่าชื่อตัวแปรที่เหลือเป็นค่าตามรหัสโปรเจ็กต์สำหรับชื่อทรัพยากร
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
) ที่แนบกับพูลข้อมูลระบุตัวตนของเวิร์กโหลดที่กล่าวถึงข้างต้น ($PRIMUS_WORKLOAD_IDENTITY_POOL
) มีสิทธิ์เข้าถึงเพื่อถอดรหัสข้อมูลโดยใช้คีย์ KMS (โดยใช้บทบาทroles/cloudkms.cryptoKeyDecrypter
) อ่านข้อมูลจากที่เก็บข้อมูลระบบคลาวด์ (โดยใช้บทบาทobjectViewer
) และเชื่อมต่อบัญชีบริการกับพูลข้อมูลระบุตัวตนของเวิร์กโหลด (โดยใช้roles/iam.workloadIdentityUser
)
./setup_primus_bank_resources.sh
ตั้งค่าทรัพยากรระบบคลาวด์สำหรับ Secundus Bank
สำหรับธนาคาร Secundus คุณต้องใช้ทรัพยากรระบบคลาวด์ต่อไปนี้ เรียกใช้สคริปต์นี้เพื่อตั้งค่าทรัพยากรของธนาคาร Secundus ขั้นตอนนี้จะสร้างทรัพยากรต่อไปนี้
- ที่เก็บข้อมูล Cloud Storage (
$SECUNDUS_INPUT_STORAGE_BUCKET
) เพื่อจัดเก็บไฟล์ข้อมูลลูกค้าที่เข้ารหัสของ Secundus Bank - คีย์การเข้ารหัส (
$SECUNDUS_ENC_KEY
) และพวงกุญแจ ($SECUNDUS_ENC_KEYRING
) ใน KMS เพื่อเข้ารหัสไฟล์ข้อมูลของธนาคาร Secundus - Workload Identity Pool (
$SECUNDUS_WORKLOAD_IDENTITY_POOL
) เพื่อตรวจสอบการอ้างสิทธิ์ตามเงื่อนไขแอตทริบิวต์ที่กำหนดค่าไว้ภายใต้ผู้ให้บริการ - บัญชีบริการ (
$SECUNDUS_SERVICE_ACCOUNT
) ที่แนบกับพูลข้อมูลระบุตัวตนของเวิร์กโหลดที่กล่าวถึงข้างต้น ($SECUNDUS_WORKLOAD_IDENTITY_POOL
) มีสิทธิ์เข้าถึงเพื่อถอดรหัสข้อมูลโดยใช้คีย์ KMS (โดยใช้บทบาทroles/cloudkms.cryptoKeyDecrypter
) อ่านข้อมูลจากที่เก็บข้อมูลระบบคลาวด์ (โดยใช้บทบาทobjectViewer
) และเชื่อมต่อบัญชีบริการกับพูลข้อมูลระบุตัวตนของเวิร์กโหลด (โดยใช้บทบาท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
แก่บัญชีบริการของภาระงาน ซึ่งจะช่วยให้สภาพแวดล้อมของพื้นที่ทำงานที่ปลอดภัยเขียนบันทึกไปยัง Cloud Logging ได้นอกเหนือจากคอนโซลอนุกรม เพื่อให้บันทึกพร้อมใช้งานหลังจากที่ VM สิ้นสุดการทำงาน objectViewer
เพื่ออ่านข้อมูลจากที่เก็บข้อมูลระบบคลาวด์$PRIMUS_INPUT_STORAGE_BUCKET
objectViewer
เพื่ออ่านข้อมูลจากที่เก็บข้อมูลระบบคลาวด์$SECUNDUS_INPUT_STORAGE_BUCKET
objectAdmin
เพื่อเขียนผลลัพธ์ของเวิร์กโหลดไปยังที่เก็บข้อมูลระบบคลาวด์$SECUNDUS_RESULT_STORAGE_BUCKET
./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 ต้องการให้สิทธิ์เวิร์กโหลดเข้าถึงข้อมูลลูกค้าตามแอตทริบิวต์ของทรัพยากรต่อไปนี้
- สิ่งที่เป็น: รหัสที่ได้รับการยืนยัน
- สถานที่: สภาพแวดล้อมที่ปลอดภัย
- Who: ผู้ให้บริการที่เชื่อถือได้
Primus ใช้การรวมข้อมูลระบุตัวตนของเวิร์กโหลดเพื่อบังคับใช้นโยบายการเข้าถึงตามข้อกำหนดเหล่านี้
การรวมศูนย์ข้อมูลระบบ Workload Identity ช่วยให้คุณระบุเงื่อนไขแอตทริบิวต์ได้ เงื่อนไขเหล่านี้จะจำกัดข้อมูลประจำตัวที่ตรวจสอบสิทธิ์กับ Workload Identity Pool (WIP) ได้ คุณสามารถเพิ่มบริการเครื่องตรวจสอบการรับรองลงใน WIP เป็นผู้ให้บริการ Workload Identity Pool เพื่อแสดงการวัดผลและบังคับใช้นโยบาย
มีการสร้าง Workload Identity Pool ไว้แล้วก่อนหน้านี้ในขั้นตอนการตั้งค่าทรัพยากรระบบคลาวด์ ตอนนี้ Primus Bank จะสร้างผู้ให้บริการพูล Workload Identity ของ OIDC ใหม่ --attribute-condition
ที่ระบุจะให้สิทธิ์เข้าถึงคอนเทนเนอร์ภาระงาน โดยต้องมีสิ่งต่อไปนี้
- สิ่งที่ทำ:
$WORKLOAD_IMAGE_NAME
ล่าสุดที่อัปโหลดไปยังที่เก็บ$PRIMUS_ARTIFACT_REPOSITORY
- ตำแหน่ง: สภาพแวดล้อมการดำเนินการที่เชื่อถือได้ของพื้นที่ทำงานที่เป็นความลับกำลังทำงานบนอิมเมจ VM ของพื้นที่ทำงานที่เป็นความลับที่รองรับอย่างเต็มรูปแบบ
- ผู้ส่ง: บัญชีบริการ
$WORKLOAD_SERVICE_ACCOUNT
ของธนาคาร 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"
เช่นเดียวกับ WIP ที่สร้างขึ้นสำหรับ Primus Bank ธนาคาร Secundus ต้องการให้สิทธิ์ภาระงานเข้าถึงข้อมูลลูกค้าตามเงื่อนไขต่อไปนี้
- สิ่งที่ทำ: ปริมาณงาน
- ตำแหน่ง: สภาพแวดล้อมของพื้นที่ทำงานที่เป็นความลับ
- ใคร: บัญชี (
$WORKLOAD_SERVICE_ACCOUNT
) ที่ใช้เวิร์กโหลด
Primus Bank ใช้การอ้างสิทธิ์ image_reference
ซึ่งรวมถึงแท็กรูปภาพ เพื่อพิจารณาว่าควรให้สิทธิ์เข้าถึงหรือไม่ ผู้ใช้ควบคุมที่เก็บข้อมูลระยะไกลได้ จึงมั่นใจได้ว่าจะติดแท็กเฉพาะรูปภาพที่ไม่มีการรั่วไหลข้อมูล
ในทางกลับกัน Secundus Bank ไม่ได้ควบคุมที่เก็บถาวรที่ใช้รับรูปภาพ จึงไม่สามารถทำการคาดเดาดังกล่าวได้อย่างปลอดภัย แต่เลือกให้สิทธิ์เข้าถึงเวิร์กโหลดตาม image_digest
แทน ซึ่งแตกต่างจาก image_reference
ที่ Primus Bank เปลี่ยนให้ชี้ไปยังรูปภาพอื่นได้ แต่ Primus Bank ไม่สามารถให้ image_digest
อ้างอิงรูปภาพอื่นนอกเหนือจากรูปภาพที่ Secundus Bank ตรวจสอบในขั้นตอนก่อนหน้า
ก่อนสร้างผู้ให้บริการพูล Workload Identity เราจะรวบรวม 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 จะเรียกใช้ภาระงานในพื้นที่ทำงานที่มีการรักษาความปลอดภัย ภาระงานนี้จะรับโทเค็นการเข้าถึงจากพูล Workload Identity ของ Primus และพูล Workload Identity ของ Secundus เพื่ออ่านและถอดรหัสข้อมูลลูกค้าของ Primus Bank และ Secundus Bank ตามลำดับ
ระบบจะส่งอาร์กิวเมนต์ TEE ที่จำเป็นโดยใช้แฟล็กข้อมูลเมตา ระบบจะส่งอาร์กิวเมนต์สำหรับคอนเทนเนอร์เวิร์กโหลดโดยใช้ส่วน "tee-cmd
" ของ Flag ระบบจะเผยแพร่ผลลัพธ์ของการดำเนินการเวิร์กโหลดไปยัง $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 เราจะค้นหาลูกค้าทั่วไปของ 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 หมดอายุ Primus Bank จึงอัปเดตเงื่อนไขแอตทริบิวต์เพื่ออนุญาตให้ VM ที่มีบัญชีบริการจากพาร์ทเนอร์รายใหม่อย่าง Tertius Bank เข้าถึงได้
Primus Bank แก้ไขผู้ให้บริการพูล Workload Identity
ใน $PRIMUS_PROJECT_ID
ให้อัปเดตเงื่อนไขแอตทริบิวต์สำหรับผู้ให้บริการระบุตัวตนของผู้ตรวจสอบการรับรองเพื่อให้สิทธิ์ภาระงานในตำแหน่งใหม่
- ตั้งค่าโปรเจ็กต์เป็น $PRIMUS_PROJECT_ID
gcloud config set project $PRIMUS_PROJECT_ID
- ส่งออกรหัสโปรเจ็กต์ GCP ของ Tertius Bank โดยใช้คำสั่งด้านล่าง หลังจากนั้น Primus Bank จะใช้ข้อมูลนี้เพื่ออัปเดตเงื่อนไขแอตทริบิวต์ของผู้ให้บริการพูล Workload Identity ธนาคาร Primus จะไม่หยุดให้สิทธิ์บัญชีบริการเวิร์กโหลดของธนาคาร Secundus โดยตอนนี้จะอนุญาตให้ใช้บัญชีบริการเวิร์กโหลดของ 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 แต่จะให้สิทธิ์บัญชีบริการเวิร์กโหลดจากธนาคาร Tertius แทน
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 พยายามเรียกใช้เวิร์กโหลดเดิม การดำเนินการก็ล้มเหลว หากต้องการดูข้อผิดพลาด ให้ลบไฟล์ผลลัพธ์ต้นฉบับและอินสแตนซ์ VM แล้วลองเรียกใช้เวิร์กโหลดอีกครั้ง
ลบไฟล์ผลลัพธ์และอินสแตนซ์ VM ที่มีอยู่
- ตั้งค่าโปรเจ็กต์เป็นโปรเจ็กต์
$SECUNDUS_PROJECT_ID
gcloud config set project $SECUNDUS_PROJECT_ID
- ลบไฟล์ผลลัพธ์
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
- ลบอินสแตนซ์ 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 เอง การดำเนินการดังกล่าวก็จะล้มเหลวเนื่องจากข้อมูลสรุปของเวิร์กโหลดที่เป็นอันตรายจะแตกต่างจากข้อมูลสรุปของรูปภาพที่ให้สิทธิ์ในพูลข้อมูลระบุตัวตนของเวิร์กโหลดของ Secundus Bank
5 ล้าง
ที่นี่เป็นสคริปต์ที่ใช้ล้างทรัพยากรที่เราสร้างขึ้นเป็นส่วนหนึ่งของ Codelab นี้ ในการล้างข้อมูลนี้ ระบบจะลบทรัพยากรต่อไปนี้
- ป้อนที่เก็บข้อมูลระบบคลาวด์ของ Primus Bank (
$PRIMUS_INPUT_STORAGE_BUCKET)
- บัญชีบริการของ Primus Bank (
$PRIMUS_SERVICE_ACCOUNT
) - รีจิสทรีอาร์ติแฟกต์ของ Primus Bank ซึ่งมีลายเซ็นรูปภาพ (
$PRIMUS_COSIGN_REPOSITORY
) - พูล Workload Identity ของ Primus Bank(
$PRIMUS_WORKLOAD_IDENTITY_POOL
) - บัญชีบริการภาระงานของธนาคาร Secundus (
$WORKLOAD_SERVICE_ACCOUNT
) - ป้อนที่เก็บข้อมูล Cloud Storage ของธนาคาร Secundus (
$SECUNDUS_INPUT_STORAGE_BUCKET)
- บัญชีบริการของธนาคาร Secundus (
$SECUNDUS_SERVICE_ACCOUNT
) - รีจิสทรีอาร์ติแฟกต์ของธนาคาร Secundus ซึ่งมีลายเซ็นรูปภาพ (
$SECUNDUS_COSIGN_REPOSITORY
) - พูล Workload Identity ของ Secundus Bank(
$SECUNDUS_WORKLOAD_IDENTITY_POOL
) - บัญชีบริการภาระงานของธนาคาร Secundus (
$WORKLOAD_SERVICE_ACCOUNT
) - อินสแตนซ์ Compute สำหรับภาระงาน
- ที่เก็บข้อมูลผลลัพธ์ของธนาคาร Secundus (
$SECUNDUS_RESULT_STORAGE_BUCKET
) - ที่เก็บอาร์ติแฟกต์ของ Primus Bank (
$PRIMUS_ARTIFACT_REPOSITORY
)
./cleanup.sh
หากสำรวจเสร็จแล้ว โปรดพิจารณาลบโปรเจ็กต์
- ไปที่คอนโซลแพลตฟอร์มระบบคลาวด์
- เลือกโปรเจ็กต์ที่ต้องการปิด แล้วคลิก "ลบ" ที่ด้านบน ซึ่งจะเป็นการกำหนดเวลาการลบโปรเจ็กต์
ยินดีด้วย
ยินดีด้วย คุณทำ Codelab เสร็จเรียบร้อยแล้ว
คุณได้เรียนรู้วิธีรักษาความปลอดภัยของข้อมูลที่แชร์ไปพร้อมกับรักษาความลับโดยใช้พื้นที่ทำงานที่ปลอดภัย
ขั้นตอนถัดไป
ลองดู Codelab ที่คล้ายกันเหล่านี้...
- Codelab เกี่ยวกับอิมเมจคอนเทนเนอร์ที่เซ็นชื่อกำกับ
- วิธีทำธุรกรรมสินทรัพย์ดิจิทัลด้วยการคำนวณแบบหลายฝ่ายและพื้นที่ทำงานที่เป็นความลับ
- วิเคราะห์ข้อมูลที่เป็นความลับด้วยพื้นที่ทำงานที่ปลอดภัย
อ่านเพิ่มเติม
- รู้สึกโดดเดี่ยวใช่ไหม การใช้ระบบประมวลผลข้อมูลที่เป็นความลับช่วยแก้ปัญหาได้
- การประมวลผลข้อมูลที่เป็นความลับใน GCP
- พื้นที่ทำงานที่เป็นความลับ: อนาคตของการทำงานร่วมกันที่รักษาความเป็นส่วนตัว
- วิธีที่ Google และ Intel ทําให้ระบบประมวลผลข้อมูลที่เป็นความลับปลอดภัยยิ่งขึ้น
- ความเป็นส่วนตัวกับการพัฒนา - ยกระดับความปลอดภัยด้วย Google Cloud Confidential Computing