首页 > 解决方案 > 使用 RM 模块的 Azure 存储帐户密钥更新

问题描述

我正在尝试设置一个 powershell 代码,它会每隔一段时间更新一次存储帐户凭据,下面是我遇到的脚本,它工作得很好。

function setupContext(){
    Add-AzureRmAccount
    Save-AzureRmContext -Path “path\to\json\file” 
}

#setupContext
Import-AzureRmContext -Path “path\to\json\file”
$subscriptionId='***********************************'
Select-AzureRMSubscription -SubscriptionId $subscriptionId -WarningAction SilentlyContinue
$resourceGroup="**************"
$storageAccountName="******************"
$BLOBKey= New-AzureRmStorageAccountKey -ResourceGroupName $resourceGroup -Name $storageAccountName -KeyName key2 
Write-Host "BLOB Key:"$BLOBKey.Keys[0]

上面的代码完成了所需的工作,但是它要求我们登录到 azure-rm 帐户,这基本上破坏了自动化这个过程的想法,因为我需要不断更新这个生成的配置文件。

注意:我现在不允许使用 az 模块,因为我工作的环境有一些 .NET 版本限制。

因此,如果有任何其他解决方案可以克服 azure rm 登录问题,请提出建议。

标签: azurepowershellazure-blob-storageazure-rm

解决方案


看起来您想使用非交互式方式自动执行此操作。要以非交互方式访问 azure 资源,目前最好的选择是使用服务主体(AD App)。

Azure 服务主体是为与应用程序、托管服务和自动化工具一起使用以访问 Azure 资源而创建的标识。

另一个回复是针对 azure 自动化运行手册,您可以按照我的步骤在其他地方自动化它。

1.创建一个 Azure Active Directory 应用程序并为该应用程序创建一个密钥,保存该密钥并获取用于登录的值

2.导航到门户中的存储帐户(或存储帐户所在的订阅) -> Access control (IAM)-> Add-> Add role assignment-> 使用名称搜索您的服务主体(AD App)并将其添加为角色(例如Owner/ Contributor) -> Save.

注意:要赋予角色,您需要使用属于Owner特定范围的帐户(存储帐户/订阅)。

3.然后使用如下脚本,将特定属性替换为step 1.

function setupContext(){
    $azureAplicationId ="<application id>"
    $azureTenantId= "<tenant id>"
    $azurePassword = ConvertTo-SecureString "<client secret>" -AsPlainText -Force
    $psCred = New-Object System.Management.Automation.PSCredential($azureAplicationId , $azurePassword)
    Add-AzureRmAccount -Credential $psCred -TenantId $azureTenantId -ServicePrincipal 
    Save-AzureRmContext -Path “path\to\json\file” 
}

#setupContext
Import-AzureRmContext -Path “path\to\json\file”
$subscriptionId='***********************************'
Select-AzureRMSubscription -SubscriptionId $subscriptionId -WarningAction SilentlyContinue
$resourceGroup="**************"
$storageAccountName="******************"
$BLOBKey= New-AzureRmStorageAccountKey -ResourceGroupName $resourceGroup -Name $storageAccountName -KeyName key2 
Write-Host "BLOB Key:"$BLOBKey.Keys[0]

此外,如果您想了解有关服务主体的更多信息,可以查看此链接 - Azure Active Directory 中的应用程序和服务主体对象


推荐阅读