使用客户管理的加密密钥 (CMEK) 加密数据

本页介绍了如何使用客户管理的加密密钥 (CMEK) 对存储在 AML AI 实例中的数据进行加密。

概览

AML AI 实例中的所有客户数据都会使用 CMEK 密钥进行静态加密。您可以在 Cloud Key Management Service (Cloud KMS) 中管理该密钥,并使用 Identity and Access Management 控制对该密钥的访问权限。如果您暂时停用或永久销毁 CMEK 密钥,则无法访问使用该密钥加密的数据。

AML AI 仅支持使用 Cloud KMS 的 CMEK。不支持 Google 默认加密。

借助 CMEK,您可以控制密钥的生命周期和管理的更多方面,但 Cloud KMS 服务也会产生额外费用

Cloud KMS 可以在 AML AI 所在的 Google Cloud 项目中运行,也可以在用于集中管理多个项目密钥的另一个项目中运行。

您可以在创建实例时设置加密配置。实例创建后,您将无法再分配其他 Cloud KMS 密钥。您仍然可以轮替密钥

如需大致了解 CMEK,请参阅 Cloud KMS 文档

保护级别

Cloud KMS 可让您从多种不同的保护级别中进行选择,包括:

  • 软件密钥
  • 使用 Cloud HSM 的硬件安全模块 (HSM)

了解如何在 AML AI 中配置 CMEK。并非所有保护级别都适用于所有区域。请注意,AML AI 不支持客户提供的加密密钥 (CSEK) 或 Cloud External Key Manager。

客户数据

AML AI 处理的所有客户数据都会使用相应父级实例资源中指定的 CMEK 密钥进行静态加密。这包括与 AML AI 资源(例如数据集、引擎配置、模型等)相关联的所有客户数据。客户数据的所有临时和永久存储空间(包括输入和输出的副本、生成的机器学习特征、模型超参数、模型权重和预测结果)均使用相应实例的 CMEK 密钥进行加密。

如需了解客户数据的定义,请参阅服务专用条款。客户数据可能不包括资源标识符、属性或其他数据标签。

加密输入和输出数据

实例中的 AML AI 加密配置仅适用于 AML AI 资源及其数据。AML AI 不会管理 Google Cloud 项目中输入或输出数据的加密。如果您希望使用 CMEK 对此类数据进行加密,则必须设置 Cloud KMS 密钥,使其与您在 BigQuery 数据集上配置的密钥保护级别相匹配。您也可以重复使用 AML AI 使用的密钥。

不妨详细了解 BigQuery 中的加密

密钥轮替

定期自动轮替密钥是推荐的安全做法。使用 CMEK 时,密钥轮替由您控制。轮替密钥时,使用之前的密钥版本加密的数据不会自动使用新的密钥版本重新加密。

单个 AML AI 资源在内部可能存储为多个单元。如果在 AML AI 资源的生命周期内轮替密钥版本,则可能并非所有单元都使用相同的密钥版本进行加密。

如果您轮替密钥,AML AI 将无法强制重新加密或确定是否可以安全地删除旧版密钥。

详细了解如何使用 Cloud KMS 进行密钥轮替

创建密钥并授予权限

以下说明介绍了如何为实例创建密钥,以及如何授予使用该密钥加密和解密实例数据的权限。您可以使用直接在 Cloud KMS 中创建的密钥,也可以使用由 Cloud External Key Manager 提供的外部管理的密钥。

  1. 在您要用于管理密钥的 Google Cloud 项目中,执行以下操作:

    1. 启用 Cloud KMS API

    2. 使用 projects.locations.keyRings.create 方法创建密钥环。Cloud KMS 密钥环位置必须与您要加密的实例的位置相匹配。

      REST

      在使用任何请求数据之前,请先进行以下替换:

      • KMS_PROJECT_ID:包含密钥串的项目的 Google Cloud 项目 ID
      • LOCATION:密钥环的位置;请使用某个受支持的地区
        显示位置
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID:用户定义的密钥环标识符

      如需发送请求,请选择以下方式之一:

      curl

      执行以下命令:

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d "" \
      "https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING_ID"

      PowerShell

      执行以下命令:

      $cred = gcloud auth print-access-token
      $headers = @{ "Authorization" = "Bearer $cred" }

      Invoke-WebRequest `
      -Method POST `
      -Headers $headers `
      -Uri "https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING_ID" | Select-Object -Expand Content

      您应该收到类似以下内容的 JSON 响应:

      {
        "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID",
        "createTime": "2023-03-14T15:52:55.358979323Z"
      }
      

      gcloud

      在使用下面的命令数据之前,请先进行以下替换:

      • KMS_PROJECT_ID:包含密钥串的项目的 Google Cloud 项目 ID
      • LOCATION:密钥环的位置;请使用某个受支持的地区
        显示位置
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID:用户定义的密钥环标识符

      执行以下命令:

      Linux、macOS 或 Cloud Shell

      gcloud kms keyrings create KEY_RING_ID \
        --project KMS_PROJECT_ID --location LOCATION

      Windows (PowerShell)

      gcloud kms keyrings create KEY_RING_ID `
        --project KMS_PROJECT_ID --location LOCATION

      Windows (cmd.exe)

      gcloud kms keyrings create KEY_RING_ID ^
        --project KMS_PROJECT_ID --location LOCATION
      您应该会收到一个空响应:
      $

    3. 使用 projects.locations.keyRings.cryptoKeys 方法创建密钥。

      REST

      在使用任何请求数据之前,请先进行以下替换:

      • KMS_PROJECT_ID:包含密钥串的项目的 Google Cloud 项目 ID
      • LOCATION:密钥环的位置;请使用某个受支持的地区
        显示位置
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID:用户定义的密钥环标识符
      • KEY_ID:用户定义的密钥标识符

      请求 JSON 正文:

      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      

      如需发送请求,请选择以下方式之一:

      curl

      将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

      cat > request.json << 'EOF'
      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      EOF

      然后,执行以下命令以发送 REST 请求:

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d @request.json \
      "https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys?crypto_key_id=KEY_ID"

      PowerShell

      将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

      @'
      {
        "purpose": "ENCRYPT_DECRYPT"
      }
      '@  | Out-File -FilePath request.json -Encoding utf8

      然后,执行以下命令以发送 REST 请求:

      $cred = gcloud auth print-access-token
      $headers = @{ "Authorization" = "Bearer $cred" }

      Invoke-WebRequest `
      -Method POST `
      -Headers $headers `
      -ContentType: "application/json; charset=utf-8" `
      -InFile request.json `
      -Uri "https://cloudkms.googleapis.com/v1/projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys?crypto_key_id=KEY_ID" | Select-Object -Expand Content

      您应该收到类似以下内容的 JSON 响应:

      {
        "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys/KEY_ID",
        "primary": {
          "name": "projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_ID/cryptoKeys/KEY_ID/cryptoKeyVersions/1",
          "state": "ENABLED",
          "createTime": "2023-03-14T15:52:55.358979323Z",
          "protectionLevel": "SOFTWARE",
          "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
          "generateTime": "2023-03-14T15:52:55.358979323Z"
        },
        "purpose": "ENCRYPT_DECRYPT",
        "createTime": "2023-03-14T15:52:55.358979323Z",
        "versionTemplate": {
          "protectionLevel": "SOFTWARE",
          "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
        },
        "destroyScheduledDuration": "86400s"
      }
      

      gcloud

      在使用下面的命令数据之前,请先进行以下替换:

      • KMS_PROJECT_ID:包含密钥串的项目的 Google Cloud 项目 ID
      • LOCATION:密钥环的位置;请使用某个受支持的地区
        显示位置
        • us-central1
        • us-east1
        • asia-south1
        • europe-west1
        • europe-west2
        • europe-west4
        • northamerica-northeast1
        • southamerica-east1
        • australia-southeast1
      • KEY_RING_ID:用户定义的密钥环标识符
      • KEY_ID:用户定义的密钥标识符

      执行以下命令:

      Linux、macOS 或 Cloud Shell

      gcloud kms keys create KEY_ID \
        --keyring KEY_RING_ID \
        --project KMS_PROJECT_ID \
        --location LOCATION \
        --purpose "encryption"

      Windows (PowerShell)

      gcloud kms keys create KEY_ID `
        --keyring KEY_RING_ID `
        --project KMS_PROJECT_ID `
        --location LOCATION `
        --purpose "encryption"

      Windows (cmd.exe)

      gcloud kms keys create KEY_ID ^
        --keyring KEY_RING_ID ^
        --project KMS_PROJECT_ID ^
        --location LOCATION ^
        --purpose "encryption"
      您应该会收到一个空响应:
      $

  2. 如果您尚未在 AML AI 项目中创建 AML AI 实例,则 AML AI 服务账号尚不存在。创建服务账号。

    在使用下面的命令数据之前,请先进行以下替换:

    • PROJECT_ID:运行 AML AI 的项目的 Google Cloud 项目 ID

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud beta services identity create --service=financialservices.googleapis.com --project=PROJECT_ID

    Windows (PowerShell)

    gcloud beta services identity create --service=financialservices.googleapis.com --project=PROJECT_ID

    Windows (cmd.exe)

    gcloud beta services identity create --service=financialservices.googleapis.com --project=PROJECT_ID

    您应该会收到类似如下所示的响应:

    Service identity created: service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com

  3. 向 AML AI 服务账号授予 CryptoKey Encrypter/Decrypter IAM 角色 (roles/cloudkms.cryptoKeyEncrypterDecrypter)。为您创建的密钥授予此权限。

    在使用下面的命令数据之前,请先进行以下替换:

    • PROJECT_ID:运行 AML AI 的项目的 Google Cloud 项目 ID
    • KEY_ID:用户定义的密钥标识符
    • LOCATION:密钥环的位置;请使用某个受支持的地区
      显示位置
      • us-central1
      • us-east1
      • asia-south1
      • europe-west1
      • europe-west2
      • europe-west4
      • northamerica-northeast1
      • southamerica-east1
      • australia-southeast1
    • KEY_RING_ID:用户定义的密钥环标识符
    • PROJECT_NUMBER:运行 AML AI 的项目的 Google Cloud 项目编号

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud kms keys add-iam-policy-binding KEY_ID --project=PROJECT_ID \
      --location LOCATION --keyring=KEY_RING_ID \
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter

    Windows (PowerShell)

    gcloud kms keys add-iam-policy-binding KEY_ID --project=PROJECT_ID `
      --location LOCATION --keyring=KEY_RING_ID `
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com `
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter

    Windows (cmd.exe)

    gcloud kms keys add-iam-policy-binding KEY_ID --project=PROJECT_ID ^
      --location LOCATION --keyring=KEY_RING_ID ^
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com ^
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter

    您应该会收到类似如下所示的响应:

    Updated IAM policy for key KEY_ID.
    bindings:
    - members:
      - serviceAccount:service-PROJECT_NUMBER@gcp-sa-financialservices.iam.gserviceaccount.com
      role: roles/cloudkms.cryptoKeyEncrypterDecrypter
    etag: BwYCq0Sq4Ho=
    version: 1
    

    如需详细了解此命令,请参阅 gcloud kms keys add-iam-policy-binding 文档。

您现在可以创建实例并指定要用于加密的密钥。

移除访问权限

您可以通过多种方式从采用 CMEK 加密的实例中移除对密钥的访问权限:

我们建议您先撤消 AML AI 服务账号的权限,然后再停用或销毁密钥。权限的更改会在数秒内传播,因此您可以观察停用或销毁密钥造成的影响。

停用或销毁实例的加密密钥后,您将无法使用或检索与实例关联的客户数据。实例中存储的所有客户数据都将无法访问,包括模型、引擎配置、回测结果和预测结果。具有任何 AML AI 查看器角色的用户仍然可以查看实例名称或检索 AML AI 资源返回的其他资源字段等字段。

任何使用或导出客户数据的操作(例如导出 backtestResults 元数据)都将失败。

具有 AML AI Administrator 角色或 Owner 角色的用户可以删除实例。

CMEK 组织政策

AML AI 不支持 CMEK 组织政策。不过,无论 constraints/gcp.restrictNonCmekServices 组织政策如何,AML AI 始终都需要使用 CMEK。

与 VPC-SC 交互

如果您已在 VPC-SC 边界内配置 AML AI,则服务账号仍必须能够访问 CMK 密钥。如果密钥不在同一 VPC-SC 边界内,则可以通过多种方式实现此目的,包括:

  • 使用出站规则将资源列入许可名单
  • 使用 VPC 边界对等互连

后续步骤