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

Data Manager API hỗ trợ mã hoá dữ liệu bằng các dịch vụ quản lý khoá sau đây:

Khả năng hỗ trợ cho một số trường hợp sử dụng sẽ khác nhau tuỳ theo dịch vụ quản lý khoá (KMS):

Danh mục Trường hợp sử dụng Google Cloud KMS AWS KMS
Đối tượng Gửi cho thành viên thuộc đối tượng
Sự kiện Lượt chuyển đổi ngoại tuyến hoặc lượt chuyển đổi nâng cao cho khách hàng tiềm năng
Sự kiện Sự kiện được gửi dưới dạng một nguồn dữ liệu bổ sung đến một đích đến trên Google Ads
Sự kiện Sự kiện được gửi dưới dạng một nguồn dữ liệu bổ sung đến một đích đến Google Analytics

Thiết lập Google Cloud KMS

Sau đây là các bước thiết lập tài nguyên Google Cloud KMS để 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. Để 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 Bật Cloud KMS.

    Bật Cloud KMS
  3. Để 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 bài viết Tổng quan về Dịch vụ quản lý khoá trên đám mây.

  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 cung cấp 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 phần 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"
    
  4. Nếu bạn muốn mã hoá dữ liệu sự kiện cho lượt chuyển đổi ngoại tuyến và lượt chuyển đổi nâng cao cho khách hàng tiềm năng, hãy cấp vai trò người giải mã khoá cho tài khoản dịch vụ Google datamanager-api@datamanager-ga.iam.gserviceaccount.com.

    # Grants the role to the Google service account.
    gcloud kms keys add-iam-policy-binding KEY_NAME \
        --keyring KEY_RING_NAME \
        --location KEY_RING_LOCATION \
        --member "serviceAccount:datamanager-api@datamanager-ga.iam.gserviceaccount.com" \
        --role "roles/cloudkms.cryptoKeyDecrypter"
    

Chuyển đến mục Mã hoá dữ liệu.

Thiết lập AWS KMS

Sau đây là các bước thiết lập tài nguyên AWS KMS để mã hoá.

Thiết lập Giao diện dòng lệnh của AWS

  1. Cài đặt Giao diện dòng lệnh của AWS.
  2. Chạy lệnh sau để xác minh quá trình cài đặt:

    aws --version
    

    Dưới đây là một đoạn mã của đầu ra cho một lượt cài đặt thành công:

    aws-cli/2.31.12 Python/3.13.7 ...
    

Thiết lập người dùng AWS và đăng nhập

  1. Hoàn thành các điều kiện tiên quyết để sử dụng Giao diện dòng lệnh của AWS.
  2. Đăng nhập vào một phiên IAM Identity Center.

Tạo khoá

  1. Tạo khoá KMS đối xứng (KEK).

    aws kms create-key \
      --key-usage ENCRYPT_DECRYPT \
      --key-spec SYMMETRIC_DEFAULT \
      --description "KEK for Confidential Matching Data Encryption"
    

    Lưu ý Arn trong KeyMetadata ở đầu ra. Bạn sẽ cần Tên tài nguyên Amazon (ARN) này trong các bước khác.

    AWS_KEY_ARN
    
  2. Không bắt buộc: Tạo một bí danh khoá bằng tên bí danh mà bạn chọn.

    aws kms create-alias \
      --alias-name "alias/AWS_KEY_ALIAS" \
      --target-key-id AWS_KEY_ARN
    

    Bạn không bắt buộc phải có bí danh, nhưng bí danh rất hữu ích khi tạo các lệnh Giao diện dòng lệnh của AWS. Ví dụ: bạn có thể truy xuất ARN khoá bằng cách sử dụng bí danh:

    aws kms describe-key --key-id "alias/AWS_KEY_ALIAS" \
      --query 'KeyMetadata.Arn' \
      --output text
    

Tạo một nhà cung cấp danh tính OpenID Connect

Tạo một nhà cung cấp danh tính OpenID Connect (OIDC). Bạn chỉ cần thực hiện bước này một lần cho mỗi tài khoản AWS.

aws iam create-open-id-connect-provider \
  --url https://confidentialcomputing.googleapis.com \
  --client-id-list AUDIENCE \
  --thumbprint-list "08745487e891c19e3078c1f2a07e452950ef36f6"

Ghi lại ARN của nhà cung cấp OIDC trong đầu ra. Bạn sẽ cần thông tin này trong các bước khác.

AWS_OIDC_PROVIDER_ARN

Tạo một chính sách IAM

  1. Tạo một tệp JSON có tên là kms-decrypt-policy.json với nội dung sau:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "kms:Decrypt",
          "Resource": "AWS_KEY_ARN"
        }
      ]
    }
    
  2. Tạo một chính sách IAM bằng cách sử dụng tệp JSON và tên chính sách mà bạn chọn.

    aws iam create-policy \
      --policy-name "AWS_POLICY_NAME" \
      --policy-document file://kms-decrypt-policy.json
    

    Lưu ý ARN chính sách IAM trong đầu ra. Bạn sẽ cần thông tin này trong các bước khác.

    AWS_IAM_POLICY_ARN
    

Tạo và đính kèm vai trò IAM

  1. Tạo một tệp JSON có tên là role-trust-policy.json với nội dung sau và ARN của nhà cung cấp OIDC từ bước trước:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Federated": "AWS_OIDC_PROVIDER_ARN"
                },
                "Action": [
                    "sts:AssumeRoleWithWebIdentity",
                    "sts:TagSession"
                ],
                "Condition": {
                    "StringEquals": {
                        "confidentialcomputing.googleapis.com:aud": "cfm-awsresource",
                        "aws:RequestTag/swname": "CONFIDENTIAL_SPACE",
                        "aws:RequestTag/container.signatures.key_ids": "6b1f357b59e9407fb017ca0e3e783b2bd5acbfea6c83dd82971a4150df5b25f9"
                    },
                    "StringLike": {
                        "aws:RequestTag/confidential_space.support_attributes": "*STABLE*"
                    }
                }
            }
        ]
    }
    
  2. Tạo một vai trò IAM với tên vai trò do bạn chọn.

    aws iam create-role \
      --role-name "AWS_IAM_ROLE_NAME" \
      --assume-role-policy-document file://role-trust-policy.json
    
  3. Đính kèm chính sách vai trò vào chính sách IAM.

    aws iam attach-role-policy \
      --role-name "AWS_IAM_ROLE_NAME" \
      --policy-arn "AWS_IAM_POLICY_ARN"
    

Mã hoá dữ liệu

Quy trình mã hoá trong Data Manager API yêu cầu phải có 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á KMS của Google Cloud hoặc AWS. 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ác nguyên tắc định dạng và băm tương tự 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á.

Sau đây là một đoạn mã của yêu cầu sử dụng khoá Google Cloud KMS và 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.