我想使用 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 资源) - 请查看在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 决定支持的内容而变化)
对于您的问题,当您拥有资源组的所有者角色时,您可以根据需要创建新资源或管理现有资源。所以许可是没有问题的。根据我这边的测试,使用具有资源组的所有者角色的用户可以很好地工作。
如错误所示,我认为可能的原因是您在租户中有多个订阅,并且当前订阅不是用户拥有正确权限的正确订阅。您可以尝试通过以下命令进行检查并设置正确的订阅:
az account set --subscription subscription_id
谢谢您的回答。
我在执行“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
谢谢你