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

问题描述 投票:0回答:4

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

在我的 Linux 服务器上,我安装了

az cli
并运行了
az login
。到这一步就一切OK了。

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


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

provider "azurerm" {
}

如果我运行

terraform plan
命令,它就会起作用。

如果我将以下行添加到我的 tf 文件中,则会失败。请看最后的错误:

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 Web UI,我可以毫无问题地在此资源组上创建资源。


错误:

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

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

azure terraform subscription provider terraform-provider-azure
4个回答
23
投票

如果其他人在企业(受限)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
投票

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

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

az account set --subscription subscription_id

1
投票

您可能需要点击注册来注册资源提供者,如下图订阅 ID 下的屏幕截图所示。

enter image description here


0
投票

谢谢您的回答。

我在执行“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

谢谢你

© www.soinside.com 2019 - 2024. All rights reserved.