Terraform azurerm 提供程序尝试使用错误的凭据进行注册

时间:2021-01-06 23:13:50

标签: azure terraform terraform-provider-azure azure-rm

我尝试使用为服务主体授权初始化的 azurerm 提供程序运行 terraform,在 providers.tf 中具有以下内容(服务主体对订阅具有所有者访问权限并在其他代码中工作):

provider "azurerm" {
  features {}
  subscription_id    = "SSSSSSSS-SSSS-SSSS-SSSS-SSSSSSSSSSSS"
  client_id          = "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"
  tenant_id          = "<MY_TENANT_ID>"
  client_secret      = "<MY_CLIENT_SECRET>"
}

但是,当我运行 terraform planterraform apply 时,无法报告完全不同的客户端 ID:

<块引用>

错误:确保注册资源提供程序时出错。 [.... 一些无用的例子....] 原始错误:无法注册提供程序:Microsoft.ServiceFabricMesh、Microsoft.ManagedServices、Microsoft.DesktopVirtualization。错误是:无法向 Azure 资源管理器注册提供程序 Microsoft.ServiceFabricMesh:resources.ProvidersClient#Register:响应请求失败:StatusCode=403 -- 原始错误:autorest/azure:服务返回错误。 Status=403 Code="AuthorizationFailed" Message="对象 ID 为 'BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB' 的客户端 'BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB' 无权执行操作 ' Microsoft.ServiceFabricMesh/register/action' 超过范围 '/subscriptions/SSSSSSSS-SSSS-SSSS-SSSS-SSSSSSSSSSSS' 或范围无效。如果最近授予了访问权限,请刷新您的凭据。”。

换句话说,虽然我告诉 terraform 使用服务主体“AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA”,但它使用“BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB”代替。

很明显,我的代码中没有任何内容引用 ID 为“BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB”的服务主体。

设置 ARM_* 环境变量对此行为没有任何影响。

知道怎么会这样吗?

更新:我使用 terraform 0.14.3 和 azurerm 2.41。还尝试了 azurerm 2.32 - 它的行为相同。

2 个答案:

答案 0 :(得分:1)

首先,您可以输出客户端 ID,以确保您使用的是正确的服务主体,该服务主体对您正在使用的订阅和租户具有适当的授权范围。

data "azurerm_client_config" "current" {
}

output "account_id" {
  value = data.azurerm_client_config.current.client_id
}

此外,如果您使用服务主体凭据,请尝试重新生成您的密钥或服务主体。作为一种解决方法,您也可以跳过提供程序注册为

provider "azurerm" {
  skip_provider_registration = true
}

最后,尝试升级您的 terraform 和 azurerm 提供程序以获得更好的体验。在某些版本中可能存在一些错误,请参阅 this1this2

答案 1 :(得分:0)

我解决了这个问题 - 但仍然不知道为什么 terraform 使用了不正确的服务主体 ID。

一旦我手动注册了组,当 terraform 尝试在不存在的组中创建资源时,'BBBBBBBB...' 主体 ID 的问题再次发生(RG 名称中存在拼写错误)。我仍然不明白为什么 terraform 报告的是奇怪的服务主体问题而不是错过了组,但现在问题已经消失了。

感谢所有帮助我缩小范围的人!

相关问题