授權存取 SSH 檔案傳輸通訊協定 (SFTP) 用戶端的 Azure Blob 儲存體
本文說明如何授權存取 SFTP 用戶端,讓您可以使用 SFTP 用戶端安全地連線到 Azure 儲存體 帳戶的 Blob 記憶體端點。
若要深入了解 Azure Blob 儲存體中的 SFTP 支援,請參閱 Azure Blob 儲存體中的 SSH 檔案傳輸通訊協定 (SFTP)。
必要條件
建立本機使用者
Azure 儲存體不支援共用存取簽章 (SAS),或 Microsoft Entra 驗證來存取 SFTP 端點。 相反地,您必須使用名為本機的身分識別,此身分識別可以使用 Azure 產生的密碼或安全殼層 (SSH) 金鑰組來保護。 若要授與連接用戶端的存取權,儲存體帳戶必須具有與密碼或金鑰組相關聯的身分識別。 該身分識別稱為本機使用者。
在本節中,您將了解如何建立本機使用者、選擇驗證方法,以及指派該本機使用者的使用權限。
若要深入了解 SFTP 權限模型,請參閱 SFTP 權限模型。
選取驗證方法
您可以使用密碼或安全殼層 (SSH) 公開-私鑰組,驗證從 SFTP 用戶端連線的本機使用者。
重要
雖然您可以同時啟用這兩種驗證方法,但 SFTP 用戶端只能使用其中一種進行連線。 多重要素驗證,即需要有效密碼和有效的公開和私密金鑰,才能進行成功驗證,不支援此驗證方法。
在 Azure 入口網站中,瀏覽至您的儲存體帳戶。
在 [設定] 下方,選取 SFTP,然後選取 [新增本機使用者]。
在 [新增本機使用者] 窗格中,新增使用者的名稱,然後選取您要與這個本機使用者產生關聯的驗證方法。 您可以關聯密碼及/或 SSH 金鑰。
如果您選取 [SSH 密碼],當您完成 [新增本機使用者設定] 窗格中的所有步驟時,就會顯示您的密碼。 SSH 密碼會由 Azure 產生,長度至少為 32 個字元。
如果您選取 [SSH 金鑰組],則請選取 [公用金鑰來源] 以指定金鑰來源。
下表說明每個金鑰來源選項:
選項 |
指引 |
產生新的金鑰組 |
使用此選項以建立新的公開/私密金鑰組。 公開金鑰會以您提供的金鑰名稱儲存在 Azure 中。 您可以在成功新增本機使用者之後下載私密金鑰。 |
使用儲存在 Azure 中的現有金鑰 |
如果您想要使用已儲存在 Azure 中的公開金鑰,請使用此選項。 若要在 Azure 中尋找現有的金鑰,請參閱清單金鑰。 當 SFTP 用戶端連線到 Azure Blob 儲存體時,這些用戶端必須提供與這個公開金鑰相關聯的私密金鑰。 |
使用現有的公開金鑰 |
如果您想要上傳儲存在 Azure 外部的公開金鑰,請使用此選項。 如果您沒有公開金鑰,但想要在 Azure 外部產生一個公開金鑰,請參閱使用 ssh-keygen 產生金鑰。 |
重要
僅支援 OpenSSH 格式化的公鑰。 您提供的金鑰必須使用下列格式: <key type> <key data>
。 例如,RSA 金鑰看起來會像這樣:ssh-rsa AAAAB3N...
。 如果您的金鑰是另一種格式,則之類的 ssh-keygen
工具可用來將它轉換成 OpenSSH 格式。
選取 [下一步 ] 以開啟 組態窗格的 [許可權 ] 索引標籤。
本節說明如何使用 SSH 金鑰或密碼進行驗證。
使用 SSH 金鑰進行驗證 (PowerShell)
選擇您想要使用的公鑰類型。
使用儲存在 Azure 中的現有金鑰
如果您想要使用已儲存在 Azure 中的公開金鑰,請使用此選項。 若要在 Azure 中尋找現有的金鑰,請參閱清單金鑰。 當 SFTP 用戶端連線到 Azure Blob 儲存體時,這些用戶端必須提供與這個公開金鑰相關聯的私密金鑰。
使用儲存在 Azure 外部的現有公鑰。
如果您還沒有公鑰,請參閱 使用 ssh-keygen 產生密鑰,以取得如何建立密鑰的指引。 僅支援 OpenSSH 格式化的公鑰。 您提供的金鑰必須使用下列格式: <key type> <key data>
。 例如,RSA 金鑰看起來會像這樣:ssh-rsa AAAAB3N...
。 如果您的金鑰是另一種格式,則之類的 ssh-keygen
工具可用來將它轉換成 OpenSSH 格式。
使用 New-AzStorageLocalUserSshPublicKey 命令建立公鑰物件。 將 -Key
參數設為含有金鑰類型和公開金鑰的字串。 在下列範例中,金鑰類型是 ssh-rsa
,而金鑰是 ssh-rsa a2V5...
。
$sshkey = "ssh-rsa a2V5..."
$sshkey = New-AzStorageLocalUserSshPublicKey -Key $sshkey -Description "description for ssh public key"
使用 Set-AzStorageLocalUser 命令建立本機使用者。 如果您是使用 SSH 金鑰,請將 SshAuthorizedKey
參數設為您在上一個步驟中建立的公開金鑰物件。
下列範例會建立本機用戶,然後將密鑰列印至主控台。
$UserName = "mylocalusername"
$localuser = Set-AzStorageLocalUser -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName -UserName $UserName -SshAuthorizedKey $sshkey -HasSharedKey $true -HasSshKey $true
$localuser
$localuser.SshAuthorizedKeys | ft
注意
本機使用者也具有 sharedKey
屬性,僅用於 SMB 驗證。
使用密碼進行驗證 (PowerShell)
使用 Set-AzStorageLocalUser 命令建立本機使用者,並將 參數設定 -HasSshPassword
為 $true
。
下列範例會建立使用密碼驗證的本機使用者。
$UserName = "mylocalusername"
$localuser = Set-AzStorageLocalUser -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName -UserName $UserName -HasSshPassword $true
您可以使用 New-AzStorageLocalUserSshPassword 命令來建立密碼。 將 -UserName
參數設為該使用者名稱。
下列範例會產生使用者的密碼。
$password = New-AzStorageLocalUserSshPassword -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName -UserName $UserName
$password
重要
您無法在日後擷取此密碼,因此請務必複製密碼,然後將它儲存在您可以找到的位置。 如果遺失此密碼,您必須產生一個新密碼。 請注意,SSH 密碼會由 Azure 產生,長度至少為 32 個字元。
本節說明如何使用 SSH 金鑰或密碼進行驗證。
使用 SSH 金鑰進行驗證 (Azure CLI)
選擇您想要使用的公鑰類型。
使用儲存在 Azure 中的現有金鑰
如果您想要使用已儲存在 Azure 中的公開金鑰,請使用此選項。 若要在 Azure 中尋找現有的金鑰,請參閱清單金鑰。 當 SFTP 用戶端連線到 Azure Blob 儲存體時,這些用戶端必須提供與這個公開金鑰相關聯的私密金鑰。
使用儲存在 Azure 外部的現有公鑰。
如果您還沒有公鑰,請參閱 使用 ssh-keygen 產生密鑰,以取得如何建立密鑰的指引。 僅支援 OpenSSH 格式化的公鑰。 您提供的金鑰必須使用下列格式: <key type> <key data>
。 例如,RSA 金鑰看起來會像這樣:ssh-rsa AAAAB3N...
。 如果您的金鑰是另一種格式,則之類的 ssh-keygen
工具可用來將它轉換成 OpenSSH 格式。
若要建立使用 SSH 金鑰驗證的本機使用者,請使用 az storage account local-user create 命令,然後將 參數設定 --has-ssh-key
為包含密鑰類型和公鑰的字串。
下列範例會建立名為 contosouser
的本機使用者,並使用 ssh-rsa 金鑰搭配 金鑰值 ssh-rsa a2V5...
進行驗證。
az storage account local-user create --account-name contosoaccount -g contoso-resource-group -n contosouser --ssh-authorized-key key="ssh-rsa a2V5..." --has-ssh-key true --has-ssh-password true
注意
本機使用者也具有 sharedKey
屬性,僅用於 SMB 驗證。
使用密碼進行驗證 (Azure CLI)
若要使用密碼建立已驗證的本機使用者,請使用 az storage account local-user create 命令,然後將 參數設定 --has-ssh-password
為 true
。
下列範例會建立名為 contosouser
的本機使用者,並將 參數設定 --has-ssh-password
為 true
。
az storage account local-user create --account-name contosoaccount -g contoso-resource-group -n contosouser --has-ssh-password true
使用 az storage account local-user regenerate-password 命令建立密碼 。 將 -n
參數設為該本機使用者名稱。
下列範例會產生使用者的密碼。
az storage account local-user regenerate-password --account-name contosoaccount -g contoso-resource-group -n contosouser
重要
您無法在日後擷取此密碼,因此請務必複製密碼,然後將它儲存在您可以找到的位置。 如果遺失此密碼,您必須產生一個新密碼。 請注意,SSH 密碼會由 Azure 產生,長度至少為 32 個字元。
授與容器的許可權
選擇要授與存取權的容器,以及您想要提供的存取層級。 這些權限適用於容器中的所有目錄和子目錄。 若要深入瞭解每個容器許可權,請參閱 容器許可權。
如果您想要在檔案和目錄層級授權存取權,您可以啟用 ACL 授權。 這項功能處於預覽狀態,只能使用 Azure 入口網站 來啟用。
在 [ 許可權] 索引標籤中,選取您想要提供給此本機使用者的容器。 然後,選取您要讓這個本機使用者執行的作業類型。
重要
本機用戶必須至少有一個容器許可權或該容器主目錄的 ACL 許可權。 否則,嘗試該容器的連線將會失敗。
如果您想要使用此容器中檔案和目錄相關聯的訪問控制清單 (ACL) 來授權存取權,請選取 [ 允許 ACL 授權 ] 複選框。 若要深入瞭解如何使用 ACLS 來授權 SFTP 用戶端,請參閱 ACL。
您也可以將該使用者指派給群組標識符,以將此本機使用者新增至群組。 該標識碼可以是您想要的任何數位或數位配置。 群組使用者可讓您新增和移除使用者,而不需要將 ACL 重新套用至整個目錄結構。 相反地,您可以只新增或移除群組中的使用者。
注意
系統會自動產生本機使用者的使用者標識碼。 您無法修改此識別碼,但您可以在 [編輯本機使用者] 窗格中重新開啟該使用者,在建立本機用戶之後看到標識符。
在 [ 主目錄 ] 編輯方塊中,輸入容器的名稱或目錄路徑(包括容器名稱),該名稱會是與此本機使用者相關聯的預設位置(例如: mycontainer/mydirectory
。
若要深入了解主目錄,請參閱主目錄。
選取 [新增] 按鈕以新增本機使用者。
如果您已啟用密碼驗證,則在新增本機使用者之後,Azure 產生的密碼就會出現在對話方塊中。
重要
您無法在日後擷取此密碼,因此請務必複製密碼,然後將它儲存在您可以找到的位置。
如果您選擇產生新的金鑰組,則在新增本機使用者之後,系統會提示您下載該金鑰組的私密金鑰。
注意
本機使用者具有 sharedKey
屬性,僅用於 SMB 驗證。
決定您要讓本機使用者使用的容器,以及要讓這個本機使用者執行的作業類型。 建立權限範圍物件,方法是使用 New-AzStorageLocalUserPermissionScope 命令,並將該命令的 -Permission
參數設為對應存取權限層級的一或多個字母。 可能的值為 Read(r)、Write (w)、Delete (d)、List (l)、Create (c)、Modify Ownership(o)、Modify Permissions(p)。
下列範例會建立權限範圍物件,將讀取和寫入權限授與 mycontainer
容器。
$permissionScope = New-AzStorageLocalUserPermissionScope -Permission rw -Service blob -ResourceName mycontainer
重要
本機使用者必須對連線的容器至少具有一個容器權限,否則連線嘗試將會失敗。
使用 Set-AzStorageLocalUser 命令更新本機使用者。 將 -PermissionScope
參數設為您稍早建立的權限範圍物件。
下列範例會使用容器許可權更新本機用戶,然後將許可權範圍列印至主控台。
$UserName = "mylocalusername"
$localuser = Set-AzStorageLocalUser -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName -UserName $UserName -HomeDirectory "mycontainer" -PermissionScope $permissionScope
$localuser
$localuser.PermissionScopes | ft
若要使用容器的許可權更新本機使用者,請使用 az storage account local-user update 命令,然後將該命令的參數設定 permission-scope
為對應至訪問許可權等級的一或多個字母。 可能的值為 Read(r)、Write (w)、Delete (d)、List (l)、Create (c)、Modify Ownership(o)、Modify Permissions(p)。
下列範例會將 contosocontainer
容器的讀取和寫入存取權授與名稱為 contosouser
的本機使用者。
az storage account local-user update --account-name contosoaccount -g contoso-resource-group -n contosouser --home-directory contosocontainer --permission-scope permissions=rw service=blob resource-name=contosocontainer
下一步
相關內容