使用RM模块更新Azure存储帐户密钥

时间:2019-08-08 17:13:03

标签: azure powershell azure-storage-blobs azure-rm

我正在尝试设置一个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帐户,因为我需要不断更新生成的配置文件,因此这基本上使实现此过程自动化的想法失败。

注意:由于我工作的环境存在某些.NET版本限制,因此到目前为止,我不允许使用z模块。

因此,如果还有其他解决方案可以克服天蓝色的rm登录问题,请提出建议。

2 个答案:

答案 0 :(得分:0)

使用Azure自动化。这会自动设置一个名为 RunAs 的帐户。简而言之就是 Azure AD服务负责人

然后像在其他用户上一样,在存储帐户上分配此主体特权,就完成了。

然后在Automation Runbook中完成

$connection = Get-AutomationConnection -Name AzureRunAsConnection
Connect-AzureRmAccount `
    -ServicePrincipal `
    -Tenant $connection.TenantID `
    -ApplicationID $connection.ApplicationID  `
    -CertificateThumbprint $connection.CertificateThumbprint

$AzureContext = Select-AzureRmSubscription -SubscriptionId $connection.SubscriptionID

... run rest of the code ...

如果要像本地服务器一样从Azure外部运行此文件,请手动设置服务主体。这是指南

https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal

只需从Powershell(而不是用户)登录此应用。

答案 1 :(得分:0)

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

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

另一个答复是关于azure自动化运行手册,您可以按照我的步骤在其他地方将其自动化。

1。Create an Azure Active Directory applicationcreate a secret,保存该机密和get values for signing in

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]

此外,如果您想了解有关服务主体的更多信息,可以查看此链接-Application and service principal objects in Azure Active Directory