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 權限模型

Azure Blob 儲存體不支援透過 SFTP 進行 Microsoft Entra 驗證或授權。 相反地,SFTP 會利用新的身分識別管理形式,稱為本機使用者

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

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

警告

本機使用者不會與其他 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 的儲存體帳戶,您可以使用完整範圍的 Azure Blob 儲存體安全性設定,對透過 Azure 入口網站、Azure CLI、Azure PowerShell 命令、AzCopy 以及 Azure SDK 和 Azure REST API 存取 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
  • 變更檔案/目錄的許可權
  • 在子目錄中的 blob 上執行寫入作業時,需要讀取權限才能開啟目錄和存取 Blob 屬性。

    ACL

    針對目錄或 Blob 層級許可權,您可以變更 ADLS Gen2 ACL 所使用的擁有使用者、擁有群組和模式。 大部分的 SFTP 用戶端都會公開命令來變更這些屬性。 下表更詳細地說明常見的命令。

    Command 必要的容器許可權 描述
    chown o
  • 變更檔案/目錄的擁有使用者
  • 必須指定數值識別碼
  • chgrp o
  • 變更檔案/目錄的擁有群組
  • 必須指定數值識別碼
  • chmod p
  • 變更檔案/目錄的許可權/模式
  • 必須指定 POSIX 樣式八進位許可權
  • 變更擁有使用者和擁有群組所需的標識碼是本機使用者的新屬性的一部分。 下表詳細說明每個新的Local User 屬性。

    屬性 說明
    UserId
  • 記憶體帳戶內本機使用者的唯一標識碼
  • 建立本機使用者時,預設會產生
  • 用於在檔案/目錄上設定擁有使用者
  • GroupId
  • 本機使用者群組的標識碼
  • 用於在檔案/目錄上設定擁有群組
  • AllowAclAuthorization
  • 允許使用 ACL 授權此本機使用者的要求
  • 設定所需的 ACL 並啟用 AllowAclAuthorization本機用戶之後,他們可以使用 ACL 來授權其要求。 類似於 RBAC,容器許可權可以與 ACL 互操作。 只有當本機用戶沒有足夠的容器許可權時,才會評估 ACL。 若要深入了解,請參閱 Azure Data Lake Storage Gen2 中的存取控制模型

    主目錄

    當您設定權限時,您可以選擇設定本機使用者的主目錄。 如果 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 金鑰的長度必須至少為 2048 位元。

    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 儲存體

    已知受支援的用戶端

    針對 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 儲存體的完整計費模型

    另請參閱