Share via


Azure Blob 儲存體中 SSH 檔案傳輸通訊協定 (SFTP) 的支援

Blob 儲存體現在支援 SSH 檔案傳輸通訊協定 (SFTP)。 此支援可讓您使用SFTP用戶端安全地連線到 Blob 儲存體,讓您能夠使用 SFTP 進行檔案存取、檔案傳輸和檔案管理。

以下是一段影片,可告訴您更多相關資訊。

Azure 可讓您使用 Azure Blob 服務 REST API、Azure SDK 和 AzCopy 之類的工具,安全地將資料傳輸至 Blob 儲存體帳戶。 不過,舊版工作負載通常會使用傳統的檔案傳輸通訊協定,例如 SFTP。 您可以更新自訂應用程式以使用 REST API 和 Azure SDK,但是只能透過進行重大程式碼變更。

在發行這項功能之前,如果您想要使用 SFTP 將資料傳輸至 Azure Blob 儲存體,您必須購買第三方產品或協調您自己的解決方案。 針對自訂解決方案,您必須在 Azure 中 (VM) 建立虛擬機器,以裝載 SFTP 伺服器,然後更新、修補、管理、調整和維護複雜的架構。

現在,透過 Azure Blob 儲存體 的 SFTP 支援,您可以單鍵啟用 Blob 儲存體 帳戶的 SFTP 支援。 然後,您可以設定本機使用者身分識別進行驗證,以透過連接埠 22 連線至使用 SFTP 的儲存體帳戶。

本文說明 Azure Blob 儲存體的 SFTP 支援。 若要深入了解如何為儲存體帳戶啟用 SFTP ,請參閱使用 SSH 檔案傳輸通訊協定 (SFTP) 連線到 Azure Blob 儲存體

注意

SFTP 是平台層級服務,因此即使停用帳戶選項,仍會開啟連接埠 22。 如果未設定 SFTP 存取權,則所有要求都會與服務中斷連線。

SFTP 和階層命名空間

SFTP 支援需要啟用階層命名空間。 階層命名空間會利用在您電腦上組織檔案系統的相同方法,將物件 (檔案) 組織成目錄和子目錄的階層。 階層命名空間會以線性方式調整,且不會降低資料容量或效能。

階層命名空間支援不同的通訊協定。 SFTP 是其中一種可用的通訊協定。 下圖顯示透過多個通訊協定和 REST API 的儲存體存取。 為了方便閱讀,此圖會使用 Gen2 REST 一詞來指涉 Azure Data Lake Storage Gen2 REST API。

階層命名空間

SFTP 權限模型

無法使用 Microsoft Entra 身分識別來授權 SFTP 用戶端。 相反地,SFTP 會利用新的身分識別管理形式,稱為本機使用者

本機使用者必須使用密碼或安全殼層 (SSH) 私密金鑰認證進行驗證。 記憶體帳戶最多可以有 2,000 名本機使用者。

若要設定訪問許可權,您可以建立本機用戶,然後選擇驗證方法。 然後,針對您帳戶中的每個容器,您可以指定您想要授與該使用者的存取層級。

警告

本機使用者不會與其他 Azure 儲存體 許可權模型互通,例如 RBAC(角色型存取控制)和 ABAC(屬性型存取控制)。 預覽層級的本機用戶支援訪問控制清單(ACL)。

例如,Jeff 具有唯讀許可權(可透過 RBAC 或 ABAC 控制)透過其 Microsoft Entra 身分識別來儲存在容器 con1 中的檔案foo.txt。 如果 Jeff 透過 NFS (未掛接為根/超級使用者時)、Blob REST 或 Data Lake Storage Gen2 REST 存取儲存體帳戶,則系統會強制執行這些權限。 不過,如果 Jeff 的容器 con1中也具有資料刪除權限的本機使用者身分識別,則他們可以使用本機使用者身分識別並透過 SFTP 來刪除 foo.txt

啟用 SFTP 支援並不會防止其他類型的用戶端使用 Microsoft Entra ID。 對於使用 Azure 入口網站、Azure CLI、Azure PowerShell 命令、AzCopy 以及 Azure SDK 和 Azure REST API 來存取 Blob 儲存體 的使用者,您可以繼續使用 Azure Blob 儲存體 安全性設定的完整廣度來授權存取。 若要深入了解,請參閱 Azure Data Lake Storage Gen2 中的存取控制模型

驗證方法

您可以使用密碼或安全殼層 (SSH) 公開-私用金鑰組,來驗證透過 SFTP 連線的本機使用者。 您可以設定這兩種形式的驗證,並讓本機使用者選擇要使用哪一種。 不過,多重要素驗證,即需要有效密碼和有效的公開-私用金鑰組才能進行成功驗證,不支援此驗證方法。

密碼

您無法設定自訂密碼,而 Azure 會為您產生一個密碼。 如果您選擇密碼驗證,則在完成本機使用者的設定之後,就會提供您的密碼。 請務必複製該密碼,並將其儲存在您稍後可以找到的位置。 您無法再從 Azure 擷取該密碼。 如果您遺失密碼,則必須產生新的密碼。 基於安全性理由,您不能自行設定密碼。

SSH 金鑰組

公開-私密金鑰組是安全殼層 (SSH) 最常見的驗證形式。 私密金鑰是祕密,只有本機使用者知道。 公開金鑰則儲存在 Azure 中。 當 SSH 用戶端使用本機使用者身分識別連線至儲存體帳戶時,會傳送有公開金鑰和簽章的訊息。 Azure 會驗證訊息,並檢查該使用者和金鑰是否可由儲存體帳戶辨識。 若要深入了解,請參閱 SSH 和金鑰概觀

如果您選擇以私密-公開金鑰組進行驗證,您可以產生一個金鑰組、使用已儲存在 Azure 中的金鑰組,或為 Azure 提供現有公開-私密金鑰組的公開金鑰。 每個本機使用者最多可以有 10 個公開金鑰。

容器權限

針對容器層級許可權,您可以選擇要授與存取權的容器,以及您想要提供哪些存取層級(讀取、寫入、列出、刪除、建立、修改擁有權和修改許可權)。 這些權限適用於容器中的所有目錄和子目錄。 您可以為每個本機使用者授與最多 100 個容器的存取權。 您也可以在建立本機使用者之後更新容器權限。 下表詳細說明每個權限。

權限 符號 描述
讀取 r
  • 讀取檔案內容
  • 寫入 w
  • 上傳檔案
  • 建立目錄
  • 上傳目錄
  • 清單​​ l
  • 列出容器內的內容
  • 列出目錄內的內容
  • 刪除 d
  • 刪除檔案/目錄
  • 建立​​ c
  • 檔案不存在時上傳檔案
  • 目錄不存在時建立目錄
  • 修改擁有權 o
  • 變更檔案或目錄的擁有用戶或擁有群組
  • 修改使用權限 p
  • 變更檔案或目錄的 ACL
  • 在子目錄中的 blob 上執行寫入作業時,需要讀取權限才能開啟目錄和存取 Blob 屬性。

    存取控制清單 (ACL)

    重要

    這項功能目前為預覽狀態。 請參閱 Microsoft Azure 預覽版增補使用規定,以了解適用於 Azure 功能 (搶鮮版 (Beta)、預覽版,或尚未正式發行的版本) 的法律條款。

    ACL 則可讓您授與「精細」的存取權,例如特定目錄或檔案的寫入存取權。 若要深入瞭解 ACL,請參閱 Azure Data Lake 儲存體 Gen2 中的訪問控制清單(ACL)。

    若要使用 ACL 授權本機使用者,您必須先為該本機使用者啟用 ACL 授權。 請參閱 授與容器的許可權。

    注意

    雖然 ACL 可以定義許多不同類型的身分識別的許可權等級,但只有擁有的使用者、擁有群組和所有其他使用者身分識別可用來授權本機使用者。 本機用戶授權尚不支援具名使用者和具名群組。

    下表描述用於 ACL 授權的本機用戶屬性。

    屬性 說明
    UserId
  • 記憶體帳戶內本機使用者的唯一標識碼
  • 建立本機使用者時,預設會產生
  • 用於在檔案/目錄上設定擁有使用者
  • GroupId
  • 一組本機用戶的標識碼
  • 用於在檔案/目錄上設定擁有群組
  • AllowAclAuthorization
  • 允許使用 ACL 授權此本機使用者的要求
  • 如何評估 ACL 許可權

    只有當本機用戶沒有執行作業所需的容器許可權時,才會評估 ACL。 由於系統評估訪問許可權的方式,您無法使用 ACL 來限制容器層級許可權已授與的存取。 這是因為系統會先評估容器許可權,如果這些許可權授與足夠的訪問許可權,則會忽略 ACL。

    重要

    若要將檔案的讀取或寫入許可權授與本機使用者,您必須將該本機使用者 執行 許可權授與容器根資料夾,以及導致檔案之資料夾階層中的每個資料夾。 如果本機使用者是擁有使用者或擁有群組,您可以將執行許可權套用至擁有使用者或擁有群組。 否則,您必須將 Execute 許可權套用至所有其他使用者。

    使用SFTP用戶端修改 ACL

    雖然可以使用任何支援的 Azure 工具或 SDK 來修改 ACL 許可權,但本機使用者也可以修改它們。 若要讓本機使用者修改 ACL 許可權,您必須先授與本機用戶 Modify Permissions 許可權。 請參閱 授與容器的許可權。

    本機使用者可以只變更擁有使用者、擁有群組和 ACL 所有其他使用者的許可權等級。 尚不支援新增或修改具名使用者、具名群組和具名安全性主體的 ACL 專案。

    本機使用者也可以變更擁有使用者和擁有群組的標識碼。 事實上,只有本機使用者可以將擁有使用者或擁有群組的標識碼變更為本機使用者標識碼。 您無法使用 Azure 工具或 SDK 在 ACL 中參考本機使用者識別碼。 若要變更擁有使用者或擁有目錄或 Blob 的群組,必須授與 Modify Ownership 本機用戶的許可權。

    若要檢視範例,請參閱 修改檔案或目錄的 ACL。

    主目錄

    當您設定權限時,您可以選擇設定本機使用者的主目錄。 如果 SFTP 連線要求中未指定其他容器,則主目錄即是使用者預設連線的目錄。 例如,請考慮使用 Open SSH 提出的下列要求。 此要求不會將容器或目錄名稱指定為 sftp 命令的一部分。

    sftp myaccount.myusername@myaccount.blob.core.windows.net
    put logfile.txt
    

    如果您將使用者的主目錄設為 mycontainer/mydirectory,則會連線到該目錄。 然後,logfile.txt 檔案會上傳至 mycontainer/mydirectory。 如果您未設定主目錄,則連線嘗試會失敗。 相反地,連線使用者必須指定容器和要求,然後在上傳檔案之前,先使用 SFTP 命令瀏覽至目標目錄。 下列範例說明這點:

    sftp myaccount.mycontainer.myusername@myaccount.blob.core.windows.net
    cd mydirectory
    put logfile.txt  
    

    注意

    主目錄是連線本機使用者前往的初始目錄。 如果本機使用者具有適當的容器權限,就可以瀏覽至其所連線容器中的任何其他路徑。

    支援的演算法

    您可以使用許多不同的 SFTP 用戶端,安全地連線及傳輸檔案。 連線用戶端必須使用下表中指定的演算法。

    類型 演算法
    主機金鑰 1 rsa-sha2-256 2
    rsa-sha2-512 2
    ecdsa-sha2-nistp256
    ecdsa-sha2-nistp384
    金鑰交換 ecdh-sha2-nistp384
    ecdh-sha2-nistp256
    diffie-hellman-group14-sha256
    diffie-hellman-group16-sha512
    diffie-hellman-group-exchange-sha256
    密碼/加密 aes128-gcm@openssh.com
    aes256-gcm@openssh.com
    aes128-ctr
    aes192-ctr
    aes256-ctr
    完整性/MAC hmac-sha2-256
    hmac-sha2-512
    hmac-sha2-256-etm@openssh.com
    hmac-sha2-512-etm@openssh.com
    公開金鑰 ssh-rsa 2
    rsa-sha2-256
    rsa-sha2-512
    ecdsa-sha2-nistp256
    ecdsa-sha2-nistp384
    ecdsa-sha2-nistp521

    1 主機金鑰會在這裡發佈。 2 個 RSA 金鑰長度必須至少為 2,048 位。

    Azure Blob 儲存體的 SFTP 支援目前根據安全性考量因素,限制其密碼編譯演算法支援。 強烈建議客戶使用 Microsoft 安全性開發生命週期 (SDL) 核准的演算法,以安全地存取其資料。

    目前,根據 Microsoft Security SDL,我們不打算支援下列項目:ssh-dssdiffie-hellman-group14-sha1diffie-hellman-group1-sha1diffie-hellman-group-exchange-sha1hmac-sha1hmac-sha1-96。 演算法支援未來可能隨時變更。

    使用 SFTP 進行連線

    如果要開始使用,請啟用 SFTP 支援、建立本地使用者,以及指派該本地使用者的存取權限。 接著就可以使用任何 SFTP 用戶端,安全地連線並且傳送檔案。 如需逐步指引,請參閱使用 SSH 檔案傳輸通訊協定 (SFTP) 連線至 Azure Blob 儲存體

    網路考量

    SFTP 是平台層級服務,因此即使停用帳戶選項,仍會開啟連接埠 22。 如果未設定 SFTP 存取,則所有要求都會從服務收到中斷連線。 使用 SFTP 時,您可以藉由設定防火牆、虛擬網路或私人端點來限制公用存取。 這些設定會在應用程式層強制執行,這表示這些不是 SFTP 特有的設定,而且會影響對所有 Azure 儲存體端點的連線。 如需防火牆和網路設定的詳細資訊,請參閱設定 Azure 儲存體防火牆及虛擬網路

    注意

    當您直接針對儲存體帳戶端點執行時,嘗試在通訊協定層上判斷 TLS 支援的稽核工具,可能還會傳回除了必要最低版本以外的 TLS 版本。 如需詳細資訊,請參閱對儲存體帳戶的要求強制執行最低必要版本的傳輸層安全性 (TLS)

    已知受支援的用戶端

    針對 Azure Blob 儲存體,下列用戶端有 SFTP 的相容演算法支援。 如果您在連線時遇到問題,請參閱支援 Azure Blob 儲存體的 SSH 檔案傳輸通訊協定 (SFTP) 限制和已知問題。 這份清單並不詳盡,而且可能會隨著時間而變更。

    • AsyncSSH 2.1.0+
    • Axway
    • Cyberduck 7.8.2+
    • edtFTPjPRO 7.0.0+
    • FileZilla 3.53.0+
    • libssh 0.9.5+
    • Maverick 舊版 1.7.15+
    • Moveit 12.7
    • OpenSSH 7.4+
    • paramiko 2.8.1+
    • phpseclib 1.0.13+
    • PuTTY 0.74+
    • QualysML 12.3.41.1+
    • RebexSSH 5.0.7119.0+
    • Salesforce
    • ssh2js 0.1.20+
    • sshj 0.27.0+
    • SSH.NET 2020.0.0+
    • WinSCP 5.10+
    • 工作日
    • XFB.Gateway
    • JSCH 0.1.54+
    • curl 7.85.0+
    • AIX1
    • MobaXterm v21.3

    1 必須將 AllowPKCS12KeystoreAutoOpen 選項設為 no

    限制和已知問題

    如需 SFTP 支援 Azure Blob 儲存體的完整限制和問題清單,請參閱限制和已知問題文章

    定價和帳務

    啟用SFTP的每小時成本。 如需最新的定價資訊,請參閱 Azure Blob 儲存體定價

    提示

    若要避免被動費用,請考慮只在您主動使用 SFTP 來傳輸資料時才啟用 SFTP。 如需啟用和停用 SFTP 支援的相關指引,請參閱使用 SSH 檔案傳輸通訊協定 (SFTP) 連線到 Azure Blob 儲存體

    適用基礎儲存體帳戶的交易、儲存體和網路價格。 所有 SFTP 交易都會轉換成儲存體帳戶上的讀取、寫入或其他交易。 這包括所有 SFTP 命令和 API 呼叫。 若要深入了解,請參閱了解 Azure Blob 儲存體的完整計費模型