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 提供程序
使用 Azure 提供程序的 Terraform “AuthorizationFailed”