Terraform - Azure 作为提供者和受限访问帐户

Posted

技术标签:

【中文标题】Terraform - Azure 作为提供者和受限访问帐户【英文标题】:Terraform - Azure as a provider and limited access account 【发布时间】:2020-01-13 11:54:09 【问题描述】:

我想使用 Terraform 在 Azure 上部署一些资源。 在 Azure 上,我有一个仅在一个资源组 (RGName) 上具有“所有者权限”的帐户。不在订阅级别。

从我的 linux 服务器上,我安装了“az cli”并执行了“az login”。在这一步,一切正常。

当我想执行terraform创建一个资源时出现问题。


provider.tf 的内容(目前唯一的一个 .tf 文件):

provider "azurerm" 

如果我做一个“地形计划”,它会起作用。

如果我添加以下行,它会失败。请看最后的错误:

resource "azurerm_virtual_network" "myterraformnetwork" 
    name                = "myVnet"
    address_space       = ["10.0.0.0/16"]
    location            = "eastus"
    resource_group_name = "RGName"

    tags = 
        environment = "Terraform Demo"
    


我没有订阅级别的权限,但我不需要。 使用 Azure WebUI,我可以毫无问题地在此资源组上创建资源。


错误:

错误:确保注册资源提供程序时出错:无法使用 Azure 资源管理器注册提供程序 Microsoft.DevSpaces:resources.ProvidersClient#Register:响应请求失败:StatusCode=403 -- 原始错误:autor est/azure:服务返回错误。 Status=403 Code="AuthorizationFailed" Message="具有对象 id 'IDaccountName' 的客户端 'accountName' 没有执行操作 'Microsoft.DevSpaces/r 的授权 egister/action' 超过范围 '/subscriptions/subscriptionID' 或范围无效。如果最近授予访问权限,请刷新您的凭据。"。

在 provider.tf 第 1 行,在提供者“azurerm”中: 1:提供者“azurerm”


谢谢大家!

【问题讨论】:

【参考方案1】:

如果其他人在公司(受限)Azure 环境中遇到此问题,并且没有耐心注册提供程序(可能没有必要如果您不使用指定的terraform 资源) - 看看https://github.com/terraform-providers/terraform-provider-azurerm/issues/4440

具体来说,这可能会有所帮助:

provider "azurerm" 
  skip_provider_registration = "true"

如果您确实需要注册失败的资源(在我们的例子中是 Cannot register provider Microsoft.DevSpaces with Azure Resource Manager,但资源会根据您的环境和 Terraform 决定支持的内容而变化),这显然无济于事。

【讨论】:

【参考方案2】:

对于您的问题,当您拥有资源组的 Owner 角色时,您可以根据需要创建新资源或管理现有资源。所以权限是没有问题的。通过我这边的测试,使用具有资源组所有者角色的用户效果很好。

如错误所示,我认为可能的原因是您在租户中有多个订阅,而当前订阅不是用户拥有正确权限的正确订阅。您可以尝试通过以下命令进行检查并设置正确的订阅:

az account set --subscription subscription_id

【讨论】:

感谢您的回答。我在执行“az account list”时得到了这个:`“cloudName”:“AzureCloud”,“id”:“SUBSCRIPTIONID”,“isDefault”:true,“name”:“SUBSCRIPTIONNAME”,“state”:“Enabled” , "tenantId": "TENANTID", "user": "name": "LOGINNAME", "type": "user" `我没有这个订阅的权限,但它是我知道的唯一一个订阅。 @Lbebitas 好吧,你检查一下你是否使用了正确的租户。 您能告诉我更多有关 Azure 租户的信息吗?从我的角度来看,我没有这个愿景。我目前正在使用一项服务,并且我仅对 RG 拥有权利。非常感谢! @Lbebitas 使用服务是什么意思?您可以查看here 了解租户和订阅。您需要做的是找到您有权登录的正确租户和订阅。 @Lbebitas 问题还有更新吗?你解决问题了吗?【参考方案3】:

感谢您的回答。

我在执行“az account list”时得到了这个:

    "cloudName": "AzureCloud",
    "id": "***********0d43",
    "isDefault": true,
    "name": "BU*******",
    "state": "Enabled",
    "tenantId": "TENANTID",
    "user": 
      "name": "LOGINNAME",
      "type": "user"

我没有此订阅的权利,但我知道它是唯一的。 在 Azure WebUI 上,我可以看到 RGName 在同一个订阅中。

这是从 RGName 上的 Azure WebUI 捕获的: Azure WebUI

谢谢

【讨论】:

以上是关于Terraform - Azure 作为提供者和受限访问帐户的主要内容,如果未能解决你的问题,请参考以下文章

Terraform:无法删除已弃用的 hashcorp/azure 提供程序

Terraform azure 不兼容的提供程序版本

使用 Azure 提供程序的 Terraform “AuthorizationFailed”

在 Azure Pipeline 中运行的 Terraform 尝试安装 azcli 提供程序

使用 Azure 市场的 Terraform

译微软出品HashiCorp Terraform 和 Vault 系列视频