適用於: ✔️ SMB Azure 檔案共用
在開始閱讀本文之前,請確保您已使用 Azure 角色型存取控制 (RBAC) 將共用層級權限指派給身分識別。
指派共用層級權限之後,您可以在根、目錄或檔案層級設定 Windows 訪問控制清單 (ACL),也稱為 NTFS 權限。
重要事項
要設定 Windows ACL 以實現混合身份,你需要一台運行 Windows 且與網域控制器網路連線無阻的客戶端電腦。 如果您使用 Active Directory Domain Services (AD DS) 或適用於混合式身分識別的 Microsoft Entra Kerberos 來向 Azure 檔案儲存體進行驗證,則您需要與內部部署 AD 保持無阻礙的網路連線。 如果您使用 Microsoft Entra Domain Services,用戶端電腦必須與位於 Azure 中的 Microsoft Entra Domain Services 所管理之網域控制站具有暢通無阻的網路連線能力。 對於僅適用於雲端的身份識別(預覽版),不依賴網域控制器,但裝置必須加入 Microsoft Entra ID。
Azure RBAC 和 Windows ACL 如何搭配運作
雖然共用層級權限 (RBAC) 可作為高階閘道管理員,決定使用者是否可以存取共用,但 Windows ACL (NTFS 權限) 會在更精細的層級運作,以控制使用者可以在目錄或檔案層級執行哪些作業。
當使用者嘗試存取檔案或目錄時,會強制執行共用層級和檔案/目錄層級權限。 如果其中任何一個之間存在差異,則僅適用最嚴格的一個。 例如,如果使用者在檔案層級擁有讀取/寫入存取權,但在共用層級擁有讀取權,則使用者只能讀取該檔案。 如果權限反轉,則適用相同的規則:如果使用者在共用層級具有讀取/寫入存取權,但只能在檔案層級讀取,則他們仍然只能讀取檔案。
下表顯示共用層級許可權和 Windows ACL 的組合如何共同運作,以判斷 Azure 檔案儲存體中檔案或目錄的存取權。
| 沒有 RBAC 角色 | RBAC - SMB 共用讀取器 | RBAC - SMB 股份貢獻者 | RBAC - SMB 共用提升權限的參與者 | |
|---|---|---|---|---|
| NTFS - 無 | 拒絕存取 | 拒絕存取 | 拒絕存取 | 拒絕存取 |
| NTFS - 讀取 | 拒絕存取 | 參閱 | 參閱 | 參閱 |
| NTFS - 運行並執行 | 拒絕存取 | 參閱 | 參閱 | 參閱 |
| NTFS - 清單資料夾 | 拒絕存取 | 參閱 | 參閱 | 參閱 |
| NTFS - 寫入 | 拒絕存取 | 參閱 | 讀取、執行、寫入 | 讀取、寫入 |
| NTFS - 修改 | 拒絕存取 | 參閱 | 讀取、寫入、執行、刪除 | 讀取、寫入、運行、刪除、將權限應用於您自己的文件夾/文件 |
| NTFS - 完整 | 拒絕存取 | 參閱 | 讀取、寫入、執行、刪除 | 讀取、寫入、執行、刪除、將權限套用至任何人的資料夾/檔案 |
附註
取得資料夾或檔案的擁有權以進行 ACL 組態需要額外的 RBAC 權限。 透過適用於 SMB 系統管理員的 Windows 權限模型,您可以透過指派內建的 RBAC 角色儲存體檔案資料 SMB 系統管理員 (包含 takeOwnership 權限) 來授與此權限。
支援的 Windows ACL
Azure 檔案儲存體支援整組基本和進階 Windows ACL。
| 使用者 | 定義 |
|---|---|
BUILTIN\Administrators |
內建安全性群組,代表檔案伺服器的系統管理員。 此群組是空的,而且沒有人員可以新增至該群組。 |
BUILTIN\Users |
內建安全性群組,代表檔案伺服器的使用者。 依預設會包含 NT AUTHORITY\Authenticated Users。 若為傳統檔案伺服器,您可以設定每部伺服器的成員資格定義。 針對 Azure 檔案服務,沒有主機伺服器,因此 BUILTIN\Users 包含與 NT AUTHORITY\Authenticated Users 相同的使用者集。 |
NT AUTHORITY\SYSTEM |
檔案伺服器作業系統的服務帳戶。 這類服務帳戶不適用於 Azure 檔案儲存體內容, 它包含在根目錄中,以符合混合式案例的 Windows 檔案伺服器體驗。 |
NT AUTHORITY\Authenticated Users |
AD 中的所有使用者都可以取得有效的 Kerberos 票證。 |
CREATOR OWNER |
每個物件 (目錄或檔案) 都有該物件的擁有者。 如果該物件上有指派 CREATOR OWNER 的 ACL,則此物件擁有者的使用者具有 ACL 所定義物件的權限。 |
檔案共用的根目錄包含下列許可權:
BUILTIN\Administrators:(OI)(CI)(F)BUILTIN\Users:(RX)BUILTIN\Users:(OI)(CI)(IO)(GR,GE)NT AUTHORITY\Authenticated Users:(OI)(CI)(M)NT AUTHORITY\SYSTEM:(OI)(CI)(F)NT AUTHORITY\SYSTEM:(F)CREATOR OWNER:(OI)(CI)(IO)(F)
如需這些權限的詳細資訊,請參閱 icacls 的命令列參考。
以系統管理員層級存取權掛接檔案共用
在設定 Windows ACL 之前,請以系統管理員層級存取權掛接檔案共用。 您可以採取兩種方法:
使用 SMB 系統管理員的 Windows 權限模型:指派內建 RBAC 角色 Storage File Data SMB 管理員,提供配置 ACL 的使用者所需的權限。 然後使用 身分識別型驗證 掛接檔案共用,並設定 ACL。 此方法更安全,因為它不需要儲存帳戶密鑰來掛接檔案分享。
使用儲存體帳戶金鑰 (不建議):使用儲存體帳戶金鑰掛接檔案共用,然後設定 ACL。 儲存體帳戶金鑰是敏感性認證。 基於安全理由,只有在您無法使用身分識別型驗證時,才使用此選項。
附註
如果使用者具有 完全控制 ACL 以及 儲存體檔案資料 SMB 共用提升許可權的參與者 角色 (或具有必要許可權的自訂角色) ,他們可以設定 ACL,而不需要使用 SMB 系統管理員的 Windows 許可權模型或儲存體帳戶金鑰。
針對 SMB 系統管理員使用 Windows 權限模型
建議您針對 SMB 系統管理員使用 Windows 權限模型,而不是使用儲存體帳戶金鑰。 此功能可讓您將內建 RBAC 角色儲存 檔案資料 SMB 管理員 指派給使用者,讓他們取得檔案或目錄的擁有權,以設定 ACL。
儲存檔案資料 SMB 管理員 RBAC 角色包含下列三個資料動作:
Microsoft.Storage/storageAccounts/fileServices/readFileBackupSemantics/actionMicrosoft.Storage/storageAccounts/fileServices/writeFileBackupSemantics/actionMicrosoft.Storage/storageAccounts/fileServices/takeOwnership/action
若要針對 SMB 系統管理員使用 Windows 權限模型,請遵循下列步驟:
將 儲存檔案資料 SMB 管理員 RBAC 角色指派給設定 ACL 的使用者。 如需如何指派角色的指示,請參閱 使用 Azure 入口網站指派 Azure 角色。
讓使用者使用其網域身分識別掛接檔案共用。 只要已為您的儲存體帳戶設定 身分識別型驗證 ,您就可以掛接共用,並設定和編輯 Windows ACL,而不需要使用儲存體帳戶金鑰。
登入已加入網域的裝置,或與網域控制站有無阻礙網路連線的裝置 (如果您的 AD 來源是 Microsoft Entra Domain Services,則以 Microsoft Entra 使用者身分登入)。 開啟 Windows 命令提示字元,並執行下列命令以裝載檔案共用。 將
<YourStorageAccountName>和<FileShareName>取代為您自己的值。 如果 Z: 已在使用中,請將其取代為可用的磁碟機代號。在這個階段,應使用
net use命令來掛載共享,而非使用 PowerShell。 如果您使用 PowerShell 來掛接共用,則該共用不會對 Windows 檔案總管或 cmd.exe 顯示,而且您會在設定 Windows ACL 時會遇到問題。net use Z: \\<YourStorageAccountName>.file.core.windows.net\<FileShareName>
使用儲存體帳戶存取金鑰掛載檔案共用(不建議)
警告
可能的話,請使用 SMB 系統管理員的 Windows 權限模型 來掛接共用,而不是使用儲存體帳戶金鑰。
登入已加入網域的裝置,或與網域控制站有無阻礙網路連線的裝置 (如果您的 AD 來源是 Microsoft Entra Domain Services,則以 Microsoft Entra 使用者身分登入)。 開啟 Windows 命令提示字元,然後執行下列命令來掛載檔案共用。 將 <YourStorageAccountName>、<FileShareName> 和 <YourStorageAccountKey> 取代為您自己的值。 如果 Z: 已在使用中,請將其取代為可用的磁碟機代號。 您可以在 Azure 入口網站中找到儲存體帳戶金鑰,方法是瀏覽至儲存體帳戶,然後選取 [安全性 + 網路]> [存取金鑰],您也可以使用 Get-AzStorageAccountKey PowerShell Cmdlet。
在這個階段,應使用 net use 命令來掛載共享,而非使用 PowerShell。 如果您使用 PowerShell 來掛接共用,則該共用不會對 Windows 檔案總管或 cmd.exe 顯示,而且您會在設定 Windows ACL 時會遇到問題。
net use Z: \\<YourStorageAccountName>.file.core.windows.net\<FileShareName> /user:localhost\<YourStorageAccountName> <YourStorageAccountKey>
設定 Windows ACL
設定 Windows ACL 的流程會因你驗證的是混合身份還是純雲端身份而有所不同。
對於僅限雲端的身份(預覽),您必須使用 Azure portal 或 PowerShell。 Windows 檔案總管和 icacls 目前不支援僅限雲端的身份。
對於混合身份,你可以使用 icacls 設定 Windows ACL,或使用 Windows 檔案總管。 您也可以使用 Set-ACL PowerShell 命令。 如果你在本地檔案伺服器中有目錄或檔案,且 Windows ACL 是針對 AD DS 身份設定的,你可以透過傳統檔案複製工具如 Robocopy 或最新版本 的 Azure AzCopy,複製到 Azure 檔案並保留 ACL。 如果您透過 Azure 檔案同步將目錄和檔案分層至 Azure 檔案儲存體,您的 ACL 會以原生格式延續並保存。
重要事項
如果你使用 Microsoft Entra Kerberos 來認證混合身份,必須將混合身份同步到 Microsoft Entra ID,ACL 才能被強制執行。 您可以為未同步至 Microsoft Entra ID 的身分識別設定檔案和目錄層級 ACL。 不過,不會強制執行這些 ACL,因為用於驗證和授權的 Kerberos 票證不包含未同步處理的身分識別。 如果您使用內部部署 AD DS 作為 AD 來源,您可以在 ACL 中包含未同步處理的身分識別。 AD DS 會將那些 SID 放入 Kerberos 票證中,ACL 就會被強制執行。
使用 Azure 入口網站設定 Windows ACL
如果你的身份來源是 Microsoft Entra Kerberos,你可以透過 Azure 入口網站設定每個 Entra 使用者或群組的 Windows ACL。 此方法僅適用於混合及純雲端身份,當使用 Microsoft Entra Kerberos 作為身份來源時。
請使用這個特定的網址登入 Azure 入口網站: https://aka.ms/portal/fileperms
請導覽到你想設定 Windows ACL 的檔案分享。
從服務選單中選擇 瀏覽。 如果你想在根目錄設定 ACL,請從上方選單選擇 「管理存取 」。
要為檔案或目錄設定 ACL,請右鍵點擊該檔案或目錄,然後選擇 「管理存取」。
你現在應該可以看到可用的使用者和群組。 你可以選擇新增一個使用者或新群組。 選擇任一使用者或群組最右側的鉛筆圖示,以新增或編輯該使用者/群組存取指定檔案/目錄的權限。
編輯權限。 當兩者都設定好時,拒絕總是優先於允許。 當兩者都未被設定時,預設權限會被繼承。
選擇 儲存 以設定 ACL。
使用 PowerShell 設定僅限雲端身份的 Windows ACL
如果你需要大量指派 ACL 給僅限雲端的使用者,可以使用 RestSetAcls PowerShell 模組 ,透過 Azure Files REST API 自動化這個流程。
舉例來說,如果你想設定一個根 ACL,讓只在雲端的使用者 testUser@contoso.com 擁有讀取權限:
$AccountName = "<storage-account-name>" # replace with the storage account name
$AccountKey = "<storage-account-key>" # replace with the storage account key
$context = New-AzStorageContext -StorageAccountName $AccountName -StorageAccountKey $AccountKey
Add-AzFileAce -Context $context -FileShareName test -FilePath "/" -Type Allow -Principal "testUser@contoso.com" -AccessRights Read,Synchronize -InheritanceFlags ObjectInherit,ContainerInherit
使用 icacls 設定 Windows ACL
重要事項
使用 ICACL 對純雲端身份無效。
若要授與對檔案共用下所有目錄和檔案 (包括根目錄) 的完全權限,請從與 AD 網域控制器具有暢通無阻的網路連線的機器中執行下列 Windows 命令。 請記得使用您自己的值取代預留位置值。 如果您的 AD 來源是 Microsoft Entra Domain Services,則 <user-upn> 為 <user-email>。
icacls <mapped-drive-letter>: /grant <user-upn>:(f)
如需如何使用 icacls 設定 Windows ACL,以及不同類型支援權限的相關詳細資訊,請參閱 icacls 的命令列參考。
使用 Windows 檔案總管設定 Windows ACL
如果您已登入已加入網域的 Windows 用戶端,您可以使用 Windows 檔案總管將完整權限授與檔案共用下的所有目錄和檔案,包括根目錄。 使用檔案總管只適用於混合身份;它無法用於僅限雲端的身份。
重要事項
使用 Windows 檔案總管無法存取僅限雲端的身份。 如果您的用戶端未加入網域,或您的環境有多個 AD 樹系,請勿使用 Windows 檔案總管來設定 ACL。 請改為使用 icacls。 存在此限制的原因是,因為 Windows 檔案總管 ACL 設定需要用戶端加入到儲存體帳戶所加入的 AD 網域中。
請遵循下列步驟以使用 Windows 檔案總管來設定 ACL。
- 開啟 Windows 檔案總管,右鍵單擊該檔案或目錄,然後選擇屬性。
- 選取 [安全性] 索引標籤。
- 選取 [編輯..] 以變更權限。
- 變更現有使用者的權限,或選取 [新增...] 以將權限授與新使用者。
- 在新增使用者的提示視窗中,在 [輸入要選取的物件名稱] 方框中輸入您要授與權限的目標使用者名稱,然後選取 [檢查名稱] 以尋找目標使用者的完整 UPN 名稱。 您可能需要為內部部署 AD 指定網域名稱和網域 GUID。 您可以從網域管理員或已加入內部部署 AD 的用戶端取得這項資訊。
- 選取 [確定]。
- 在 [安全性] 索引標籤中,選取您要授與新使用者的所有權限。
- 選取 [套用]。