0

我正在尝试设置一个 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 登录问题,请提出建议。

4

2 回答 2

0

看起来您想使用非交互式方式自动执行此操作。要以非交互方式访问 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 中的应用程序和服务主体对象

于 2019-08-09T07:15:39.703 回答
0

使用 Azure 自动化。这会自动设置称为RunAs帐户的东西。简单地说就是Azure AD Service Principal

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

在自动化运行手册中做

$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 而不是用户登录到此应用程序。

于 2019-08-08T18:07:12.520 回答