管理外部位置和存储凭证
本文介绍外部位置和存储凭据,并解释如何创建和使用它们来管理对外部表的访问。
什么是外部位置和存储凭证?
外部位置和存储凭证允许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角色详细信息.
创建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 >”}}}]}
在与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所使用的个人登台位置的生命周期策略。
将IAM策略关联到IAM角色。
在角色中许可页签,将新建的IAM Policy挂载。
步骤2:为Databricks提供IAM角色详细信息
在Databricks中,登录到与metastore链接的工作空间。
点击数据.
在屏幕底部,单击存储凭证.
单击+菜单,并选择添加存储凭据.
输入证书的名称,授权Unity Catalog访问云租户上的存储位置的IAM Role ARN,以及可选的注释。
提示
如果你已经定义了实例配置文件在“数据库”中,单击复制实例配置文件为该实例概要文件复制IAM角色ARN。实例概要文件的IAM角色必须具有跨帐户信任关系,使Databricks能够承担该角色,以便代表Databricks用户访问桶。有关IAM角色策略和信任关系要求的更多信息,请参见步骤1:创建或更新IAM角色.
点击保存.
创建外部位置引用此存储凭据的。
还可以通过使用创建存储凭证Databricks Terraform提供商而且databricks_storage_credential.
列出存储凭据
要查看metastore中所有存储凭证的列表,可以使用Data Explorer或SQL命令。
登录到与metastore链接的工作空间。
点击数据.
在屏幕底部,单击存储凭证.
在笔记本或Databricks SQL编辑器中运行以下命令。
显示存储凭证;
在笔记本上运行以下命令。
显示(火花.sql(“显示存储凭证”))
在笔记本上运行以下命令。
图书馆(SparkR)显示(sql(“显示存储凭证”))
在笔记本上运行以下命令。
显示(火花.sql(“显示存储凭证”))
查看存储证书
要查看存储凭据的属性,可以使用数据资源管理器或SQL命令。
登录到与metastore链接的工作空间。
点击数据.
在屏幕底部,单击存储凭证.
单击存储凭据的名称以查看其属性。
在笔记本或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命令。
登录到与metastore链接的工作空间。
点击数据.
在屏幕底部,单击存储凭证.
单击存储凭据的名称以打开编辑对话框。
重命名存储凭据并保存它。
在笔记本或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 >
:凭据的新名称。
图书馆(SparkR)sql("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>;
显示(火花.sql(SHOW GRANTS [] ON STORAGE CREDENTIAL " ))
图书馆(SparkR)显示(sql(SHOW GRANTS [] ON STORAGE CREDENTIAL " ))
显示(火花.sql(SHOW GRANTS [] ON STORAGE CREDENTIAL " ))
授权直接使用存储凭据创建外部表:
格兰特创建外部表格在存储凭证<storage_credential_name>来<主要>;
火花.sql(GRANT CREATE EXTERNAL TABLE ON STORAGE credentials TO " )
图书馆(SparkR)sql(GRANT CREATE EXTERNAL TABLE ON STORAGE credentials TO " )
火花.sql(GRANT CREATE EXTERNAL TABLE ON STORAGE credentials TO " )
直接使用存储凭证授予从外部表中选择的权限:
格兰特读文件在存储凭证<storage_credential_name>来<主要>;
火花.sql("GRANT READ FILES ON STORAGE credential_name> TO " )
图书馆(SparkR)sql("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 >
:证书的名称。<主要>
:帐户级用户邮箱或帐户级组名。
图书馆(SparkR)sql("ALTER STORAGE credential_name> OWNER TO " )
在笔记本上运行以下命令。替换占位符值:
< credential_name >
:证书的名称。<主要>
:帐户级用户邮箱或帐户级组名。
火花.sql("ALTER STORAGE credential_name> OWNER TO " )
删除存储证书
要删除存储凭据,可以使用数据资源管理器或SQL命令。
登录到与metastore链接的工作空间。
点击数据.
在屏幕底部,单击存储凭证.
单击存储凭据的名称以打开编辑对话框。
单击删除按钮。
在笔记本或Databricks SQL编辑器中运行以下命令。取代< credential_name >
使用凭据的名称。括号内的部分命令是可选的。默认情况下,如果凭据由外部位置使用,则不会删除它。取代< credential_name >
使用凭据的名称。
如果存在
如果凭据不存在,则不返回错误。
下降存储凭证[如果存在]<credential_name>;
在笔记本上运行以下命令。取代< credential_name >
使用凭据的名称。括号内的部分命令是可选的。默认情况下,如果凭据由外部位置使用,则不会删除它。取代< credential_name >
使用凭据的名称。
如果存在
如果凭据不存在,则不返回错误。< credential_name >
:证书的名称。
火花.sql("DROP STORAGE CREDENTIAL [IF EXISTS] " )
在笔记本上运行以下命令。取代< credential_name >
使用凭据的名称。括号内的部分命令是可选的。默认情况下,如果凭据由外部位置使用,则不会删除它。取代< credential_name >
使用凭据的名称。
如果存在
如果凭据不存在,则不返回错误。图书馆(SparkR)sql("DROP STORAGE CREDENTIAL [IF EXISTS]
" )
在笔记本上运行以下命令。取代< credential_name >
使用凭据的名称。括号内的部分命令是可选的。默认情况下,如果凭据由外部位置使用,则不会删除它。取代< credential_name >
使用凭据的名称。
如果存在
如果凭据不存在,则不返回错误。火花.sql("DROP STORAGE CREDENTIAL [IF EXISTS]
" )
管理外部位置
以下部分说明如何创建和管理外部位置。
创建外部位置
在笔记本或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 >]”)
图书馆(SparkR)sql(粘贴(创建外部位置[IF NOT EXISTS] " ,"URL 's3://' " ,"WITH ([STORAGE] CREDENTIAL ) " ,“[评论< comment_string >]”,9月=""))
火花.sql(创建外部位置[IF NOT EXISTS] " +"URL 's3://' " +"WITH ([STORAGE] CREDENTIAL ) " +“[评论< comment_string >]”)
描述一个外部位置
要查看外部位置的属性,可以使用数据资源管理器或SQL命令。
登录到与metastore链接的工作空间。
点击数据.
在屏幕底部,单击外部位置.
单击外部位置的名称以查看其属性。
在笔记本或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 >
:位置的新名称。
图书馆(SparkR)sql(“ALTER EXTERNAL LOCATION RENAME TO ” )
在笔记本上运行以下命令。替换占位符值:
< location_name >
:位置名称。< new_location_name >
:位置的新名称。
火花.sql(“ALTER EXTERNAL LOCATION RENAME TO ” )
要更改云租户中外部位置指向的URI,请执行以下操作:
在笔记本或Databricks SQL编辑器中运行以下命令。替换占位符值:
< location_name >
:外部位置的名称。< url >
:云租户中该位置应授权访问的新存储URL。
改变外部位置location_name集URL' <url>”[力];
在笔记本上运行以下命令。替换占位符值:
< location_name >
:外部位置的名称。< url >
:云租户中该位置应授权访问的新存储URL。
火花.sql(“ALTER EXTERNAL LOCATION location_name SET URL ' < URL > ' [FORCE]”)
在笔记本上运行以下命令。替换占位符值:
< location_name >
:外部位置的名称。< url >
:云租户中该位置应授权访问的新存储URL。
图书馆(SparkR)sql(“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的存储凭据的名称。
火花.sql(ALTER EXTERNAL LOCATION SET STORAGE CREDENTIAL " )
在笔记本上运行以下命令。替换占位符值:
< location_name >
:外部位置的名称。< credential_name >
:授予访问云租户中位置URL的存储凭据的名称。
图书馆(SparkR)sql(ALTER EXTERNAL LOCATION SET STORAGE CREDENTIAL " )
在笔记本上运行以下命令。替换占位符值:
< location_name >
:外部位置的名称。< credential_name >
:授予访问云租户中位置URL的存储凭据的名称。
火花.sql(ALTER 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 ” )
图书馆(SparkR)sql(“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 ” )
图书馆(SparkR)sql(“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 >
外部位置的名称。
火花.sql(DROP EXTERNAL LOCATION [IF EXISTS] " )
在笔记本上运行以下命令。括号中的项目是可选的。取代< location_name >
外部位置的名称。
图书馆(SparkR)sql(DROP EXTERNAL LOCATION [IF EXISTS] " )
在笔记本上运行以下命令。括号中的项目是可选的。取代< location_name >
外部位置的名称。
火花.sql(DROP EXTERNAL LOCATION [IF EXISTS] " )