Share via


在ADLS Gen2中啟用黏性位時發生403拒絕存取授權錯誤

本文可協助您瞭解黏性位,並提供當您在 Azure Data Lake Storage (ADLS) Gen2 中進行設定並取得問題時,如何檢查此設定的相關信息。

ADLS Gen2 中的黏性位為何?

ADLS Gen2 使用者通常需要管理不同用戶的許可權,其中一種方式是使用訪問控制清單 (ACL) 。 ACL 是類似 POSIX 的訪問控制系統,具有稱為黏性位的特定設定,可能會導致授權失敗。 如需許可權控制模式和񣐛性位的詳細資訊,請參閱訪問控制清單 (ACL) 中的 Azure Data Lake Storage Gen2

黏性位是ADLS Gen2記憶體帳戶的 ACL 設定中不需要的進階功能。 相反地,您可以使用 遮罩功能 來限制具名使用者、具名群組和擁有群組的許可權上限。 其運作方式類似於黏性位,而且可在 Azure 入口網站 中輕鬆設定。

403 拒絕存取授權錯誤

請試想下列案例:

  • ADLS Gen2 儲存體帳戶具有稱為容器的 容器 ,以及稱為 資料夾/子資料夾的資料夾路徑。
  • 您可以使用 ACL 作為授權方法。
  • 在 ADLS Gen2 儲存器帳戶的 ACL 設定中,您已在根目錄和 資料夾 上設定 Execute (X) 許可權,以及 子資料夾的寫入和執行 (WX) 許可權。
  • 資料夾上已啟用黏性位。
  • 您嘗試建立或上傳新檔案,例如 ,test.txt,到 ADLS Gen2 儲存器帳戶資料夾路徑 container/folder/child-folder/

在此案例中,您會收到 403 拒絕存取授權錯誤。

發生此錯誤的原因有兩個:

  • 您沒有足夠的權限可存取資料夾路徑。
  • 您有足夠的許可權,但啟用黏性位會導致您不是此資料夾路徑的擁有者。

識別黏性位是否造成 403 拒絕存取錯誤

確認資料夾和父資料夾的 ACL 設定,然後將其與 ACL 許可權相關的常見案例進行比較。 如果許可權已足夠,則 403 錯誤可能是因為黏性位所造成。

使用 Azure CLI 驗證黏性位設定

有許多方式可以檢查此設定,例如 REST API 呼叫、PowerShell 命令和 Azure CLI。 我們建議使用 Azure CLI 選項,因為它不需要安裝任何額外的軟體,而且命令很容易瞭解。

若要使用 Azure CLI 來驗證黏性位設定,請遵循下列步驟:

  1. 使用您的帳戶登入 Azure 入口網站。 請確定此帳戶在ADLS Gen2記憶體帳戶上具有記憶體 Blob 資料擁有者角色指派。

  2. Azure 入口網站 中選取 [Cloud Shell]。

    Azure 入口網站 中 [Cloud Shell] 按鈕的螢幕快照。

  3. 使用下列命令來取得 容器/資料夾 目錄的 ACL 和黏性位設定:

    az storage fs access show -p folder -f container --account-name account --auth-mode login
    

    若要檢查 ACL 和根目錄的黏性位設定,也就是容器層級 ACL 和黏性位設定,請使用下列命令:

    az storage fs access show -p / -f container --account-name account --auth-mode login
    

    以下是範例輸出:

    命令輸出範例的螢幕快照。

    在回應 JSON 主體中,將焦點放在 permissions。 它通常包含 9 或 10 位,並具有額外的 「+」 符號。 如需這些字母的詳細資訊,請參閱 使用者和身分識別

    上一個範例指出已啟用所有用戶權力,並啟用黏性位。 如需如何讀取此許可權表示法的詳細資訊,請參閱 傳統 Unix 許可權的表示法

    第九個字母有四個可能的值:“-”、“x”、“t” 和 “T”。 如果此字母的值為 「t」 或 「T」,表示已啟用黏性位。 “t” 是啟用黏性位的 “x”,而 “T” 為 “-”,且已啟用񣐛性位。

    “rwxrwxrwt” 可由下列內容說明:

    • 已為擁有者啟用 r、w 和 x 許可權。
    • 已針對 Owning 群組啟用 r、w 和 x 許可權。
    • r、w 和 x 許可權會針對其他用戶啟用,並啟用黏性位。

    若要進一步瞭解,以下是 “rwxr-xr-T” 的另一個範例:

    • 已為擁有者啟用 r、w 和 x 許可權。
    • 已啟用擁有群組的 r 和 x 許可權。
    • 其他使用者只會啟用 r 許可權,而且會啟用黏性位。

    根據 許可權的簡短表單,每三個字母群組的簡短表單許可權會計算 (“r” 為 4、“w” 為 2,而 “x” 為 1) 。 因此,“rw-rwx--x” 將等於 4+2+0、4+2+1、0+0+1、671。 根據此計算規則,您只需要在開頭新增第四個字母。 如果啟用黏性位,請將它設定為 1。 如果停用黏性位,請將它設定為 0。

    範例如下:

    • rwxrwxrwt => 1777
    • rwxr-xr-T => 1754
    • rw-rwx--x => 0671

停用/啟用黏性位設定

若要停用/啟用黏性位設定,請將許可權設定為預期的值。

用來修改此設定的 Azure 帳戶必須具有目標 ADLS Gen2 儲存器帳戶上的記憶體 Blob 數據擁有者角色。 有許多可能的方式可以修改黏性位設定。 以下是支援的 SDK:

SDK 支援的版本 其他相關資訊
REST API 2019-12-12 和更新版本的 API 版本 Path
Az PowerShell 模組 5.6.0 和更新版本 使用 PowerShell 管理 Azure Data Lake Storage Gen2 中的 ACL
Azure CLI 2.38.0 和更新版本 使用 Azure CLI 來管理 Azure Data Lake Storage Gen2 中的 ACL
.NET SDK 12.14.0 和更新版本 使用 .NET 管理 Azure Data Lake Storage Gen2 中的 ACL
Java SDK 12.11.0 和更新版本 使用 Java 管理 Azure Data Lake Storage Gen2 中的 ACL
Python SDK 12.8.0 和更新版本 使用 Python 管理 Azure Data Lake Storage Gen2 中的 ACL
JavaScript SDK 12.11.0-beta.1 和更新版本 在 Node.js 中使用 JavaScript SDK 來管理 Azure Data Lake Storage Gen2
HDFS CLI 3.3.3 和更新版本 搭配使用 HDFS CLI 與 Data Lake Storage Gen2Apache Hadoop 3.3.3 – HDFS 許可權指南

以下是使用 Azure CLI 停用/啟用黏性位設定的範例。

  1. 使用在目標 ADLS Gen2 儲存體帳戶上具有記憶體 Blob 數據擁有者角色指派的帳戶登入 Azure 入口網站。

  2. Azure 入口網站 中選取 [Cloud Shell]。

    Azure 入口網站 中 [Cloud Shell] 按鈕的螢幕快照。

  3. 若要將 容器/資料夾 目錄的 ACL 和黏性位設定設為 “rwxrwxrwt” 許可權,並啟用黏性位,請使用下列命令:

    az storage fs access set --permissions rwxrwxrwt -p folder -f container --account-name account --auth-mode login
    

    若要修改根目錄的設定,也就是容器層級 ACL 和黏性位設定,請使用下列命令:

    az storage fs access set --permissions rwxrwxrwt -p / -f container --account-name account --auth-mode login
    

    {permission notation} 一個命令中的 可以接受長格式和簡短格式表示法。 這表示下列命令也已限定:

    az storage fs access set --permissions 1776 -p folder -f container --account-name account --auth-mode login
    

    以下是範例輸出:

    命令輸出範例的螢幕快照。

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以將產品意見反應提交給 Azure 意應見反社群