Mã hoá dữ liệu người dùng

Dưới đây là cách gửi dữ liệu đã mã hoá trong các yêu cầu truyền dẫn thành viên đối tượng.

Thiết lập giao diện dòng lệnh Google Cloud

  1. Cài đặt và khởi chạy giao diện dòng lệnh Google Cloud.

  2. Để đảm bảo các thành phần gcloud của bạn luôn mới nhất, hãy chạy lệnh sau.

    gcloud components update
    
  3. Để chọn hoặc tạo một dự án Google Cloud mới và bật Dịch vụ quản lý khoá trên đám mây, hãy nhấp vào Bật Cloud KMS.

    Bật Cloud KMS
  4. Để thiết lập dự án trong môi trường, hãy sử dụng lệnh gcloud config set. Để kiểm tra xem dự án đã được thiết lập trong môi trường của bạn hay chưa, hãy chạy gcloud config list.

    Nếu bạn không đặt project hoặc muốn sử dụng một dự án khác cho khoá của mình, hãy chạy gcloud config set:

    gcloud config set project PROJECT_ID
    

Tạo khoá

Để biết thêm thông tin, hãy xem tài liệu về Dịch vụ quản lý khoá.

  1. Tạo một bộ khoá.

    gcloud kms keyrings create KEY_RING_NAME \
        --location KEY_RING_LOCATION
    

    Để biết thêm thông tin, hãy Tạo bộ khoá.

  2. Tạo một khoá trong bộ khoá. ROTATION_PERIOD cho biết khoảng thời gian để xoay khoá và NEXT_ROTATION_TIME cho biết ngày và giờ diễn ra lần xoay đầu tiên.

    Ví dụ: để xoay khoá mỗi 30 ngày và thực hiện lần xoay đầu tiên trong 1 tuần, hãy đặt ROTATION_PERIOD thành 30dNEXT_ROTATION_TIME thành $(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"
    

    Để biết thêm thông tin, hãy xem phần Tạo khoá.

Tạo nhà cung cấp nhóm danh tính tải

Phần này là thông tin tổng quan ngắn gọn về tính năng Liên kết thông tin nhận dạng theo khối lượng công việc. Để biết thêm thông tin, hãy xem tài liệu về Liên minh danh tính tải trọng.

  1. Tạo nhóm danh tính tải (WIP). location cho nhóm phải là global.

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

    Để biết thêm thông tin, hãy xem phần Quản lý nhóm danh tính tải và nhà cung cấp.

  2. Tạo nhà cung cấp nhóm danh tính tải. Đối số --attribute-condition xác minh rằng phương thức gọi là tài khoản dịch vụ so khớp bí mật.

    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. Cấp vai trò trình giải mã khoá cho nhà cung cấp 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"
    

Mã hoá dữ liệu

Tính năng mã hoá trong API Trình quản lý dữ liệu yêu cầu một khoá mã hoá dữ liệu (DEK). DEK là một khoá đối xứng mà bạn dùng để mã hoá dữ liệu. DEK được mã hoá bằng khoá Google Cloud KMS. Bạn gửi DEK đã mã hoá trong yêu cầu.

Để chuẩn bị dữ liệu trong yêu cầu mã hoá, hãy làm theo nguyên tắc định dạng và băm giống như bạn sử dụng cho dữ liệu chưa mã hoá.

Không mã hoá các giá trị chưa băm. Ví dụ: region_code hoặc postal_code của AddressInfo.

Sau khi định dạng và băm dữ liệu cho từng trường, hãy mã hoá giá trị đã băm bằng các bước sau:

  1. Mã hoá các byte băm bằng cách sử dụng phương thức mã hoá Base64.
  2. Mã hoá hàm băm được mã hoá Base64 bằng DEK.
  3. Mã hoá đầu ra của quá trình mã hoá bằng cách sử dụng phương thức mã hoá thập lục phân hoặc Base64.
  4. Sử dụng giá trị đã mã hoá cho trường.
  5. Đặt encryption_infoencoding trên yêu cầu.

Để hoàn tất bước cuối cùng, hãy sửa đổi IngestAudienceMembersRequest để cho biết bạn đã mã hoá dữ liệu:

  • Đặt trường encryption_info.
  • Đặt trường encoding thành phương thức mã hoá dùng để mã hoá các giá trị trường đã mã hoá.

Dưới đây là đoạn mã của một yêu cầu đã đặt các trường mã hoá và mã hoá:

{
  ...
  "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"
}

Để sử dụng thư viện và tiện ích API Trình quản lý dữ liệu nhằm tạo và gửi yêu cầu, hãy xem mã mẫu IngestAudienceMembersWithEncryption cho Java hoặc mã mẫu ingest_audience_members_with_encryption cho Python.