如何自动化开启/关闭Azure Blob SFTP以控制成本?
自动化Azure Blob SFTP服务启停的解决方案
核心问题解决思路
直接在Azure Automation PowerShell Runbook中使用Azure CLI命令失败,大概率是因为Runbook环境默认未配置CLI环境,且CLI的身份验证流程在Runbook中不如PowerShell Az模块适配性好。推荐使用Az PowerShell模块来实现SFTP的启停,同时通过Automation计划完成定时调度。
步骤1:配置Azure Automation环境
- 确保你的Azure Automation账户已导入
Az.Accounts和Az.Storage模块:- 进入Automation账户 → 左侧菜单「模块」→ 点击「浏览库」,搜索并导入这两个模块(选择最新稳定版本)。
- 给Automation账户配置系统托管身份,并授予目标存储账户的
Storage Account Contributor权限(或最小权限Microsoft.Storage/storageAccounts/write):- 进入Automation账户 → 左侧菜单「身份」→ 启用系统分配身份;
- 进入目标存储账户 → 左侧菜单「访问控制(IAM)」→ 添加角色分配,选择对应权限并指定Automation账户为主体。
步骤2:创建启停SFTP的PowerShell Runbook
启动SFTP的Runbook代码
# 用系统托管身份连接Azure Connect-AzAccount -Identity # 配置参数 $resourceGroupName = "你的资源组名称" $stoAccountName = "你的存储账户名称" # 启用Blob SFTP服务 Set-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $stoAccountName -EnableSftp $true Write-Output "SFTP服务已成功启用"
停止SFTP的Runbook代码
# 用系统托管身份连接Azure Connect-AzAccount -Identity # 配置参数 $resourceGroupName = "你的资源组名称" $stoAccountName = "你的存储账户名称" # 禁用Blob SFTP服务 Set-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $stoAccountName -EnableSftp $false Write-Output "SFTP服务已成功禁用"
步骤3:配置定时调度
- 给「启动SFTP」Runbook创建计划:
- 进入Runbook → 左侧菜单「计划」→ 点击「添加计划」;
- 设置每周固定触发时间(匹配你的文件传输窗口开始时间)。
- 给「停止SFTP」Runbook创建计划:
- 同样添加计划,设置为每周同一时间延后1小时触发,确保传输窗口结束后自动关闭服务。
替代方案:单个Runbook完成启停(不推荐长时运行)
如果不想创建两个Runbook,可以在单个Runbook中添加延迟逻辑,但需注意Azure Automation Runbook的最长执行时间限制(免费层为1小时,付费层可延长):
Connect-AzAccount -Identity $resourceGroupName = "你的资源组名称" $stoAccountName = "你的存储账户名称" # 启用SFTP Set-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $stoAccountName -EnableSftp $true Write-Output "SFTP服务已启用,等待1小时后关闭..." # 延迟3600秒(1小时) Start-Sleep -Seconds 3600 # 禁用SFTP Set-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $stoAccountName -EnableSftp $false Write-Output "SFTP服务已禁用"
内容的提问来源于stack exchange,提问作者Justin Murphy
相关产品推荐
相关产品推荐

