管理外部位置和存儲憑證

本文將介紹外部位置和存儲憑據,並解釋如何創建和使用它們來管理對外部表的訪問。

什麼是外部位置和存儲憑證?

外部位置和存儲憑證允許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角色的詳細信息

  1. 創建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 >”
  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”),“資源”“攻擊:aws: s3::: <鬥> / *”“攻擊:aws: s3::: <鬥> "),“效應”“允許”},“行動”“公裏:解密”“公裏:加密”公裏:GenerateDataKey *”),“資源”“攻擊:aws:公裏:< KMS_KEY >”),“效應”“允許”},“行動”“sts: AssumeRole”),“資源”“攻擊:aws:我::< AWS_ACCOUNT_ID >:角色/ < AWS_IAM_ROLE_NAME >”),“效應”“允許”

    請注意

    如果你需要一個更嚴格的IAM政策的統一目錄,聯係您的Databricks代表的幫助。

  3. 為IAM角色添加IAM策略。

    在角色的許可頁簽,添加剛創建的IAM Policy。

步驟2:給Databricks提供IAM角色的詳細信息

  1. 在Databricks中,登錄到與metastore鏈接的工作空間。

  2. 點擊數據圖標數據

  3. 在屏幕底部,單擊存儲憑證

  4. 單擊+在右上角的菜單中選擇添加存儲憑據

  5. 為憑據輸入一個名稱,IAM Role ARN授權Unity Catalog訪問雲租戶上的存儲位置,以及一個可選的注釋。

    提示

    如果你已經定義了實例配置文件在“數據列表”中,單擊實例配置文件副本複製該實例配置文件的IAM角色ARN。實例概要文件的IAM角色必須具有跨帳戶的信任關係,使Databricks能夠承擔該角色,以便代表Databricks用戶訪問桶。關於IAM角色策略和信任關係要求的詳細信息,請參見步驟1:創建或更新IAM角色

  6. 點擊保存

  7. 創建一個外部位置它引用這個存儲憑據。

還可以使用以下命令創建存儲憑據磚起程拓殖的提供者而且databricks_storage_credential

列表存儲憑證

要查看metastore中所有存儲憑據的列表,可以使用Data Explorer或SQL命令。

  1. 登錄到一個與轉移體相連的工作空間。

  2. 點擊數據圖標數據

  3. 在屏幕底部,單擊存儲憑證

在筆記本電腦或Databricks SQL編輯器中運行以下命令。

顯示存儲憑證;

在筆記本上運行以下命令。

顯示火花sql“顯示存儲憑證”))

在筆記本上運行以下命令。

圖書館SparkR顯示sql“顯示存儲憑證”))

在筆記本上運行以下命令。

顯示火花sql“顯示存儲憑證”))

查看存儲憑據

要查看存儲憑據的屬性,可以使用Data Explorer或SQL命令。

  1. 登錄到一個與轉移體相連的工作空間。

  2. 點擊數據圖標數據

  3. 在屏幕底部,單擊存儲憑證

  4. 單擊存儲憑據的名稱以查看其屬性。

在筆記本電腦或Databricks SQL編輯器中運行以下命令。取代< credential_name >加上證書的名稱。

描述存儲憑證<credential_name>;

在筆記本上運行以下命令。取代< credential_name >加上證書的名稱。

顯示火花sql"描述存儲憑據"))

在筆記本上運行以下命令。取代< credential_name >加上證書的名稱。

圖書館SparkR顯示sql"描述存儲憑據"))

在筆記本上運行以下命令。取代< credential_name >加上證書的名稱。

顯示火花sql"描述存儲憑據"))

重命名存儲憑據

要重命名存儲憑據,可以使用數據資源管理器或SQL命令。

  1. 登錄到一個與轉移體相連的工作空間。

  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>;
顯示火花sql"SHOW授予[] ON STORAGE憑據"))
圖書館SparkR顯示sql"SHOW授予[] ON STORAGE憑據"))
顯示火花sql"SHOW授予[] ON STORAGE憑據"))

授予直接使用存儲憑據創建外部表的權限。

格蘭特創建表格存儲憑證<storage_credential_name><主要>;
火花sql"GRANT CREATE TABLE ON STORAGE CREDENTIAL  TO "
圖書館SparkRsql"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 "
圖書館SparkRsql"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 >:證書的名稱。

  • <主要>:帳戶級用戶的電子郵件地址或帳戶級組的名稱。

圖書館SparkRsql"更改存儲憑據 OWNER TO "

在筆記本上運行以下命令。替換占位符值:

  • < credential_name >:證書的名稱。

  • <主要>:帳戶級用戶的電子郵件地址或帳戶級組的名稱。

火花sql"更改存儲憑據 OWNER TO "

刪除存儲憑據

要刪除存儲憑據,可以使用數據資源管理器或SQL命令。

  1. 登錄到一個與轉移體相連的工作空間。

  2. 點擊數據圖標數據

  3. 在屏幕底部,單擊存儲憑證

  4. 單擊存儲憑據的名稱以打開編輯對話框。

  5. 單擊刪除按鈕。

在筆記本電腦或Databricks SQL編輯器中運行以下命令。取代< credential_name >加上證書的名稱。括號中的部分命令是可選的。默認情況下,如果外部位置使用憑據,則不會刪除它。取代< credential_name >加上證書的名稱。

  • 如果存在如果憑據不存在,則不返回錯誤。

下降存儲憑證如果存在<credential_name>;

在筆記本上運行以下命令。取代< credential_name >加上證書的名稱。括號中的部分命令是可選的。默認情況下,如果外部位置使用憑據,則不會刪除它。取代< credential_name >加上證書的名稱。

  • 如果存在如果憑據不存在,則不返回錯誤。

  • < credential_name >:證書的名稱。

    • <主要>:帳戶級用戶的電子郵件地址或帳戶級組的名稱。

    火花sql"刪除存儲憑據[IF EXISTS] "

在筆記本上運行以下命令。取代< credential_name >加上證書的名稱。括號中的部分命令是可選的。默認情況下,如果外部位置使用憑據,則不會刪除它。取代< credential_name >加上證書的名稱。

  • 如果存在如果憑據不存在,則不返回錯誤。

圖書館SparkRsql"刪除存儲憑據[IF EXISTS] "

在筆記本上運行以下命令。取代< credential_name >加上證書的名稱。括號中的部分命令是可選的。默認情況下,如果外部位置使用憑據,則不會刪除它。取代< credential_name >加上證書的名稱。

  • 如果存在如果憑據不存在,則不返回錯誤。

火花sql"刪除存儲憑據[IF EXISTS] "

管理外部位置

以下部分說明如何創建和管理外部位置。

創建一個外部位置

您可以使用數據瀏覽、SQL命令或起程拓殖

在筆記本電腦或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 >]”
圖書館SparkRsql粘貼"創建外部位置[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命令。

  1. 登錄到一個與轉移體相連的工作空間。

  2. 點擊數據圖標數據

  3. 在屏幕底部,單擊外部位置

  4. 單擊外部位置的名稱以查看其屬性。

在筆記本電腦或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 >:位置的新名稱。

圖書館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"修改外部位置location_name設置URL ' < URL > ' [FORCE]"

在筆記本上運行以下命令。替換占位符值:

  • < location_name >:外部位置名稱。

  • < url >:在您的雲租戶中,位置應該授權訪問的新的存儲URL。

圖書館SparkRsql"修改外部位置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的訪問權的存儲憑據的名稱。

圖書館SparkRsql"ALTER EXTERNAL LOCATION  SET STORAGE credential_name>"

在筆記本上運行以下命令。替換占位符值:

  • < location_name >:外部位置名稱。

  • < credential_name >:授予對雲租戶中位置URL的訪問權的存儲憑據的名稱。

火花sql"ALTER EXTERNAL LOCATION  SET STORAGE credential_name>"

管理外部位置的權限

可以在外部位置上使用數據瀏覽、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><主要>;
火花sqlGRANT CREATE TABLE ON EXTERNAL LOCATION  TO 
圖書館SparkRsqlGRANT CREATE TABLE ON EXTERNAL LOCATION  TO 
火花sqlGRANT CREATE 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 >加上外部位置的名稱。

火花sql"DROP EXTERNAL LOCATION [IF EXISTS] "

在筆記本上運行以下命令。括號中的項目是可選的。取代< location_name >加上外部位置的名稱。

圖書館SparkRsql"DROP EXTERNAL LOCATION [IF EXISTS] "

在筆記本上運行以下命令。括號中的項目是可選的。取代< location_name >加上外部位置的名稱。

火花sql"DROP EXTERNAL LOCATION [IF EXISTS] "

下一個步驟