从PowerShell创建对Azure中的多个容器具有权限的用户

gorkyyrv  于 2023-03-31  发布在  Shell
关注(0)|答案(2)|浏览(156)

我有一个启用了SFTP的Azure存储帐户。我有多个容器,每个容器有一个用户,每个用户只能访问该容器。我还希望有一个用户可以访问所有容器。我知道可以在Azure门户中执行此操作。但是,我需要能够从PowerShell执行此操作。我看到两个可能的选项:要么通过权限范围,简单地在添加新容器时向用户提供对所有内容(包括新容器)的权限,要么通过在添加新容器时添加现有权限。
我尝试使用Az模块中的New-AzStorageLocalUserPermissionScope函数。但是,使用此函数,我只能(AFAIK)指定一个容器来给予权限。如果使用Set-AzStorageLocalUser函数更新具有新权限范围的用户,则会覆盖现有权限。

xfb7svmp

xfb7svmp1#

正如您所说的,使用Set-AzStorageLocalUser函数为用户更新新的权限范围时,每次都会覆盖现有的权限范围。
因此,在解决了这个问题之后,我找到了一种方法,即使用New-AzStorageAccountSASToken cmdlet为存储帐户生成SAS令牌。然后令牌有助于授予对存储帐户中所有容器的访问权限。

以下是我尝试生成SAS令牌,然后使用该SAS令牌向其他存储帐户授予访问权限的脚本。

$accountName = "<storageaccount>"       
$accountKey = "xxxxxxzxrQ=="                                                                                               
$storageContext = New-AzStorageContext -StorageAccountName $accountName -StorageAccountKey $accountKey
$permission = "rxxxxlup"     
$expiryTime = (Get-Date).AddDays(1)                                                                         
$sasToken = New-AzStorageAccountSASToken -Context $storageContext -Service Blob, File, Queue, Table -ResourceType Container -Permission $permission -StartTime (Get-Date).AddMinutes(-5) -ExpiryTime $expiryTime
$storageContext = New-AzStorageContext -StorageAccountName "<otherstorageaccount" -SasToken $sasToken
$storageContext

输出:

或者:-

我尝试使用NewAzStorageLocalUserPermissionScopeSet-AzStorageLocalUser命令,其工作情况如下:

执行步骤:

1.已使用上下文检索容器的存储帐户。
1.对于相应的用户,我为各种容器创建了权限范围。
1.这些权限范围被追加并保存在单个变量中。
1.然后为本地用户分配存储的作用域。

脚本:

$context = (Get-AzStorageAccount -Name <Storageaccount> -ResourceGroupName <resourcegroup>).Context
$Userinfo = Get-AzStorageLocalUser -Context $context -Username <User>
#permission scope for one container
$permissionScope = New-AzStorageLocalUserPermissionScope -Permission rw -Service blob -ResourceName <containername>
#New permission scope for the other container
$newScope = New-AzStorageLocalUserPermissionScope -Container <othercontainername> -Permission "rwdl"
$permissionscope.permissions += $newscope.permissions
$p1 = $permissionscope.permissions                   
$p2 = $newscope.permissions
$p1 += $p2
Set-AzStorageLocalUser  -ResourceGroupName  <Resourcegroup> -AccountName  <Storageaccount> -Username <User> -PermissionScopes $p1

输出:

kqhtkvqz

kqhtkvqz2#

我能够按照Jahnavi的建议通过附加权限范围来创建解决方案。
但是,每次更新用户时,都不可能逐个创建和追加权限范围,因为我只会获得应添加到权限中的容器的信息。我的解决方案是将权限范围保存为JSON文件。每次需要添加权限时,我都会执行以下操作:
1.读取包含当前权限的文件
1.为新容器创建权限范围
1.追加当前权限和新权限
1.为用户分配新的联合权限
1.将新的联合权限写入JSON文件
下面是我使用的代码:

# Read permissions from JSON
$CurrentPermissions = Get-Content -Path permissions.json | ConvertFrom-Json
# Permission scope for new container
$ContainerPermission = New-AzStorageLocalUserPermissionScope -Permission rwdlc -Service blob -ResourceName "mycontainer"
# Conbine permissions
$NewPermissions = $CurrentPermissions + $ContainerPermission
# Assign new permissions to user
$LocalUser = Set-AzStorageLocalUser -ResourceGroupName "MyResourceGroup" -StorageAccountName "mystorageaccount" -UserName "myuser" -PermissionScope $NewPermissions
# Write new permissions to json file
$NewPermissions | ConvertTo-Json | Out-File "permissions.json"

相关问题