我正在尝试设置一个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登录问题,请建议。
发布于 2019-08-09 02:07:13
使用Azure自动化。这会自动设置名为RunAs帐户的东西。简单地说,这就是Azure AD服务主体。
然后,向存储帐户分配此主体权限,就像任何其他用户一样,您就完成了。
在Automation Runbook do中
$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而不是用户登录到此应用程序。
发布于 2019-08-09 15:15:40
看起来你想用一种非交互式的方式自动完成这项工作。要以非交互方式访问azure资源,您当前的最佳选择是使用服务主体(AD App)。
Azure服务主体是为与应用程序、托管服务和自动化工具一起使用以访问Azure资源而创建的身份。
另一个回复是azure automation runbook,你可以按照我的步骤在其他地方实现自动化。
1.Create an Azure Active Directory application和create a secret对于应用程序,保存secret和get values for signing in。
2.导航到门户网站-> Access control (IAM) -> Add -> Add role assignment ->中的存储帐户(或存储帐户所在的订阅),使用名称搜索您的服务主体(AD应用),并将其添加为角色(例如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
https://stackoverflow.com/questions/57417675
复制相似问题