我已经阅读了网上的文章,但他们似乎并没有完全涵盖这个话题,并希望做过这件事的人能给我一些指导。我们正在设置一个复杂的 Terraform 模板,以满足与 SaaS 产品相关的 IaC 要求。为此,我们希望模板在启动时使用用户的凭据在 Azure AD 中创建新的服务主体(这部分我没有问题)。然后在模板的下一部分中,我们使用该服务主体作为提供者。问题是它在计划/应用中引发错误,因为服务主体不存在(也就是由于服务提供者部分尚未运行,id 不存在)。那么有没有办法可以做到这一点?创建一个服务主体,然后在使用该服务主体而不将其拆分为多个模板的提供者别名中使用它?
最后,我希望此模板使用本地用户的权限或 MSI 创建服务提供商,将 RBAC 提供给订阅,然后使用该服务提供商在该订阅中创建资产。
main.ts(根)
provider "azurerm" {
alias = "ActiveDirectory"
subscription_id = "${var.subscriptionNucleus}"
}
provider "azurerm" {
alias = "Infrastructure"
subscription_id = "${var.subscriptionInfrastructure}"
}
module "activedirectory" {
providers = { azurerm = "azurerm.ActiveDirectory"
}
source = "./modules/activedirectory"
subscription_id_infrastructure = "${var.subscriptionInfrastructure}"
}
module "infrastructure" {
providers = { azurerm = "azurerm.Infrastructure"}
source = "./modules/infrastructure"
location = "${var.location}"
application_id =
"${module.activedirectory.service_principal_application_id}"
subscription_id = "${var.subscriptionInfrastructure}"
prefix = "${var.prefix}"
}
main.ts (./modules/infrastructure)
data "azurerm_azuread_service_principal" "serviceprincipal" {
application_id = "${var.application_id}"
}
provider "azurerm" {
alias = "InfrastructureSP"
subscription_id = "${var.subscription_id}"
client_id = "${var.application_id}"
client_secret = "secret"
tenant_id =
"${data.azurerm_client_config.clientconfig.tenant_id}"
}