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

รักษาความปลอดภัยของข้อมูลที่แชร์ซึ่งใช้กับพื้นที่ทำงานที่ปลอดภัย

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ พ.ย. 22, 2024
account_circleเขียนโดย Priya Pandey, Jiankun Lu, Meetrajsinh Vala

1 ภาพรวม

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

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

สิ่งที่ต้องมี

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

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

fdef93a6868a976.png

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

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

$PRIMUS_WORKLOAD_IDENTITY_POOL

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

$PRIMUS_WIP_PROVIDER

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

$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 หากไม่ได้ตั้งค่าตัวแปร ระบบจะสร้างชื่อทรัพยากรในระบบคลาวด์จาก project-name และสร้างทรัพยากรใหม่ในระบบคลาวด์โดยเป็นส่วนหนึ่งของการดำเนินการต่อไปนี้

$SECUNDUS_INPUT_STORAGE_BUCKET

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

$SECUNDUS_WORKLOAD_IDENTITY_POOL

พูล Workload Identity (WIP) ของธนาคาร Secundus ที่ตรวจสอบการอ้างสิทธิ์

$SECUNDUS_WIP_PROVIDER

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

$SECUNDUS_SERVICE_ACCOUNT

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

$SECUNDUS_ENC_KEY

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

$SECUNDUS_ENC_KEYRING

กระเป๋าสตางค์ KMS ที่ใช้สร้างคีย์การเข้ารหัส $SECUNDUS_ENV_KEY สำหรับธนาคาร Secundus

$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 ที่นี่เป็นไฟล์ตัวอย่างที่ใช้ในโค้ดแล็บนี้
  • คุณจะต้องมีสิทธิ์บางอย่างสำหรับโปรเจ็กต์ 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 ให้อัปเดตเงื่อนไขแอตทริบิวต์สำหรับผู้ให้บริการระบุตัวตนของผู้ตรวจสอบการรับรองเพื่อให้สิทธิ์ภาระงานในตำแหน่งใหม่

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

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

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