【问题标题】:Azure DevOps pipeline variable group cannot list Key VaultAzure DevOps 管道变量组无法列出 Key Vault
【发布时间】:2020-12-08 18:08:48
【问题描述】:

我有 Azure DevOps 管道变量组,它无法列出 Key Vault。但是管道可以设置秘密。有什么问题?

根本找不到密钥库:

- Create Variable Group in Library of Azure DevOps
- Select Service Principal as Subscription
- No Key vault instance is listed in drop down

密钥保管库访问策略

- Application: Service Principal
- Key Permission: List
- Secret Permission: Get, List, Set

管道中的工作代码:

$ConnectionString = az storage account show-connection-string -g $(resource-group) -n sa$(project- 
name)$(environment) -o "tsv"
$CurrentConnectionString = az keyvault secret show --name StorageAccountConnectionString --vault-name 
$(key-vault-name) --query value -o "tsv"
          if (!($ConnectionString -eq $CurrentConnectionString)) {
            az keyvault secret set -n StorageAccountConnectionString --vault-name $(key-vault-name) --value $ConnectionString -o none
          }
          else {
            write-host("Secret already in key vault!")
          }

【问题讨论】:

  • 我在回答中分享了一些排查方法,大家可以参考。如果还是不行,可以查看UI页面是否有错误提示,分享service connection连接方式(自动/手动)

标签: azure-devops azure-pipelines azure-keyvault


【解决方案1】:

据我所知,如果您为服务主体设置了Secret Permission: Get, List,它就可以访问在 Azure Devops 中使用 Azure Key Vault。

由于您在下拉列表中看不到 Key Vault 名称,您可以尝试检查 Azure 服务连接。

如果您使用Service principal (manual)创建服务连接,您需要确保服务主体在正确的Azure Subscription下。

另一方面,您可以使用以下 Azure Powershell 脚本创建新的服务主体。

az account set --subscription <Azure-SubscriptionId>

az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/SUBSCRIPTION_ID"

然后您可以为新的服务主体设置密钥保管库权限并在 Azure Devops 服务连接中使用它。

您也可以尝试使用Service principal (automatic) Azure Devops Service 连接并检查它是否可以看到 keyvault。

【讨论】:

  • 我已经为同一个资源组创建了测试密钥保管库,我可以看到列出的这个密钥保管库。我没有向服务主体添加任何访问策略。
  • 然后我为不同的资源组创建了测试密钥保管库,我的实际密钥保管库也位于该资源组。我没有向服务主体添加任何访问策略。这个是没有列出的。我的用户对资源组的权限有问题吗?所有密钥保管库都位于同一个潜艇中。
  • 嗨@Kenny_I。能否请您帮助我们确定 Azure Devops Service 连接方法(自动或手动)?如果方法为Automatic,则只能显示单个资源组的azure keyvault。
  • 另一方面,您可以尝试在 Azure 订阅 -> 访问控制 (IAM) -> 角色分配中检查服务主体的角色。您可以将Reader role 授予服务主体。根据我的测试,在这种情况下,服务主体可以看到所有 azure key vaults(手动服务连接)。你可以参考这个文档:docs.microsoft.com/en-us/azure/active-directory/develop/…
  • 服务主体需要对 Key Vault 实例的贡献访问权限
猜你喜欢
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多