在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 來驗證黏性位設定,請遵循下列步驟:
使用您的帳戶登入 Azure 入口網站。 請確定此帳戶在ADLS Gen2記憶體帳戶上具有記憶體 Blob 資料擁有者角色指派。
從 Azure 入口網站 中選取 [Cloud Shell]。
使用下列命令來取得 容器/資料夾 目錄的 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 Gen2 和 Apache Hadoop 3.3.3 – HDFS 許可權指南 |
以下是使用 Azure CLI 停用/啟用黏性位設定的範例。
使用在目標 ADLS Gen2 儲存體帳戶上具有記憶體 Blob 數據擁有者角色指派的帳戶登入 Azure 入口網站。
從 Azure 入口網站 中選取 [Cloud Shell]。
若要將 容器/資料夾 目錄的 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 意應見反社群。