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

Lbe*_*tas 3 provider azure subscription terraform terraform-provider-azure

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

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

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


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

provider "azurerm" {
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

    tags = {
        environment = "Terraform Demo"
    }
}
Run Code Online (Sandbox Code Playgroud)

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


错误 :

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

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


谢谢你们 !

小智 6

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

具体来说,这可能有助于:

provider "azurerm" {
  skip_provider_registration = "true"
Run Code Online (Sandbox Code Playgroud)

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


Cha*_* Xu 2

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

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

az account set --subscription subscription_id
Run Code Online (Sandbox Code Playgroud)