管理外部位置和存儲憑證
本文將介紹外部位置和存儲憑據,並解釋如何創建和使用它們來管理對外部表的訪問。
什麼是外部位置和存儲憑證?
外部位置和存儲憑證允許Unity Catalog代表用戶在雲租戶上讀寫數據。這些對象用於:
創作,閱讀,寫作外部表.
從文件創建托管表或外部表存儲在您的雲租戶上。
插入記錄從存儲在雲租戶上的文件轉換到表中。
直接探索數據文件存儲在您的雲租戶上。
一個存儲憑證表示使用IAM角色訪問存儲在雲租戶上的數據的認證和授權機製。每個存儲憑據都服從Unity Catalog訪問控製策略,該策略控製哪些用戶和組可以訪問憑據。如果用戶無法訪問Unity Catalog中的存儲憑據,則請求失敗,Unity Catalog也不會嚐試代表該用戶向雲租戶進行身份驗證。
一個外部位置是一個對象,它將雲存儲路徑與授權對雲存儲路徑的訪問的存儲憑據組合在一起。每個存儲位置都服從Unity Catalog訪問控製策略,該策略控製哪些用戶和組可以訪問憑據。如果用戶不能訪問Unity Catalog中的某個存儲位置,請求就會失敗,Unity Catalog也不會代表用戶嚐試向您的雲租戶進行身份驗證。
Databricks建議使用外部位置,而不是直接使用存儲憑據。
需求
要創建存儲憑據,您必須是Databricks帳戶管理員。創建存儲憑據的帳戶管理員可以將所有權委派給另一個用戶或組,以管理其權限。
要創建創建外部位置,您必須是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創建的角色的靜態值。在
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”},“行動”:“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”),“資源”:[“攻擊:aws: s3::: <鬥> / *”,“攻擊:aws: s3::: <鬥> "),“效應”:“允許”},{“行動”:[“公裏:解密”,“公裏:加密”,公裏:GenerateDataKey *”),“資源”:[“攻擊:aws:公裏:< KMS_KEY >”),“效應”:“允許”},{“行動”:[“sts: AssumeRole”),“資源”:[“攻擊:aws:我::< AWS_ACCOUNT_ID >:角色/ < AWS_IAM_ROLE_NAME >”),“效應”:“允許”}]}
請注意
如果你需要一個更嚴格的IAM政策的統一目錄,聯係您的Databricks代表的幫助。
為IAM角色添加IAM策略。
在角色的許可頁簽,添加剛創建的IAM Policy。
步驟2:給Databricks提供IAM角色的詳細信息
在Databricks中,登錄到與metastore鏈接的工作空間。
點擊數據.
在屏幕底部,單擊存儲憑證.
單擊+在右上角的菜單中選擇添加存儲憑據.
為憑據輸入一個名稱,IAM Role ARN授權Unity Catalog訪問雲租戶上的存儲位置,以及一個可選的注釋。
提示
如果你已經定義了實例配置文件在“數據列表”中,單擊實例配置文件副本複製該實例配置文件的IAM角色ARN。實例概要文件的IAM角色必須具有跨帳戶的信任關係,使Databricks能夠承擔該角色,以便代表Databricks用戶訪問桶。關於IAM角色策略和信任關係要求的詳細信息,請參見步驟1:創建或更新IAM角色.
點擊保存.
創建一個外部位置它引用這個存儲憑據。
還可以使用以下命令創建存儲憑據磚起程拓殖的提供者而且databricks_storage_credential.
列表存儲憑證
要查看metastore中所有存儲憑據的列表,可以使用Data Explorer或SQL命令。
登錄到一個與轉移體相連的工作空間。
點擊數據.
在屏幕底部,單擊存儲憑證.
在筆記本電腦或Databricks SQL編輯器中運行以下命令。
顯示存儲憑證;
在筆記本上運行以下命令。
顯示(火花.sql(“顯示存儲憑證”))
在筆記本上運行以下命令。
圖書館(SparkR)顯示(sql(“顯示存儲憑證”))
在筆記本上運行以下命令。
顯示(火花.sql(“顯示存儲憑證”))
查看存儲憑據
要查看存儲憑據的屬性,可以使用Data Explorer或SQL命令。
登錄到一個與轉移體相連的工作空間。
點擊數據.
在屏幕底部,單擊存儲憑證.
單擊存儲憑據的名稱以查看其屬性。
在筆記本電腦或Databricks SQL編輯器中運行以下命令。取代< credential_name >
加上證書的名稱。
描述存儲憑證<credential_name>;
在筆記本上運行以下命令。取代< credential_name >
加上證書的名稱。
顯示(火花.sql("描述存儲憑據" ))
在筆記本上運行以下命令。取代< credential_name >
加上證書的名稱。
圖書館(SparkR)顯示(sql("描述存儲憑據" ))
在筆記本上運行以下命令。取代< credential_name >
加上證書的名稱。
顯示(火花.sql("描述存儲憑據" ))
重命名存儲憑據
要重命名存儲憑據,可以使用數據資源管理器或SQL命令。
登錄到一個與轉移體相連的工作空間。
點擊數據.
在屏幕底部,單擊存儲憑證.
單擊存儲憑據的名稱以打開編輯對話框。
重命名存儲憑據並保存它。
在筆記本電腦或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授予[] ON STORAGE憑據" ))
圖書館(SparkR)顯示(sql("SHOW授予[] ON STORAGE憑據" ))
顯示(火花.sql("SHOW授予[] ON STORAGE憑據" ))
授予直接使用存儲憑據創建外部表的權限。
格蘭特創建表格在存儲憑證<storage_credential_name>來<主要>;
火花.sql("GRANT CREATE TABLE ON STORAGE CREDENTIAL TO " )
圖書館(SparkR)sql("GRANT CREATE TABLE ON STORAGE CREDENTIAL TO " )
火花.sql("GRANT CREATE TABLE ON STORAGE CREDENTIAL TO " )
直接使用存儲憑據授予從外部表進行選擇的權限:
格蘭特讀文件在存儲憑證<storage_credential_name>來<主要>;
火花.sql("GRANT READ FILES ON STORAGE CREDENTIAL TO " )
圖書館(SparkR)sql("GRANT READ FILES ON STORAGE CREDENTIAL TO " )
火花.sql("GRANT READ FILES ON STORAGE CREDENTIAL TO " )
請注意
如果組名包含空格,則在其周圍使用反勾(而不是撇號)。
更改存儲憑據的所有者
存儲憑據的創建者是它的初始所有者。要將所有者更改為不同的帳戶級用戶或組,請執行以下操作:
在筆記本電腦或Databricks SQL編輯器中運行以下命令。替換占位符值:
< credential_name >
:證書的名稱。<主要>
:帳戶級用戶的電子郵件地址或帳戶級組的名稱。
改變存儲憑證<credential_name>老板來<主要>;
在筆記本上運行以下命令。替換占位符值:
< credential_name >
:證書的名稱。<主要>
:帳戶級用戶的電子郵件地址或帳戶級組的名稱。
火花.sql("更改存儲憑據 OWNER TO " )
在筆記本上運行以下命令。替換占位符值:
< credential_name >
:證書的名稱。<主要>
:帳戶級用戶的電子郵件地址或帳戶級組的名稱。
圖書館(SparkR)sql("更改存儲憑據 OWNER TO " )
在筆記本上運行以下命令。替換占位符值:
< credential_name >
:證書的名稱。<主要>
:帳戶級用戶的電子郵件地址或帳戶級組的名稱。
火花.sql("更改存儲憑據 OWNER TO " )
刪除存儲憑據
要刪除存儲憑據,可以使用數據資源管理器或SQL命令。
登錄到一個與轉移體相連的工作空間。
點擊數據.
在屏幕底部,單擊存儲憑證.
單擊存儲憑據的名稱以打開編輯對話框。
單擊刪除按鈕。
在筆記本電腦或Databricks SQL編輯器中運行以下命令。取代< credential_name >
加上證書的名稱。括號中的部分命令是可選的。默認情況下,如果外部位置使用憑據,則不會刪除它。取代< credential_name >
加上證書的名稱。
如果存在
如果憑據不存在,則不返回錯誤。
下降存儲憑證[如果存在]<credential_name>;
在筆記本上運行以下命令。取代< credential_name >
加上證書的名稱。括號中的部分命令是可選的。默認情況下,如果外部位置使用憑據,則不會刪除它。取代< credential_name >
加上證書的名稱。
如果存在
如果憑據不存在,則不返回錯誤。
< credential_name >
:證書的名稱。<主要>
:帳戶級用戶的電子郵件地址或帳戶級組的名稱。
火花.sql("刪除存儲憑據[IF EXISTS]
" )
在筆記本上運行以下命令。取代< credential_name >
加上證書的名稱。括號中的部分命令是可選的。默認情況下,如果外部位置使用憑據,則不會刪除它。取代< credential_name >
加上證書的名稱。
如果存在
如果憑據不存在,則不返回錯誤。
圖書館(SparkR)sql("刪除存儲憑據[IF EXISTS] " )
在筆記本上運行以下命令。取代< credential_name >
加上證書的名稱。括號中的部分命令是可選的。默認情況下,如果外部位置使用憑據,則不會刪除它。取代< credential_name >
加上證書的名稱。
如果存在
如果憑據不存在,則不返回錯誤。
火花.sql("刪除存儲憑據[IF EXISTS] " )
管理外部位置
以下部分說明如何創建和管理外部位置。
創建一個外部位置
在筆記本電腦或Databricks SQL編輯器中運行以下SQL命令。替換占位符值:
< location_name >
:外部位置的名稱。< bucket_path >
:此外部位置授予訪問權限的雲租戶中的路徑。
< storage_credential_name >
:包含IAM角色ARN的存儲憑據名稱,該IAM角色ARN授權對S3桶進行讀寫操作。
請注意
每個雲存儲路徑隻能與一個外部位置關聯。如果試圖創建引用相同路徑的第二個外部位置,則該命令會失敗。
創建外部位置[如果不存在]<location_name>URLs3: / / < bucket_path >”與([存儲]憑證<storage_credential_name>)[評論<comment_string>];
火花.sql("創建外部位置[IF NOT EXISTS] " “URL s3: / / < bucket_path >“”"WITH ([STORAGE] CREDENTIAL ) " “[評論< comment_string >]”)
圖書館(SparkR)sql(粘貼("創建外部位置[IF NOT EXISTS] " ,“URL s3: / / < bucket_path >“”,"WITH ([STORAGE] CREDENTIAL ) " ,“[評論< comment_string >]”,9月=""))
火花.sql("創建外部位置[IF NOT EXISTS] " +“URL s3: / / < bucket_path >“”+"WITH ([STORAGE] CREDENTIAL ) " +“[評論< comment_string >]”)
描述一個外部位置
要查看外部位置的屬性,可以使用Data Explorer或SQL命令。
登錄到一個與轉移體相連的工作空間。
點擊數據.
在屏幕底部,單擊外部位置.
單擊外部位置的名稱以查看其屬性。
在筆記本電腦或Databricks SQL編輯器中運行以下命令。取代< credential_name >
加上證書的名稱。
描述外部位置<location_name>;
在筆記本上運行以下命令。取代< credential_name >
加上證書的名稱。
顯示(火花.sql("描述外部位置" ))
在筆記本上運行以下命令。取代< credential_name >
加上證書的名稱。
圖書館(SparkR)顯示(sql("描述外部位置" ))
在筆記本上運行以下命令。取代< credential_name >
加上證書的名稱。
顯示(火花.sql("描述外部位置" ))
修改外部位置
要重命名外部位置,請執行以下操作:
在筆記本電腦或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("修改外部位置location_name設置URL ' < URL > ' [FORCE]")
在筆記本上運行以下命令。替換占位符值:
< location_name >
:外部位置名稱。< url >
:在您的雲租戶中,位置應該授權訪問的新的存儲URL。
圖書館(SparkR)sql("修改外部位置location_name設置URL ' < URL > ' [FORCE]")
在筆記本上運行以下命令。替換占位符值:
< location_name >
:外部位置名稱。< url >
:在您的雲租戶中,位置應該授權訪問的新的存儲URL。
火花.sql("修改外部位置location_name設置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_name>" )
在筆記本上運行以下命令。替換占位符值:
< location_name >
:外部位置名稱。< credential_name >
:授予對雲租戶中位置URL的訪問權的存儲憑據的名稱。
圖書館(SparkR)sql("ALTER EXTERNAL LOCATION SET STORAGE credential_name>" )
在筆記本上運行以下命令。替換占位符值:
< location_name >
:外部位置名稱。< credential_name >
:授予對雲租戶中位置URL的訪問權的存儲憑據的名稱。
火花.sql("ALTER EXTERNAL LOCATION SET STORAGE credential_name>" )
管理外部位置的權限
創建表格
讀文件
寫文件
在以下示例中,替換占位符值:
<主要>
:帳號級用戶的電子郵件地址或帳號級用戶組名。
< 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 TABLE ON EXTERNAL LOCATION TO )
圖書館(SparkR)sql(GRANT CREATE TABLE ON EXTERNAL LOCATION TO )
火花.sql(GRANT CREATE 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] " )