【发布时间】:2018-03-15 05:08:21
【问题描述】:
我有一个通过服务主体通过 Azure 资源管理器端点连接到 Azure 订阅的 VSTS 项目。这适用于我通过模板化、参数驱动的部署配置 ARM 资源的构建。
我有一个额外的要求,即在构建过程中设置 Azure AD 组。我有一个可以在本地机器上正常运行的脚本。当我通过构建部署它并在托管构建控制器上执行时,脚本最初找不到 AzureAD 模块。我通过在 git Repo 中包含脚本并通过以下方式访问它来解决这个问题:
$adModulePath = $PSScriptRoot + "\PsModules\AzureAD\2.0.0.131\AzureAD.psd1"
Import-Module $adModulePath
但是,在运行New-AzureADGroup 时,我现在遇到了另一个问题。该脚本要求在发出命令之前运行Connect-AzureAD。通过硬编码凭证可以正常工作,但我不想这样做,我希望它在创建的 SPN 的上下文中运行,该 SPN 在托管的构建控制器上运行脚本。
所以,问题是,我能否获取 Azure PowerShell 执行 SPN 的当前上下文并将其传递给 Connect-AzureAD 以避免以纯文本形式存储凭据?我错过了一个技巧吗?有其他选择吗?
我当前的代码如下,注释连接在命令中可以正常工作,就像使用硬编码值一样。不带参数的调用显示了终止构建的登录 UI,因为它显然不是交互式的。
## Login to Azure
#$SecurePassword = ConvertTo-SecureString $AdminPassword -AsPlainText -Force
#$AdminCredential = New-Object System.Management.Automation.PSCredential ($AdminUserEmailAddress, $SecurePassword)
#Connect-AzureAD -Credential $AdminCredential
Connect-AzureAD
Write-Output "------------------ Start: Group Creation ------------------"
$TestForAdminGroup = Get-AzureADGroup -SearchString $AdminGroup
$TestForContributorGroup = Get-AzureADGroup -SearchString $ContributorGroup
$TestForReaderGroup = Get-AzureADGroup -SearchString $ReaderGroup
谢谢
【问题讨论】:
-
不,您需要使用凭证脚本调用 Connect-AzureAD,您可以将凭证存储在秘密变量中(单击锁定图标,它是硬编码)
-
谢谢 - 这是一个选择,我希望有更好的方法。
-
Connect-AzureAD 如果在本地机器上手动进行也是必需的。我尝试使用主密钥和 ID 生成凭据,但不能用于 Connect-AzureAD。你有办法用主键和 ID 来做吗?
-
不,很遗憾没有。我很欣赏 Azure AD 独立于 Azure 订阅,但如果 Poweshell 模块可以共享相同的上下文会很好。这没什么大不了的,但现在我必须管理两组凭据才能为单个订阅运行我的 azure 构建。
标签: powershell build azure-devops azure-active-directory