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

วิธีส่งข้อมูลที่เข้ารหัสมีดังนี้

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

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

  2. หากต้องการเลือกหรือสร้างโปรเจ็กต์ Google Cloud ใหม่และเปิดใช้ Cloud Key Management Service ให้คลิกเปิดใช้ Cloud KMS

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

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

    gcloud config set project PROJECT_ID
    

สร้างคีย์

ดูข้อมูลเพิ่มเติมได้ที่ภาพรวมของ Cloud Key Management Service

  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 Pool

ส่วนนี้เป็นภาพรวมสั้นๆ ของการรวมศูนย์ข้อมูล 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 Pool อาร์กิวเมนต์ --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. เข้ารหัสเอาต์พุตจากกระบวนการเข้ารหัสโดยใช้การเข้ารหัสแบบเลขฐานสิบหกหรือ 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