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

Sau đây là cách gửi dữ liệu đã mã hoá:

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 của 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 mới trên Google Cloud và bật Cloud Key Management Service, hãy nhấp vào Enable Cloud KMS (Bật Cloud KMS).

    Bật Cloud KMS
  4. Để thiết lập dự án trong môi trường của bạn, hãy 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 xem phần 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ờ mà lần xoay đầu tiên sẽ diễn ra.

    Ví dụ: để xoay vòng khoá sau mỗi 30 ngày và thực hiện lần xoay vòng đầu tiên sau 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 một 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 danh tính tải. Để biết thêm thông tin, hãy xem Tài liệu về Liên kết danh tính tải.

  1. Tạo một 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 bài viết Quản lý nhóm danh tính tải và nhà cung cấp.

  2. Tạo một 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ò tiện ích 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

Quy trình mã hoá trong Data Manager API yêu cầu 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ủa bạn đượ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 cùng nguyên tắc định dạng và băm mà bạn sẽ sử dụng cho dữ liệu chưa mã hoá.

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

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

  1. Mã hoá các byte băm bằng phương thức mã hoá Base64.
  2. Mã hoá hàm băm được mã hoá dưới dạng Base64 bằng DEK.
  3. Mã hoá đầu ra từ quy trình mã hoá bằng cách sử dụng phương thức mã hoá hex hoặc Base64.
  4. Sử dụng giá trị được 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 hoặc IngestEventsRequest để 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 được mã hoá.

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

{
  ...
  "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à các tiện ích Data Manager API để tạo và gửi yêu cầu, hãy xem mẫu mã IngestAudienceMembersWithEncryption cho Java hoặc mẫu mã ingest_audience_members_with_encryption cho Python.