如何通过PowerShell创建可访问Azure多存储容器的本地用户
解决Azure存储SFTP本地用户全局容器访问的PowerShell实现
方案一:配置自动覆盖所有容器(含新增)的权限范围
直接通过*通配符指定所有容器,无需后续手动更新,是最简便的方案。
步骤:
- 获取目标存储账户对象
$resourceGroup = "你的资源组名称" $storageAccountName = "你的存储账户名称" $storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroup -Name $storageAccountName
- 创建覆盖所有Blob容器的权限范围
权限参数可按需组合:r(读)、w(写)、d(删除)、l(列出)
$globalContainerScope = New-AzStorageLocalUserPermissionScope -Permission "rwdl" ` -Service "blob" ` -ResourceType "container" ` -ContainerName "*"
- 创建/更新本地用户
- 若要新建全局访问用户:
New-AzStorageLocalUser -StorageAccount $storageAccount ` -UserName "global-sftp-user" ` -PermissionScope $globalContainerScope ` -SshPasswordEnabled $true # 根据需求启用密码/密钥登录
- 若要更新已有用户(避免覆盖原有权限):
先获取用户现有权限范围,合并全局范围后再更新:
$existingUser = Get-AzStorageLocalUser -StorageAccount $storageAccount -UserName "existing-user" $updatedScopes = $existingUser.PermissionScope + $globalContainerScope Set-AzStorageLocalUser -StorageAccount $storageAccount ` -UserName "existing-user" ` -PermissionScope $updatedScopes
方案二:新增容器时自动为用户添加权限
如果不想使用通配符,可通过脚本实现容器创建时自动追加权限,核心是避免覆盖原有权限。
实现脚本:
param( [Parameter(Mandatory=$true)] [string]$ResourceGroupName, [Parameter(Mandatory=$true)] [string]$StorageAccountName, [Parameter(Mandatory=$true)] [string]$UserName, [Parameter(Mandatory=$true)] [string]$NewContainerName, [string]$Permission = "rwdl" ) # 获取存储账户和现有用户信息 $storageAccount = Get-AzStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageAccountName $existingUser = Get-AzStorageLocalUser -StorageAccount $storageAccount -UserName $UserName # 检查是否已存在该容器的权限,避免重复添加 $hasExistingScope = $existingUser.PermissionScope | Where-Object { $_.ContainerName -eq $NewContainerName } if (-not $hasExistingScope) { # 创建新容器的权限范围 $newContainerScope = New-AzStorageLocalUserPermissionScope -Permission $Permission ` -Service "blob" ` -ResourceType "container" ` -ContainerName $NewContainerName # 合并原有权限与新权限 $updatedScopes = $existingUser.PermissionScope + $newContainerScope # 更新用户权限 Set-AzStorageLocalUser -StorageAccount $storageAccount -UserName $UserName -PermissionScope $updatedScopes }
自动化触发(可选):
将上述脚本上传至Azure自动化账户作为Runbook,然后创建存储账户的事件网格订阅,选择Blob容器已创建事件触发Runbook,即可实现新增容器时自动授权。
内容的提问来源于stack exchange,提问作者Ruwi
相关产品推荐
相关产品推荐

