เข้ารหัสข้อมูลผู้ใช้

วิธีส่งข้อมูลที่เข้ารหัสในคําขอส่งผ่านข้อมูลสมาชิกกลุ่มเป้าหมายมีดังนี้

ตั้งค่าอินเทอร์เฟซบรรทัดคำสั่งของ Google Cloud

  1. ติดตั้งและเริ่มต้นใช้งานอินเทอร์เฟซบรรทัดคำสั่งของ Google Cloud

  2. เรียกใช้คําสั่งต่อไปนี้เพื่อให้แน่ใจว่าคอมโพเนนต์ gcloud เป็นเวอร์ชันล่าสุด

    gcloud components update
    
  3. หากต้องการเลือกหรือสร้างโปรเจ็กต์ Google Cloud ใหม่และเปิดใช้บริการจัดการคีย์ในระบบคลาวด์ ให้คลิกเปิดใช้ Cloud KMS

    เปิดใช้ Cloud KMS
  4. หากต้องการตั้งค่าโปรเจ็กต์ในสภาพแวดล้อม ให้ใช้คำสั่ง gcloud config set หากต้องการตรวจสอบว่าระบบตั้งค่าโปรเจ็กต์ในสภาพแวดล้อมแล้วหรือยัง ให้เรียกใช้ gcloud config list

    หากไม่ได้ตั้งค่า project หรือต้องการใช้โปรเจ็กต์อื่นสำหรับคีย์ ให้เรียกใช้ gcloud config set ดังนี้

    gcloud config set project PROJECT_ID
    

สร้างคีย์

ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับบริการจัดการคีย์

  1. สร้างคีย์ริง

    gcloud kms keyrings create KEY_RING_NAME \
        --location KEY_RING_LOCATION
    

    โปรดดูข้อมูลเพิ่มเติมที่หัวข้อสร้างคีย์ริง

  2. สร้างคีย์ในคีย์ริง ROTATION_PERIOD ระบุช่วงเวลาที่จะหมุนคีย์ และ NEXT_ROTATION_TIME ระบุวันที่และเวลาที่ควรเริ่มการหมุนครั้งแรก

    ตัวอย่างเช่น หากต้องการหมุนเวียนคีย์ทุก 30 วันและทำการหมุนเวียนครั้งแรกใน 1 สัปดาห์ ให้ตั้งค่า ROTATION_PERIOD เป็น 30d และ NEXT_ROTATION_TIME เป็น $(date --utc --date="next week" --iso-8601=seconds)

    gcloud kms keys create KEY_NAME \
        --keyring KEY_RING_NAME \
        --location KEY_RING_LOCATION \
        --purpose "encryption" \
        --rotation-period ROTATION_PERIOD \
        --next-rotation-time "NEXT_ROTATION_TIME"
    

    ดูข้อมูลเพิ่มเติมได้ที่สร้างคีย์

สร้างผู้ให้บริการพูล Workload Identity

ส่วนนี้เป็นภาพรวมสั้นๆ ของการรวมศูนย์ข้อมูล Workload Identity ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับการรวม Workload Identity

  1. สร้าง Workload Identity Pool (WIP) location ของกลุ่มต้องมีค่าเป็น global

    gcloud iam workload-identity-pools create WIP_ID \
       --location=global \
       --display-name="WIP_DISPLAY_NAME" \
       --description="WIP_DESCRIPTION"
    

    ดูข้อมูลเพิ่มเติมได้ที่จัดการ Workload Identity Pool และผู้ให้บริการ

  2. สร้างผู้ให้บริการพูล Workload Identity อาร์กิวเมนต์ --attribute-condition จะยืนยันว่าผู้เรียกเป็นบัญชีบริการการจับคู่ข้อมูลแบบเป็นความลับ

    gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \
       --location=global \
       --workload-identity-pool=WIP_ID \
       --display-name="PROVIDER_DISPLAY_NAME" \
       --description="PROVIDER_DESCRIPTION" \
       --attribute-mapping="google.subject=assertion.sub,google.groups=[\"PROVIDER_ID\"]" \
       --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
         'STABLE' in assertion.submods.confidential_space.support_attributes &&
         ['cfm-services@admcloud-cfm-services.iam.gserviceaccount.com'].exists(
             a, a in assertion.google_service_accounts) &&
         'ECDSA_P256_SHA256:6b1f357b59e9407fb017ca0e3e783b2bd5acbfea6c83dd82971a4150df5b25f9'
         in assertion.submods.container.image_signatures.map(sig, sig.signature_algorithm+':'+sig.key_id)" \
       --issuer-uri="https://confidentialcomputing.googleapis.com" \
       --allowed-audiences="https://sts.googleapis.com"
    
  3. ให้บทบาทผู้ถอดรหัสคีย์แก่ผู้ให้บริการ WIP

    # Grants the role to the WIP provider.
    gcloud kms keys add-iam-policy-binding KEY_NAME \
        --keyring KEY_RING_NAME \
        --location KEY_RING_LOCATION \
        --member "principalSet://iam.googleapis.com/projects/PROJECT_ID/locations/global/workloadIdentityPools/WIP_ID/group/PROVIDER_ID" \
        --role "roles/cloudkms.cryptoKeyDecrypter"
    

เข้ารหัสข้อมูล

การเข้ารหัสใน Data Manager API ต้องใช้คีย์การเข้ารหัสข้อมูล (DEK) DEK คือคีย์แบบสมมาตรที่คุณใช้เข้ารหัสข้อมูล ระบบจะเข้ารหัส DEK โดยใช้คีย์ Google Cloud KMS คุณส่ง DEK ที่เข้ารหัสเป็นส่วนหนึ่งของคำขอ

หากต้องการเตรียมข้อมูลในคำขอเข้ารหัส ให้ทำตามหลักเกณฑ์การจัดรูปแบบและการแฮชเดียวกันกับที่ใช้สำหรับข้อมูลที่ไม่ได้เข้ารหัส

อย่าเข้ารหัสค่าที่ไม่ได้แฮช เช่น region_code หรือ postal_code ของ AddressInfo

เมื่อจัดรูปแบบและแฮชข้อมูลสำหรับแต่ละช่องแล้ว ให้เข้ารหัสค่าที่แฮชโดยใช้ขั้นตอนต่อไปนี้

  1. เข้ารหัสไบต์แฮชโดยใช้การเข้ารหัส Base64
  2. เข้ารหัสแฮชที่เข้ารหัส Base64 โดยใช้ DEK
  3. เข้ารหัสเอาต์พุตจากกระบวนการเข้ารหัสโดยใช้การเข้ารหัสฐาน 16 หรือ Base64
  4. ใช้ค่าที่เข้ารหัสสําหรับช่อง
  5. ตั้งค่า encryption_info และ encoding ในคำขอ

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

  • ตั้งค่าช่อง encryption_info
  • ตั้งค่าช่อง encoding เป็นการเข้ารหัสที่ใช้เข้ารหัสค่าของช่องที่เข้ารหัส

ต่อไปนี้คือตัวอย่างคำขอที่มีการตั้งค่าช่องการเข้ารหัสและการเข้ารหัส

{
  ...
  "encryptionInfo": {
    "gcpWrappedKeyInfo": {
      "kekUri": "gcp-kms://projects/PROJECT_ID/locations/KEY_RING_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME",
      "wipProvider": "projects/PROJECT_ID/locations/global/workloadIdentityPools/WIP_ID/providers/PROVIDER_ID",
      "keyType": "XCHACHA20_POLY1305",
      "encryptedDek": "ENCRYPTED_DEK"
    }
  },
  "encoding": "ENCODING"
}

หากต้องการใช้ไลบรารีและยูทิลิตีของ Data Manager API เพื่อสร้างและส่งคําขอ โปรดดูตัวอย่างโค้ด IngestAudienceMembersWithEncryption สําหรับ Java หรือตัวอย่างโค้ด ingest_audience_members_with_encryption สําหรับ Python