【问题标题】:Azure Service Connection not working across multiple subscriptionsAzure 服务连接无法跨多个订阅工作
【发布时间】:2022-01-08 09:55:12
【问题描述】:

我最近尝试建立与第二个订阅的服务连接,我让它在第一个订阅上正常工作,并且已经工作了七个月,并且仍在工作。但是当我让服务主体应用程序访问新订阅时,管道失败并说它看不到资源组。这是在 Terraform 初始化步骤中。

我已在订阅级别授予贡献者对服务主体的访问权限,并且出于良好的考虑,我已授予贡献者对其自身实际资源组上的服务主体的访问权限。

这是我得到的错误:

Initializing the backend...

Successfully configured the backend "azurerm"! Terraform will automatically
use this backend unless the backend configuration changes.
╷
│ Error: Failed to get existing workspaces: Error retrieving keys for Storage Account "nsterraformstatestorage": storage.AccountsClient#ListKeys: Failure responding to request: StatusCode=404 -- Original Error: autorest/azure: Service returned an error. Status=404 Code="ResourceGroupNotFound" Message="Resource group 'TerraformBackendForCICTesting' could not be found."
│ 
│ 
╵

##[error]Error: The process '/opt/hostedtoolcache/terraform/1.0.4/x64/terraform' failed with exit code 1

我过去一直关注这个帖子来设置服务连接:https://sabirmohamed.com/how-to-create-a-service-connection-in-the-azure-devops/

我相信两个订阅都在同一个租户中。

我肯定遗漏了一些东西,因为我确信一个服务主体可以跨多个订阅工作。

【问题讨论】:

    标签: azure azure-devops terraform azure-pipelines azure-subscription


    【解决方案1】:

    如果您在订阅范围级别创建服务连接(在链接之后完成),则服务连接将绑定到您在创建时输入的订阅。

    如果您改为创建一个包含两个订阅的管理组并使用该管理组作为范围创建服务连接,那么它应该适用于两个订阅。

    就我个人而言,我不喜欢为服务主体和服务连接提供过宽的访问权限,因此我通常为每个订阅创建至少一个。

    编辑(由于 cmets 格式不佳)

    如果任务需要,可以在任务级别设置服务连接:

    steps:
      - task: AzureKeyVault@1
        displayName: KeyVault
        inputs:
          azureSubscription: ${{ parameters.serviceConnectionName }}
          KeyVaultName: ${{ parameters.keyVaultName }}
    

    编辑 2:

    在 Terraform 任务中,服务连接设置如下:

    environmentServiceNameAzureRM: 'YourServiceConnectionName'
    

    【讨论】:

    • 但是你必须为每个订阅创建一个管道,对吗?如果您为每个潜艇建立一个服务连接?
    • 如果步骤需要,您可以在任务级别将服务连接设置为输入。通常,yaml 属性称为“azureSubscription”。 steps: - task: AzureKeyVault@1 displayName: KeyVault inputs: azureSubscription: ${{ parameters.serviceConnection }} KeyVaultName: ${{ parameters.keyVaultName }}
    • 您将其范围限定为管理组的想法没有奏效,我之前在管理组中遇到过问题。这是我现在得到的错误。 ` 错误:无法获取现有工作区:检索存储帐户“nsterraformstatestorage”的密钥时出错:storage.AccountsClient#ListKeys:响应请求失败:StatusCode=400 - 原始错误:autorest/azure:服务返回错误。 " Status=400 Code="InvalidSubscriptionId" Message="提供的订阅标识符'未定义'格式错误或无效。" ` 我记录了一个错误github.com/microsoft/azure-pipelines-tasks/issues/14744
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 2017-11-19
    • 2020-07-15
    • 1970-01-01
    • 2016-05-28
    • 2013-02-08
    • 2020-06-13
    相关资源
    最近更新 更多