如何使用环境变量配置通过系统分配的托管标识进行身份验证的多个azurerm提供程序



我想使用环境变量配置两个azurerm提供程序

我试过这个:

variable "SUBSCRIPTION_ID" {
description = "Subscription ID where resources will be deployed."
}
variable "TENANT_ID" {
description = "Service Principal Tenant ID."
}
provider "azurerm" {
subscription_id = var.SUBSCRIPTION_ID
tenant_id       = var.TENANT_ID
use_msi = true
features {}
}
#################################################################
#                Tools provider
#################################################################
variable "TOOLS_SUBSCRIPTION_ID" {
description = "Subscription ID where Tools are located,"
}
variable "TOOLS_TENANT_ID" {
description = "Service Principal Tenant ID."
}
provider "azurerm" {
alias           = "tools"
subscription_id = var.TOOLS_SUBSCRIPTION_ID
tenant_id       = var.TOOLS_TENANT_ID
use_msi = true
features {}
}

已定义:

  • TF_VAR_SUBSCRIPTION_ID
  • TF_VAR_TENANT_ID
  • TF_VAR_TOOLS_SUBSCRIPTION_ID
  • TF_VAR_TOOLS_TENANT_ID

我检查了一下,所有值都存在。然而,我得到了这个错误:

│ Error: building AzureRM Client: 1 error occurred:
│   * A Client ID must be configured when authenticating as a Service Principal using a Client Secret.
│ 
│ 
│ 
│   with provider["registry.terraform.io/hashicorp/azurerm"],
│   on providers.tf line 17, in provider "azurerm":
│   17: provider "azurerm" {
│ 
╵
╷
│ Error: building AzureRM Client: 1 error occurred:
│   * A Client ID must be configured when authenticating as a Service Principal using a Client Secret.
│ 
│ 
│ 
│   with provider["registry.terraform.io/hashicorp/azurerm"].tools,
│   on providers.tf line 48, in provider "azurerm":
│   48: provider "azurerm" {
│ 

该代码是在已分配托管标识的Azure VM Scale集上运行的。

我做了另一个测试,对于单个提供者,我得到了相同的错误。通过环境变量TF_VAR_name传递变量似乎有问题。

我使用这些版本:

  • Terraform v1.0.11
  • azurerm v2.98.0

错误表示尚未指定提供程序的client_id参数。使用服务主体对AzureRM提供程序进行身份验证时,还需要指定client_id,然后指定机密或证书(不确定此处的目标(。

provider "azurerm" {
subscription_id = var.SUBSCRIPTION_ID
tenant_id       = var.TENANT_ID
client_id       = var.CLIENT_ID
features {}
}
provider "azurerm" {
alias           = "tools"
subscription_id = var.TOOLS_SUBSCRIPTION_ID
tenant_id       = var.TOOLS_TENANT_ID
client_id       = var.TOOLS_CLIENT_ID
features {}
}

这将解决您的问题,但您还需要指定上面链接文档中提到的客户端证书或机密。此外,use_msi参数被提供程序配置忽略,因此提供程序将身份验证方法理解为服务主体,而不是托管服务标识。

还要注意,对于默认的提供程序配置,您可以使用像ARM_SUBSCRIPTION_ID这样的本地身份验证环境变量,而不是Terraform变量,即var.SUBSCRIPTION_ID

我发现脚本集ARM_ACCESS_KEYARM_CLIENT_SECRET中的一个,由于这种情况,将其视为Service Prinicpal身份验证。一旦我去掉了那个部分,一切都很好。

相关内容

  • 没有找到相关文章

最新更新