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:

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 thành viên đố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 Lượt chuyển đổi dẫn đến lượt bán hàng tại cửa hàng thực tế trên Google Ads
Sự kiện Sự kiện được gửi dưới dạng 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 nguồn dữ liệu bổ sung đến một đích đến trên Google Analytics đích đến

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 của 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 trên đám mây 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
  3. Để thiết lập dự án trong môi trường của bạn, hãy sử dụng gcloud config set lệnh. Để 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 chưa thiết lập 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ề Cloud Key Management Service.

  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 bài viết Tạo một bộ khoá.

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

    Ví dụ: để xoay vòng khoá 30 ngày một lần và thực hiện lần xoay vòng đầ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 bài viết Tạo khoá.

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

Phần này là phần tổng quan ngắn gọn về Workload Identity Federation. Để biết thêm thông tin, hãy xem Liên kết Workload Identity.

  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 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"
    
  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ò trình 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 sang phần 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 kết quả cho quá trình 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 tất 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 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"
    

    Hãy lưu ý Arn trong KeyMetadata ở kết quả. 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 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 tạo bí danh, nhưng bí danh sẽ hữu ích khi tạo các lệnh trong Giao diện dòng lệnh của AWS. Ví dụ: bạn có thể truy xuất ARN khoá bằng bí danh:

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

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

Tạo 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"

Hãy lưu ý ARN nhà cung cấp OIDC trong kết quả. Bạn sẽ cần ARN này trong các bước khác.

AWS_OIDC_PROVIDER_ARN

Tạo 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 chính sách IAM bằ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
    

    Hãy lưu ý ARN chính sách IAM trong kết quả. Bạn sẽ cần ARN 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 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 vai trò IAM với tên vai trò mà 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

Quá 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á mã hoá khoá (KEK) của Google Cloud hoặc AWS KMS. Bạn gửi DEK đã mã hoá, URI KEK và nhà cung cấp WIP 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ự như khi bạn 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 một 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ác bước sau:

  1. Mã hoá các byte băm bằng phương thức mã hoá Base64.
  2. Mã hoá giá trị băm được mã hoá dưới dạng Base64 bằng DEK.
  3. Mã hoá kết quả từ quá trình mã hoá bằng phương thức mã hoá hex hoặc Base64.
  4. Sử dụng giá trị đã mã hoá cho trường.
  5. Đặt encryption_infoencoding cho 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 của mình:

  • Đặ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à một đoạn mã của yêu cầu sử dụng khoá Google Cloud KMS và các trường mã hoá và mã hoá được thiết lập:

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

Kiểm tra thông tin chẩn đoán về các vấn đề mã hoá

Sau khi tải dữ liệu đã mã hoá lên, hãy sử dụng thông tin chẩn đoán để kiểm tra mọi cảnh báo liên quan đến quá trình mã hoá, chẳng hạn như PROCESSING_WARNING_REASON_KEK_PERMISSION_DENIED hoặc PROCESSING_WARNING_REASON_DEK_DECRYPTION_ERROR. Giải quyết mọi cảnh báo trong thông tin chẩn đoán, gửi lại yêu cầu và xác minh rằng thông tin chẩn đoán không còn trả về cảnh báo sau khi bạn thay đổi.