我们正在使用Terraform构建我们的云基础架构。以前,我们创建了一些没有Terraform的服务主体,这些主体现在已在生产中使用,并且无法更改。现在,我们要移至Terraform来创建该服务主体,但是我们无法导入先前的服务主体,同时保留使用random_string创建新服务主体的结构。
resource "azuread_service_principal_password" "service-images" {
for_each = toset(var.profiles)
service_principal_id = azuread_service_principal.service-images[each.value].id
end_date = "2222-01-01T23:00:00Z"
value = random_string.images_password[each.value].result
}
resource "random_string" "images_password" {
for_each = toset(var.profiles)
length = 32
special = true
}
当我们创建一个新的服务主体时(通过向var.profiles列表中添加一个元素),它可以正常工作,但是当它已经是一个服务主体时,我们担心Terraform会破坏以前的值并降低生产效率
另外,Terraform似乎具有azuread_service_principal_password的导入接口:
terraform import azuread_service_principal_password.test 00000000-0000-0000-0000-000000000000/11111111-1111-1111-1111-111111111111
第一部分是ServicePrincipalObjectId,第二部分是ServicePrincipalPasswordKeyId,但是我在Azure门户上找不到后者的值(在哪里?)。
您将如何进行?
答案 0 :(得分:1)
不幸的是,据我所知,服务主体只能有一个密码。因此,您不能保留旧配置文件的密码,也不能为新配置文件生成新密码。
我建议您使用应用程序注册表密钥进行身份验证。与服务主体关联的应用程序注册表的机密也可以用于服务主体,并且应用程序注册表可以具有多个机密。因此,您需要创建资源azuread_application_password
而不是资源azuread_service_principal_password
。
这里是一个例子:
data "azuread_application" "example" {
name = "My First AzureAD Application"
}
resource "azuread_application_password" "example" {
application_object_id = "${data.azuread_application.example.id}"
value = "VT=uSgbTanZhyz@%nL9Hpd+Tfay_MRV#"
end_date = "2020-01-01T01:02:03Z"
}