Terraform 使用 Azure 服务主体进行身份验证失败
Terraform fails using an Azure service principal for authentication
问题
Terraform 在 Azure 中创建服务主体后尝试使用 terraform plan
或 terraform apply
时出现以下错误:
provider.azurerm: No valid (unexpired) Azure CLI Auth Tokens found. Please run az login
.
重现步骤
通过 az ad sp create-for-rbac
在 Azure 中创建服务主体。
将服务主体配置作为提供程序块添加到您的 .tf
文件:
provider "azurerm" {
alias = "tf_bootstrap"
client_id = "55708466-3686-xxxx-xxxx-xxxxxxxxxxxx"
client_secret = "88352837-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
tenant_id = "129a861e-a703-xxxx-xxxx-xxxxxxxxxxxx"
subscription_id = "c2e9d518-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
resource "azurerm_resource_group" "dev" {
name = "dev-rg"
location = "East US"
}
尝试 运行 terraform plan
。
如果在 provider block 中使用 alias
键,如问题所示,必须在 each 中指定 provider
键数据或资源块。
例如:
// When a provider alias has been defined.
resource "azurerm_resource_group" "dev" {
provider = "azurerm.tf_bootstrap"
name = "dev-rg"
location = "East US"
}
如果您错过了某个资源或数据块的 provider
,则该块的身份验证将失败。
但是请注意,不 在原始提供程序块中指定 alias
键也是有效的。在那种情况下,不再需要在每个资源和数据块中指定一个 provider
键; provider
键可以省略。
// When a provider alias has not been defined.
resource "azurerm_resource_group" "dev" {
name = "dev-rg"
location = "East US"
}
问题
Terraform 在 Azure 中创建服务主体后尝试使用 terraform plan
或 terraform apply
时出现以下错误:
provider.azurerm: No valid (unexpired) Azure CLI Auth Tokens found. Please run
az login
.
重现步骤
通过 az ad sp create-for-rbac
在 Azure 中创建服务主体。
将服务主体配置作为提供程序块添加到您的 .tf
文件:
provider "azurerm" {
alias = "tf_bootstrap"
client_id = "55708466-3686-xxxx-xxxx-xxxxxxxxxxxx"
client_secret = "88352837-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
tenant_id = "129a861e-a703-xxxx-xxxx-xxxxxxxxxxxx"
subscription_id = "c2e9d518-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
resource "azurerm_resource_group" "dev" {
name = "dev-rg"
location = "East US"
}
尝试 运行 terraform plan
。
如果在 provider block 中使用 alias
键,如问题所示,必须在 each 中指定 provider
键数据或资源块。
例如:
// When a provider alias has been defined.
resource "azurerm_resource_group" "dev" {
provider = "azurerm.tf_bootstrap"
name = "dev-rg"
location = "East US"
}
如果您错过了某个资源或数据块的 provider
,则该块的身份验证将失败。
但是请注意,不 在原始提供程序块中指定 alias
键也是有效的。在那种情况下,不再需要在每个资源和数据块中指定一个 provider
键; provider
键可以省略。
// When a provider alias has not been defined.
resource "azurerm_resource_group" "dev" {
name = "dev-rg"
location = "East US"
}