管理外部位置和存储凭证

本文介绍外部位置和存储凭据,并解释如何创建和使用它们来管理对外部表的访问。

什么是外部位置和存储凭证?

外部位置和存储凭证允许Unity Catalog代表用户在云租户上读取和写入数据。这些对象用于:

一个存储凭证表示使用IAM角色访问存储在云租户上的数据的身份验证和授权机制。每个存储凭据都服从于Unity Catalog访问控制策略,该策略控制哪些用户和组可以访问凭据。如果用户没有访问Unity Catalog中的存储凭证,则请求失败,Unity Catalog不会尝试代表用户对云租户进行身份验证。

一个外部位置是将云存储路径与授权访问云存储路径的存储凭据组合在一起的对象。每个存储位置都服从于Unity Catalog访问控制策略,该策略控制哪些用户和组可以访问凭据。如果用户没有访问Unity Catalog中的存储位置,则请求失败,Unity Catalog不会尝试代表用户对云租户进行身份验证。

请注意

尽管名称中有“外部”一词,但外部位置不仅可以用于为外部表定义存储位置,还可以用于托管表。具体来说,它们可用于在编目和模式级别定义托管表的存储位置,覆盖默认的metastore根存储位置。看到创建目录而且创建模式

Databricks建议使用外部位置,而不是直接使用存储凭证。

需求

  • 要创建存储凭据,您必须是Databricks帐户admin。创建存储凭据的帐户admin可以将所有权委托给另一个用户或组以管理其权限。

  • 要创建外部位置,必须是metastore管理员或具有创建外部位置特权。

  • 希望用户读取和写入的S3桶的名称不能使用点表示法(例如,incorrect.bucket.name.notation).有关更多桶命名指导,请参见AWS桶命名规则

管理存储凭证

以下部分将展示如何创建和管理存储凭据。

创建存储凭证

要创建存储凭据,您需要一个IAM角色来授权读写S3桶路径。您在创建存储凭据时引用该IAM角色。

步骤1:创建或更新IAM角色

在AWS中,创建或更新IAM角色,以访问您希望用户访问的S3桶。此IAM角色必须与S3桶定义在同一个帐户中。

提示

如果您已经创建了IAM角色来提供这种访问,则可以跳过此步骤,直接转到步骤2:为Databricks提供IAM角色详细信息

  1. 创建IAM角色或更新已有角色。

    建立一个跨帐户的信任关系,这样Unity Catalog就可以承担角色,代表Databricks用户访问桶中的数据。您的角色还必须配置为自我假设,即信任自己。将以下策略JSON粘贴到信任关系选项卡。

    • 不修改第一个角色ARN主要部分。这是一个引用Databricks创建的角色的静态值。

    • 第二个角色ARN是对您正在创建的角色的自引用,因为角色必须是自假定的。有关自我假设角色的信息,请参见此亚马逊博客文章.取代< YOUR_AWS_ACCOUNT_ID >而且< THIS_ROLE_NAME >使用实际的IAM角色值。

    • sts: ExternalId部分,取代< DATABRICKS_ACCOUNT_ID >您的Databricks帐户ID(不是AWS帐户ID)。要获取Databricks帐户ID,请参见步骤1在AWS中配置存储桶和IAM角色

    “版本”“2012-10-17”“声明”“效应”“允许”“校长”“AWS”“攻击:aws:我::414351767826:角色/ unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTL”“攻击:aws:我::< YOUR_AWS_ACCOUNT_ID >:角色/ < THIS_ROLE_NAME >”},“行动”“sts: AssumeRole”“条件”“StringEquals”“sts: ExternalId”“< DATABRICKS_ACCOUNT_ID >”
  2. 在与S3桶相同的帐户中创建如下IAM policy,替换如下值:

    • <桶>: S3桶的名称。

    • < KMS_KEY >:可选的。如果启用了加密,请提供加密S3桶内容的KMS密钥的名称。如果加密被禁用,则删除IAM策略的整个KMS部分。

    • < AWS_ACCOUNT_ID >: AWS帐户(不是Databricks帐户)的帐户ID。

    • < AWS_IAM_ROLE_NAME >:上一步创建的AWS IAM角色名。

    “版本”“2012-10-17”“声明”“行动”“s3: GetObject”“s3: propertynames”“s3: DeleteObject”“s3: ListBucket”“s3: GetBucketLocation”“s3: GetLifecycleConfiguration”“s3: PutLifecycleConfiguration”),“资源”“攻击:aws: s3::: <斗> / *”“攻击:aws: s3::: <斗> "),“效应”“允许”},“行动”“公里:解密”“公里:加密”公里:GenerateDataKey *”),“资源”“攻击:aws:公里:< KMS_KEY >”),“效应”“允许”},“行动”“sts: AssumeRole”),“资源”“攻击:aws:我::< AWS_ACCOUNT_ID >:角色/ < AWS_IAM_ROLE_NAME >”),“效应”“允许”

    请注意

    • 如果您需要Unity Catalog的更严格的IAM策略,请联系您的Databricks代表寻求帮助。

    • 砖使用GetLifecycleConfiguration而且PutLifecycleConfiguration管理Partner Connect和上传数据UI所使用的个人登台位置的生命周期策略。

  3. 将IAM策略关联到IAM角色。

    在角色中许可页签,将新建的IAM Policy挂载。

步骤2:为Databricks提供IAM角色详细信息

  1. 在Databricks中,登录到与metastore链接的工作空间。

  2. 点击数据图标数据

  3. 在屏幕底部,单击存储凭证

  4. 单击+菜单,并选择添加存储凭据

  5. 输入证书的名称,授权Unity Catalog访问云租户上的存储位置的IAM Role ARN,以及可选的注释。

    提示

    如果你已经定义了实例配置文件在“数据库”中,单击复制实例配置文件为该实例概要文件复制IAM角色ARN。实例概要文件的IAM角色必须具有跨帐户信任关系,使Databricks能够承担该角色,以便代表Databricks用户访问桶。有关IAM角色策略和信任关系要求的更多信息,请参见步骤1:创建或更新IAM角色

  6. 点击保存

  7. 创建外部位置引用此存储凭据的。

还可以通过使用创建存储凭证Databricks Terraform提供商而且databricks_storage_credential

列出存储凭据

要查看metastore中所有存储凭证的列表,可以使用Data Explorer或SQL命令。

  1. 登录到与metastore链接的工作空间。

  2. 点击数据图标数据

  3. 在屏幕底部,单击存储凭证

在笔记本或Databricks SQL编辑器中运行以下命令。

显示存储凭证

在笔记本上运行以下命令。

显示火花sql“显示存储凭证”))

在笔记本上运行以下命令。

图书馆SparkR显示sql“显示存储凭证”))

在笔记本上运行以下命令。

显示火花sql“显示存储凭证”))

查看存储证书

要查看存储凭据的属性,可以使用数据资源管理器或SQL命令。

  1. 登录到与metastore链接的工作空间。

  2. 点击数据图标数据

  3. 在屏幕底部,单击存储凭证

  4. 单击存储凭据的名称以查看其属性。

在笔记本或Databricks SQL编辑器中运行以下命令。取代< credential_name >使用凭据的名称。

描述存储凭证<credential_name>

在笔记本上运行以下命令。取代< credential_name >使用凭据的名称。

显示火花sql" description STORAGE CREDENTIAL "))

在笔记本上运行以下命令。取代< credential_name >使用凭据的名称。

图书馆SparkR显示sql" description STORAGE CREDENTIAL "))

在笔记本上运行以下命令。取代< credential_name >使用凭据的名称。

显示火花sql" description STORAGE CREDENTIAL "))

重命名存储凭证

要重命名存储凭据,可以使用数据资源管理器或SQL命令。

  1. 登录到与metastore链接的工作空间。

  2. 点击数据图标数据

  3. 在屏幕底部,单击存储凭证

  4. 单击存储凭据的名称以打开编辑对话框。

  5. 重命名存储凭据并保存它。

在笔记本或Databricks SQL编辑器中运行以下命令。替换占位符值:

  • < credential_name >:证书的名称。

  • < new_credential_name >:凭据的新名称。

改变存储凭证<credential_name>重命名<new_credential_name>

在笔记本上运行以下命令。替换占位符值:

  • < credential_name >:证书的名称。

  • < new_credential_name >:凭据的新名称。

火花sql"ALTER STORAGE credential_name> RENAME TO "

在笔记本上运行以下命令。替换占位符值:

  • < credential_name >:证书的名称。

  • < new_credential_name >:凭据的新名称。

图书馆SparkRsql"ALTER STORAGE credential_name> RENAME TO "

在笔记本上运行以下命令。替换占位符值:

  • < credential_name >:证书的名称。

  • < new_credential_name >:凭据的新名称。

火花sql"ALTER STORAGE credential_name> RENAME TO "

管理存储凭证的权限

您可以直接对存储凭据授予权限,但Databricks建议您在外部位置然后授权给它。外部位置将存储凭据与特定路径组合在一起,并仅授权对该路径及其内容的访问。

可以使用。管理存储凭据的权限数据浏览、SQL命令或起程拓殖.您可以授予和撤销存储凭证上的以下权限:

  • 创建表格

  • 文件

  • 文件

在以下示例中,替换占位符值:

  • <主要>:需要授权的帐户级用户的邮箱地址或帐户级用户组名。

  • < storage_credential_name >:存储凭证的名称。

要显示存储凭据上的授权,可以使用如下命令。您可以选择筛选结果,只显示指定校长的拨款。

显示奖助金<主要>存储凭证<storage_credential_name>
显示火花sqlSHOW GRANTS [] ON STORAGE CREDENTIAL "))
图书馆SparkR显示sqlSHOW GRANTS [] ON STORAGE CREDENTIAL "))
显示火花sqlSHOW GRANTS [] ON STORAGE CREDENTIAL "))

授权直接使用存储凭据创建外部表:

格兰特创建外部表格存储凭证<storage_credential_name><主要>
火花sqlGRANT CREATE EXTERNAL TABLE ON STORAGE credentials  TO "
图书馆SparkRsqlGRANT CREATE EXTERNAL TABLE ON STORAGE credentials  TO "
火花sqlGRANT CREATE EXTERNAL TABLE ON STORAGE credentials  TO "

直接使用存储凭证授予从外部表中选择的权限:

格兰特文件存储凭证<storage_credential_name><主要>
火花sql"GRANT READ FILES ON STORAGE credential_name> TO "
图书馆SparkRsql"GRANT READ FILES ON STORAGE credential_name> TO "
火花sql"GRANT READ FILES ON STORAGE credential_name> TO "

请注意

如果组名包含空格,请在空格周围使用反引号(而不是撇号)。

更改存储凭据的所有者

存储凭证的创建者是它的初始所有者。若要将所有者更改为其他帐户级用户或组,请执行以下操作:

在笔记本或Databricks SQL编辑器中运行以下命令。替换占位符值:

  • < credential_name >:证书的名称。

  • <主要>:帐户级用户邮箱或帐户级组名。

改变存储凭证<credential_name>老板<主要>

在笔记本上运行以下命令。替换占位符值:

  • < credential_name >:证书的名称。

  • <主要>:帐户级用户邮箱或帐户级组名。

火花sql"ALTER STORAGE credential_name> OWNER TO "

在笔记本上运行以下命令。替换占位符值:

  • < credential_name >:证书的名称。

  • <主要>:帐户级用户邮箱或帐户级组名。

图书馆SparkRsql"ALTER STORAGE credential_name> OWNER TO "

在笔记本上运行以下命令。替换占位符值:

  • < credential_name >:证书的名称。

  • <主要>:帐户级用户邮箱或帐户级组名。

火花sql"ALTER STORAGE credential_name> OWNER TO "

删除存储证书

要删除存储凭据,可以使用数据资源管理器或SQL命令。

  1. 登录到与metastore链接的工作空间。

  2. 点击数据图标数据

  3. 在屏幕底部,单击存储凭证

  4. 单击存储凭据的名称以打开编辑对话框。

  5. 单击删除按钮。

在笔记本或Databricks SQL编辑器中运行以下命令。取代< credential_name >使用凭据的名称。括号内的部分命令是可选的。默认情况下,如果凭据由外部位置使用,则不会删除它。取代< credential_name >使用凭据的名称。

  • 如果存在如果凭据不存在,则不返回错误。

下降存储凭证如果存在<credential_name>

在笔记本上运行以下命令。取代< credential_name >使用凭据的名称。括号内的部分命令是可选的。默认情况下,如果凭据由外部位置使用,则不会删除它。取代< credential_name >使用凭据的名称。

  • 如果存在如果凭据不存在,则不返回错误。

  • < credential_name >:证书的名称。

火花sql"DROP STORAGE CREDENTIAL [IF EXISTS] "

在笔记本上运行以下命令。取代< credential_name >使用凭据的名称。括号内的部分命令是可选的。默认情况下,如果凭据由外部位置使用,则不会删除它。取代< credential_name >使用凭据的名称。

  • 如果存在如果凭据不存在,则不返回错误。

    图书馆SparkRsql"DROP STORAGE CREDENTIAL [IF EXISTS] "

在笔记本上运行以下命令。取代< credential_name >使用凭据的名称。括号内的部分命令是可选的。默认情况下,如果凭据由外部位置使用,则不会删除它。取代< credential_name >使用凭据的名称。

  • 如果存在如果凭据不存在,则不返回错误。

    火花sql"DROP STORAGE CREDENTIAL [IF EXISTS] "

管理外部位置

以下部分说明如何创建和管理外部位置。

创建外部位置

可以使用数据浏览、SQL命令或起程拓殖

在笔记本或Databricks SQL编辑器中运行以下SQL命令。替换占位符值:

  • < location_name >:外部位置的名称。

  • < bucket_path >:此外部位置授予访问的云租户中的路径。

  • < storage_credential_name >:包含IAM角色ARN的存储凭据的名称,该角色授权读写S3桶。

请注意

每个云存储路径只能与一个外部位置关联。如果尝试创建第二个引用相同路径的外部位置,则该命令将失败。

创建外部位置如果存在<location_name>URLs3: / / < bucket_path >”([存储凭证<storage_credential_name>评论<comment_string>];
火花sql创建外部位置[IF NOT EXISTS]  ""URL 's3://' ""WITH ([STORAGE] CREDENTIAL ) "“[评论< comment_string >]”
图书馆SparkRsql粘贴创建外部位置[IF NOT EXISTS]  ""URL 's3://' ""WITH ([STORAGE] CREDENTIAL ) "“[评论< comment_string >]”9月""))
火花sql创建外部位置[IF NOT EXISTS]  "+"URL 's3://' "+"WITH ([STORAGE] CREDENTIAL ) "+“[评论< comment_string >]”

描述一个外部位置

要查看外部位置的属性,可以使用数据资源管理器或SQL命令。

  1. 登录到与metastore链接的工作空间。

  2. 点击数据图标数据

  3. 在屏幕底部,单击外部位置

  4. 单击外部位置的名称以查看其属性。

在笔记本或Databricks SQL编辑器中运行以下命令。取代< credential_name >使用凭据的名称。

描述外部位置<location_name>

在笔记本上运行以下命令。取代< credential_name >使用凭据的名称。

显示火花sql描述外部位置"))

在笔记本上运行以下命令。取代< credential_name >使用凭据的名称。

图书馆SparkR显示sql描述外部位置"))

在笔记本上运行以下命令。取代< credential_name >使用凭据的名称。

显示火花sql描述外部位置"))

修改外部位置

外部位置的所有者可以重命名、更改URI和更改外部位置的存储凭据。

重命名外部位置,执行以下操作:

在笔记本或Databricks SQL编辑器中运行以下命令。替换占位符值:

  • < location_name >:位置名称。

  • < new_location_name >:位置的新名称。

改变外部位置<location_name>重命名<new_location_name>

在笔记本上运行以下命令。替换占位符值:

  • < location_name >:位置名称。

  • < new_location_name >:位置的新名称。

火花sql“ALTER EXTERNAL LOCATION  RENAME TO 

在笔记本上运行以下命令。替换占位符值:

  • < location_name >:位置名称。

  • < new_location_name >:位置的新名称。

图书馆SparkRsql“ALTER EXTERNAL LOCATION  RENAME TO 

在笔记本上运行以下命令。替换占位符值:

  • < location_name >:位置名称。

  • < new_location_name >:位置的新名称。

火花sql“ALTER EXTERNAL LOCATION  RENAME TO 

要更改云租户中外部位置指向的URI,请执行以下操作:

在笔记本或Databricks SQL编辑器中运行以下命令。替换占位符值:

  • < location_name >:外部位置的名称。

  • < url >:云租户中该位置应授权访问的新存储URL。

改变外部位置location_nameURL' <url>”];

在笔记本上运行以下命令。替换占位符值:

  • < location_name >:外部位置的名称。

  • < url >:云租户中该位置应授权访问的新存储URL。

火花sql“ALTER EXTERNAL LOCATION location_name SET URL ' < URL > ' [FORCE]”

在笔记本上运行以下命令。替换占位符值:

  • < location_name >:外部位置的名称。

  • < url >:云租户中该位置应授权访问的新存储URL。

图书馆SparkRsql“ALTER EXTERNAL LOCATION location_name SET URL ' < URL > ' [FORCE]”

在笔记本上运行以下命令。替换占位符值:

  • < location_name >:外部位置的名称。

  • < url >:云租户中该位置应授权访问的新存储URL。

火花sql“ALTER EXTERNAL LOCATION location_name SET URL ' < URL > ' [FORCE]”

选项更改URL,即使外部表依赖于外部位置。

要更改外部位置使用的存储凭据,请执行以下操作:

在笔记本或Databricks SQL编辑器中运行以下命令。替换占位符值:

  • < location_name >:外部位置的名称。

  • < credential_name >:授予访问云租户中位置URL的存储凭据的名称。

改变外部位置<location_name>存储凭证<credential_name>

在笔记本上运行以下命令。替换占位符值:

  • < location_name >:外部位置的名称。

  • < credential_name >:授予访问云租户中位置URL的存储凭据的名称。

火花sqlALTER EXTERNAL LOCATION  SET STORAGE CREDENTIAL "

在笔记本上运行以下命令。替换占位符值:

  • < location_name >:外部位置的名称。

  • < credential_name >:授予访问云租户中位置URL的存储凭据的名称。

图书馆SparkRsqlALTER EXTERNAL LOCATION  SET STORAGE CREDENTIAL "

在笔记本上运行以下命令。替换占位符值:

  • < location_name >:外部位置的名称。

  • < credential_name >:授予访问云租户中位置URL的存储凭据的名称。

火花sqlALTER EXTERNAL LOCATION  SET STORAGE CREDENTIAL "

管理外部位置的权限

可以在外部位置上授予和撤销以下权限数据浏览、SQL命令或起程拓殖

  • 创建表格

  • 文件

  • 文件

在以下示例中,替换占位符值:

  • <主要>:需要授权的帐户级用户的邮箱地址或帐户级用户组名。

  • < location_name >:授权读写云租户中的S3桶的外部位置的名称。

  • <主要>:帐户级用户邮箱或帐户级组名。

要显示外部位置上的授权,可以使用如下命令。您可以选择筛选结果,只显示指定校长的拨款。

显示奖助金<主要>外部位置<location_name>
显示火花sql“SHOW GRANTS [] ON EXTERNAL LOCATION ))
图书馆SparkR显示sql“SHOW GRANTS [] ON EXTERNAL LOCATION ))
显示火花sql“SHOW GRANTS [] ON EXTERNAL LOCATION ))

授权使用外部位置创建表:

格兰特创建外部表格外部位置<location_name><主要>
火花sql“GRANT CREATE EXTERNAL TABLE ON EXTERNAL LOCATION  TO 
图书馆SparkRsql“GRANT CREATE EXTERNAL TABLE ON EXTERNAL LOCATION  TO 
火花sql“GRANT CREATE EXTERNAL TABLE ON EXTERNAL LOCATION  TO 

授予从外部位置读取文件的权限:

格兰特文件外部位置<location_name><主要>
火花sql“GRANT READ FILES ON EXTERNAL LOCATION  TO 
图书馆SparkRsql“GRANT READ FILES ON EXTERNAL LOCATION  TO 
火花sql“GRANT READ FILES ON EXTERNAL LOCATION  TO 

请注意

如果组名包含空格,请在空格周围使用反引号(而不是撇号)。

更改外部位置的所有者

外部位置的创建者是它的初始所有者。若要将所有者更改为其他帐户级别的用户或组,请在笔记本或Databricks SQL编辑器或工具中运行以下命令数据浏览.替换占位符值:

  • < location_name >:证书的名称。

  • <主要>:帐户级用户邮箱或帐户级组名。

改变外部位置<location_name>老板<主要>

删除外部位置

删除外部位置操作步骤

在笔记本或Databricks SQL编辑器中运行以下命令。括号中的项目是可选的。取代< location_name >外部位置的名称。

下降外部位置如果存在<location_name>

在笔记本上运行以下命令。括号中的项目是可选的。取代< location_name >外部位置的名称。

火花sqlDROP EXTERNAL LOCATION [IF EXISTS] "

在笔记本上运行以下命令。括号中的项目是可选的。取代< location_name >外部位置的名称。

图书馆SparkRsqlDROP EXTERNAL LOCATION [IF EXISTS] "

在笔记本上运行以下命令。括号中的项目是可选的。取代< location_name >外部位置的名称。

火花sqlDROP EXTERNAL LOCATION [IF EXISTS] "

下一个步骤