ใช้ข้อมูลที่แชร์อย่างปลอดภัยอยู่ใน Confidential Space

1. ภาพรวม

Confidential Space ช่วยให้การแชร์ข้อมูลและการทำงานร่วมกันแบบหลายฝ่ายเป็นไปอย่างปลอดภัย ในขณะที่ยังช่วยให้องค์กรสามารถรักษาความลับของข้อมูลได้ ซึ่งหมายความว่าองค์กรต่างๆ สามารถทำงานร่วมกันได้ในขณะที่ยังคงควบคุมข้อมูลของตนเองและปกป้องข้อมูลจากการเข้าถึงที่ไม่ได้รับอนุญาต

Confidential Space จะช่วยให้คุณได้รับประโยชน์ร่วมกันจากการรวบรวมและวิเคราะห์ข้อมูลที่ละเอียดอ่อนซึ่งมักจะอยู่ภายใต้การกำกับดูแล ในขณะที่ยังคงควบคุมข้อมูลได้อย่างเต็มที่ Confidential Space ช่วยให้องค์กรได้รับคุณค่าร่วมกันจากการรวบรวมและวิเคราะห์ข้อมูลที่ละเอียดอ่อน เช่น ข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII), ข้อมูลสุขภาพที่ได้รับการคุ้มครอง (PHI), ทรัพย์สินทางปัญญา และข้อมูลลับที่เข้ารหัส ในขณะที่ยังคงควบคุมข้อมูลดังกล่าวได้อย่างเต็มที่

สิ่งที่คุณต้องมี

สิ่งที่คุณจะได้เรียนรู้

  • วิธีกำหนดค่าทรัพยากรระบบคลาวด์ที่จำเป็นสำหรับการเรียกใช้ 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

fdef93a6868a976.png

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>
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_INPUT_STORAGE_BUCKET

ที่เก็บข้อมูลที่จัดเก็บไฟล์ข้อมูลลูกค้าของ Primus Bank

$PRIMUS_WORKLOAD_IDENTITY_POOL

Workload Identity Pool (WIP) ของ Primus Bank ที่ตรวจสอบการอ้างสิทธิ์

$PRIMUS_WIP_PROVIDER

ผู้ให้บริการ Workload Identity Pool ของ Primus Bank ซึ่งมีเงื่อนไขการให้สิทธิ์ที่จะใช้สำหรับโทเค็นที่ลงนามโดยบริการเครื่องมือตรวจสอบการรับรอง

$PRIMUS_SERVICE_ACCOUNT

บัญชีบริการของ Primus Bank ที่ $PRIMUS_WORKLOAD_IDENTITY_POOL ใช้เพื่อเข้าถึงทรัพยากรที่ได้รับการปกป้อง ในขั้นตอนนี้จะมีสิทธิ์ดูข้อมูลลูกค้าที่จัดเก็บไว้ในที่เก็บข้อมูล $PRIMUS_INPUT_STORAGE_BUCKET

$PRIMUS_ENC_KEY

คีย์ KMS ที่ใช้ในการเข้ารหัสข้อมูลที่จัดเก็บไว้ใน $PRIMUS_INPUT_STORAGE_BUCKET สำหรับ Primus Bank

$PRIMUS_ENC_KEYRING

พวงกุญแจ KMS ที่จะใช้สร้างคีย์การเข้ารหัส $PRIMUS_ENC_KEY สำหรับ Primus Bank

$PRIMUS_ARTIFACT_REPOSITORY

ที่เก็บที่เก็บอาร์ติแฟกต์ที่จะพุชอิมเมจ Docker ของเวิร์กโหลด

  • คุณตั้งค่าตัวแปรต่อไปนี้ได้โดยใช้ชื่อทรัพยากรระบบคลาวด์ที่มีอยู่ในโปรเจ็กต์ Secundus หากตั้งค่าตัวแปรไว้ ระบบจะใช้ทรัพยากรระบบคลาวด์ที่มีอยู่ซึ่งสอดคล้องกันจากโปรเจ็กต์ Secundus หากไม่ได้ตั้งค่าตัวแปร ระบบจะสร้างชื่อทรัพยากรระบบคลาวด์จากชื่อโปรเจ็กต์ และจะสร้างทรัพยากรระบบคลาวด์ใหม่เป็นส่วนหนึ่งของรายการต่อไปนี้

$SECUNDUS_INPUT_STORAGE_BUCKET

ที่เก็บข้อมูลที่จัดเก็บไฟล์ข้อมูลลูกค้าของ Secundus Bank

$SECUNDUS_WORKLOAD_IDENTITY_POOL

Workload Identity Pool (WIP) ของ Secundus Bank ที่ตรวจสอบการอ้างสิทธิ์

$SECUNDUS_WIP_PROVIDER

ผู้ให้บริการ Workload Identity Pool ของ Secundus Bank ซึ่งมีเงื่อนไขการให้สิทธิ์ที่จะใช้สำหรับโทเค็นที่ลงนามโดย Attestation Verifier Service

$SECUNDUS_SERVICE_ACCOUNT

บัญชีบริการของ Secundus Bank ที่ $SECUNDUS_WORKLOAD_IDENTITY_POOL ใช้เพื่อเข้าถึงทรัพยากรที่ได้รับการปกป้อง ในขั้นตอนนี้จะมีสิทธิ์ดูข้อมูลลูกค้าที่จัดเก็บไว้ในที่เก็บข้อมูล $SECUNDUS_INPUT_STORAGE_BUCKET

$SECUNDUS_ENC_KEY

คีย์ KMS ที่ใช้ในการเข้ารหัสข้อมูลที่จัดเก็บไว้ใน $SECUNDUS_INPUT_STORAGE_BUCKET สำหรับ Secundus Bank

$SECUNDUS_ENC_KEYRING

พวงกุญแจ KMS ที่ใช้สร้างคีย์การเข้ารหัส $SECUNDUS_ENV_KEY สำหรับ Secundus Bank

$SECUNDUS_RESULT_STORAGE_BUCKET

ที่เก็บข้อมูลที่จัดเก็บผลลัพธ์ของเวิร์กโหลด

$WORKLOAD_IMAGE_NAME

ชื่ออิมเมจคอนเทนเนอร์ของภาระงาน

$WORKLOAD_IMAGE_TAG

แท็กของอิมเมจคอนเทนเนอร์ของภาระงาน

$WORKLOAD_SERVICE_ACCOUNT

บัญชีบริการที่มีสิทธิ์เข้าถึง 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 เพื่อให้สิทธิ์ภาระงานในตำแหน่งใหม่

  1. ตั้งค่าโปรเจ็กต์เป็น $PRIMUS_PROJECT_ID
gcloud config set project $PRIMUS_PROJECT_ID
  1. ส่งออกรหัสโปรเจ็กต์ GCP ของ Tertius Bank โดยใช้คำสั่งด้านล่าง ต่อมา Primus Bank จะใช้ข้อมูลนี้เพื่ออัปเดตเงื่อนไขแอตทริบิวต์ของผู้ให้บริการ Workload Identity Pool ธนาคาร Primus จะไม่หยุดให้สิทธิ์บัญชีบริการของเวิร์กโหลด Secundus Bank ตอนนี้จะอนุญาตให้ใช้บัญชีบริการภาระงานของ Tertius Bank แล้ว
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
  1. อัปเดตผู้ให้บริการ 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 ที่มีอยู่

  1. ตั้งค่าโปรเจ็กต์เป็นโปรเจ็กต์ $SECUNDUS_PROJECT_ID
gcloud config set project $SECUNDUS_PROJECT_ID
  1. ลบไฟล์ผลลัพธ์
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
  1. ลบอินสแตนซ์ 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 ที่คล้ายกันเหล่านี้

อ่านเพิ่มเติม