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

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

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

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

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

    gcloud components update
    
  3. หากต้องการเลือกหรือสร้างโปรเจ็กต์ Google Cloud ใหม่และเปิดใช้ Cloud Key Management Service ให้คลิกเปิดใช้ 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 Pool

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

  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 หรือ IngestEventsRequest เพื่อระบุว่าคุณเข้ารหัส ข้อมูลแล้ว

  • ตั้งค่าฟิลด์ 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