我正在尝试设置一个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登录问题,请提出建议。
答案 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外部运行此文件,请手动设置服务主体。这是指南
只需从Powershell(而不是用户)登录此应用。
答案 1 :(得分:0)
看起来您想使用非交互方式来自动执行此操作。要以非交互方式访问azure资源,当前最好的选择是使用服务主体(AD App)。
Azure服务主体是为与应用程序,托管服务和用于访问Azure资源的自动化工具一起使用而创建的身份。
另一个答复是关于azure自动化运行手册,您可以按照我的步骤在其他地方将其自动化。
1。Create an Azure Active Directory application和create 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