如何将 Azure AD 服务主体密码导入 Terraform?
How do I import an Azure AD Service Principal Password into Terraform?
我们正在使用 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 门户上找不到后一个值(它在哪里?)。
您将如何进行?
不幸的是,据我所知,服务主体只能有一个密码。所以您不能保留旧配置文件的密码并为新配置文件生成新密码。
我建议您使用应用程序注册表密码进行身份验证。与服务主体关联的应用程序注册表的秘密也可以用于服务主体,并且应用程序注册表可以有多个秘密。所以你需要创建资源 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"
}
遗憾的是,如何导入的问题没有得到解答。
我尝试使用 terraform import 语句导入现有机密,这导致:
module.athena_front.azuread_application_password.graphapi_secret:
Importing from ID "7f30505f-7bf0-4fe5-a045-01024bf79dab"
│ Error: resource azuread_application_password doesn't support import
如果我查看 https://registry.terraform.io/providers/hashicorp/azuread/latest/docs/resources/application_password 上的文档
他们说:'This resource does not support importing.'
如果不支持,您将如何管理 Terraform 中的机密?
我们正在使用 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 门户上找不到后一个值(它在哪里?)。
您将如何进行?
不幸的是,据我所知,服务主体只能有一个密码。所以您不能保留旧配置文件的密码并为新配置文件生成新密码。
我建议您使用应用程序注册表密码进行身份验证。与服务主体关联的应用程序注册表的秘密也可以用于服务主体,并且应用程序注册表可以有多个秘密。所以你需要创建资源 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"
}
遗憾的是,如何导入的问题没有得到解答。
我尝试使用 terraform import 语句导入现有机密,这导致:
module.athena_front.azuread_application_password.graphapi_secret:
Importing from ID "7f30505f-7bf0-4fe5-a045-01024bf79dab"
│ Error: resource azuread_application_password doesn't support import
如果我查看 https://registry.terraform.io/providers/hashicorp/azuread/latest/docs/resources/application_password 上的文档 他们说:'This resource does not support importing.'
如果不支持,您将如何管理 Terraform 中的机密?