用于工作空间存储的客户管理密钥

要将客户管理的键用于工作空间存储,工作空间必须位于Databricks平台E2版本bob体育客户端下载.所有新的Databricks帐户和大多数现有帐户现在都是E2,在这种情况下,您可以创建新的E2工作空间。帐户中一些较旧的工作空间可能不是E2,因此无法向这些工作空间添加用于工作空间存储的客户管理密钥。如果您不确定您拥有的帐户类型或工作区的版本,请与Databricks代表联系。该功能还需要企业定价层。

工作区数据平面vpc可以位于AWS区域ap-northeast-1ap-northeast-2ap-south-1ap-southeast-1ap-southeast-2ca-central-1一来就eu-west-2eu-central-1us-east-1us-east-2us-west-1,us-west-2

重要的

不能使用VPCus-west-1如果你想用的话customer-managed键为加密。

简介

为了进一步控制数据,您可以添加自己的密钥来保护和控制对某些类型数据的访问。Databricks有两个客户管理的关键特性,涉及不同类型的数据和位置。有关比较,请参见客户管理的加密密钥

虽然Databricks可以加密其他数据,但您可以为工作空间存储添加客户管理的密钥,以保护和控制对以下类型加密数据的访问:

  • 您的工作区的根S3桶:如果您添加了工作区存储加密密钥,则Databricks将对AWS帐户中的Amazon S3桶中的数据进行加密您在设置工作区时指定的,有时称为工作空间的根S3桶。此桶包含您的工作区DBFS根,其中包括工作区库和FileStore区域,MLflow模型,Delta Live TableDBFS根目录中的数据(不是DBFS坐骑).该桶还包括工作区的系统数据,其中包括作业结果、Databricks SQL结果、笔记本修订和其他一些工作区数据。

  • 您集群的EBS卷(可选):针对Databricks Runtime集群节点和其他计算资源经典数据平面,您可以选择使用该密钥加密虚拟机的远程EBS卷。

    重要的

    无服务器SQL仓库不使用客户管理密钥进行EBS存储加密,这是用于工作空间存储特性的客户管理密钥的可选部分。用于无服务器计算资源的磁盘寿命很短,并且与无服务器工作负载的生命周期紧密相关。例如,当无服务器SQL仓库停止或缩小规模时,虚拟机及其存储将被销毁。看到无服务器计算和客户管理密钥

请注意

对象中的数据不受此特性影响控制飞机.参见客户管理的密钥管理服务

在为工作空间添加客户管理的密钥加密后,Databricks将使用您的密钥加密对根S3桶中的工作空间存储数据的将来写入操作。现有数据不会重新加密。如果选择让密钥帮助加密EBS实例卷,则该密钥仅应用于新的或重新启动的集群。

此功能将影响您的DBFS根数据存放在根S3桶中,但不用于加密数据附加DBFS挂载例如额外的S3桶。DBFS根目录包含工作区库和FileStore区域。注意,对于S3 DBFS挂载,有用密钥写入加密数据的其他方法

为了帮助诊断问题,如果您使用此功能,Databricks建议您使用在根S3桶上启用CloudTrail S3对象级日志记录

关于更新或共享密钥的其他注意事项:

  • 在为存储添加了客户管理的密钥之后,您以后不能通过为工作区设置不同的密钥ARN来旋转密钥。但是,AWS提供了自动CMK主键旋转,它在不改变键ARN的情况下旋转底层键如AWS文档中所述.自动CMK主密钥旋转与Databricks客户管理的存储密钥兼容。

  • 你可以共享一个AWS KMS密钥或者一个数据库关键配置用于跨工作空间的工作空间存储加密。

  • 您可以选择在两个不同的加密用例之间共享Databricks密钥配置对象(引用您的密钥):此特性(工作空间存储)和用于托管服务的客户管理密钥.在这两种情况下,您都可以将密钥及其Databricks密钥配置添加到Databricks工作空间工作区创建或者稍后添加,但只有托管服务支持稍后旋转(更新)密钥。

  • 如果已经为现有工作空间启用托管服务加密,则可以共享工作空间存储的密钥,但必须这样做创建并注册一个新的密钥配置使用相同的密钥ARN作为工作空间存储。

本文描述如何向运行中的工作空间添加用于工作空间存储的加密密钥。要使用工作空间存储加密创建新工作空间,请参见使用Account API创建一个新的工作空间.那篇文章描述了如何在两个加密用例之间有选择地共享密钥配置:工作区存储和用于托管服务的客户管理密钥

方法添加加密密钥Databricks Terraform提供商而且databricks_mws_customer_managed_keys

步骤1:创建或选择密钥

  1. 中的说明,在AWS KMS中创建或选择对称密钥创建对称cmk查看键

    重要的

    KMS密钥必须位于与工作区相同的AWS区域中。

  2. 复制这些值,你在后面的步骤中需要:

    • 关键是:从控制台或API获取ARN在攻击字段中的JSON响应)。

    • 关键的别名:别名用于指定CMK在AWS KMS中的显示名称。在加密操作中使用别名来标识CMK。有关更多信息,请参阅AWS文档:AWS:公里:别名而且使用别名

  3. 关键政策页签,切换到策略视图。编辑密钥策略,使Databricks可以使用该密钥执行加密和解密操作。

    选择下面的选项卡并单击复制.仅当不希望使用此密钥加密集群EBS卷时,才选择第二个选项卡。

    中将JSON添加到键策略中“声明”部分。

    “席德”允许Databricks对DBFS使用KMS密钥“效应”“允许”“校长”:{“AWS”“攻击:aws:我::414351767826:根”},“行动”“公里:加密”“公里:解密”公里:ReEncrypt *”公里:GenerateDataKey *”“公里:DescribeKey”),“资源”“*”“条件”“StringEquals”“aws: PrincipalTag / DatabricksAccountId”“< databricks-account-id > (s)”},“席德”允许Databricks对DBFS使用KMS密钥(授予)“效应”“允许”“校长”:{“AWS”“攻击:aws:我::414351767826:根”},“行动”“公里:CreateGrant”“公里:ListGrants”“公里:RevokeGrant”),“资源”“*”“条件”“StringEquals”“aws: PrincipalTag / DatabricksAccountId”“< databricks-account-id > (s)”},“Bool”“公里:GrantIsForAWSResource”“真正的”},“席德”允许数据库在EBS上使用KMS密钥“效应”“允许”“校长”“AWS”“< aws-arn-for-your-credentials >”},“行动”“公里:解密”公里:GenerateDataKey *”“公里:CreateGrant”“公里:DescribeKey”),“资源”“*”“条件”“ForAnyValue: StringLike”“公里:ViaService”“ec2 * .amazonaws.com”。
    “席德”允许Databricks对DBFS使用KMS密钥“效应”“允许”“校长”:{“AWS”“攻击:aws:我::414351767826:根”},“行动”“公里:加密”“公里:解密”公里:ReEncrypt *”公里:GenerateDataKey *”“公里:DescribeKey”),“资源”“*”“条件”“StringEquals”“aws: PrincipalTag / DatabricksAccountId”“< databricks-account-id > (s)”},“席德”允许Databricks对DBFS使用KMS密钥(授予)“效应”“允许”“校长”:{“AWS”“攻击:aws:我::414351767826:根”},“行动”“公里:CreateGrant”“公里:ListGrants”“公里:RevokeGrant”),“资源”“*”“条件”“StringEquals”“aws: PrincipalTag / DatabricksAccountId”“< databricks-account-id > (s)”},“Bool”“公里:GrantIsForAWSResource”“真正的”

    请注意

    要检索Databricks帐户ID,请转到账户控制台然后单击侧边栏底部的用户图标。在这里您可以看到并复制ID。

    有关更多信息,请参阅AWS文章编辑键

步骤2:使用Account API创建一个新的密钥配置

  1. 要向Databricks注册KMS密钥,请调用创建客户管理的密钥配置API帖子/账户/ <帐户id > / customer-managed-keys),它会创建Databricks密钥配置。

    传递以下参数:

    • use_cases:设置为以下只有一个元素的JSON数组["存储"].注意,如果您正在创建新的工作空间,您可以为两个用例创建一个单一的键配置(参见使用Account API创建一个新的工作空间).

    • aws_key_info:具有以下属性的JSON对象:

      • key_arn: AWS KMS密钥ARN。请注意,Databricks从关键ARN推断AWS区域。

      • key_alias: (可选AWS KMS密钥别名。

      • reuse_key_for_cluster_volumes: (可选)如果use_case数组中包含了存储,这指定是否也使用密钥加密集群EBS卷。默认值为真正的,这意味着Databricks也将该密钥用于集群卷。如果你把这个设为, Databricks不会使用指定的密钥加密EBS卷。在这种情况下,您的Databricks EBS卷将使用默认的AWS SSE加密或启用加密默认情况下,AWS帐户级EBS加密, AWS使用您提供给它们的单独密钥强制执行帐户级EBS加密。注意,如果reuse_key_for_cluster_volumes真正的当您撤销该密钥的权限时,它不会影响正在运行的集群,但会影响新的和重新启动的集群。

      示例请求:

      curl -X POST -n“https://accounts.cloud.www.neidfyre.com/api/2.0/accounts/ < databricks-account-id > / customer-managed-keys '- d”{“use_cases”:“存储”," aws_key_info ": {:“key_arn攻击:aws:公里:us-west-2: < aws-account-id >:键/ <键id >”,:“key_alias my-example-key”,“reuse_key_for_cluster_volumes”:真的} '

      示例响应:

      “use_cases”“存储”),“customer_managed_key_id”“< aws-kms-key-id >”“creation_time”1586447506984“account_id”“< databricks-account-id >”“aws_key_info”“key_arn”“攻击:aws:公里:us-west-2: < aws-account-id >:键/ <键id >”“key_alias”“my-example-key”“reuse_key_for_cluster_volumes”真正的“key_region”“us-west-2”
  2. 从响应中复制customer_managed_key_id用于第4步。

步骤3:为跨帐户IAM角色添加访问策略(可选)

如果您的KMS密钥在不同的AWS帐户中跨帐号IAM角色用于部署您的工作空间,那么您必须向该跨帐户IAM角色添加策略。此策略允许Databricks访问您的密钥。如果您的KMS密钥与用于部署工作空间的跨帐户IAM角色在同一个AWS帐户中,则不需要执行此步骤。

  1. 以具有管理员权限的用户登录AWS管理控制台,然后转到控制台。

  2. 2 .在左侧导航区单击角色

  3. 在角色列表中,单击跨帐号IAM角色你为Databricks创建的。

  4. 添加内联策略。

    1. 权限选项卡上,单击添加内联策略

      内联政策
    2. 在策略编辑器中,单击JSON选项卡。

      JSON编辑器
    3. 复制下面的访问策略

      “席德”"AllowUseOfCMKInAccount< AccountIdOfCrossAccountIAMRole >"“效应”“允许”“行动”“公里:解密”公里:GenerateDataKey *”“公里:CreateGrant”“公里:DescribeKey”),“资源”“攻击:aws:公里:<地区>:< AccountIdOfKMSKey >:键/ < KMSKeyId >”“条件”“ForAnyValue: StringLike”“公里:ViaService”“ec2 * .amazonaws.com”。
    4. 点击审查政策

    5. 的名字字段,输入策略名称。

    6. 点击创建政策

步骤4:关闭所有集群

终止所有正在运行的集群、池和SQL仓库。

步骤5:使用Account API使用您的密钥配置更新工作空间

使用数据库帐户API 2.0更新您的工作空间。

调用Account API操作更新工作区补丁/账户/ {account_id} /工作区/ {workspace_id}).您需要传递的惟一请求参数是storage_customer_managed_key_id财产。将其设置为customer_managed_key_id从JSON响应中注册密钥配置

例如:

curl -X PATCH -n“https://accounts.cloud.www.neidfyre.com/api/2.0/accounts/ < databricks-account-id > /工作区/ < workspace-id >”- d”{:“storage_customer_managed_key_id < databricks-key-config-id >”,} '

步骤6:等待密钥信息传播

在API更新后至少等待20分钟。

重要的

在此期间,不能启动任何集群。

步骤7:重新启动集群

重新启动在上一步中终止的所有集群、池和SQL仓库。