如何使用 Terraform 创建客户端密钥?

Use*_*erP 1 azure azure-active-directory terraform-provider-azure

我正在尝试使用以下代码为我的服务主体创建 Client_secret:

data "azuread_service_principal" "existing_SP" {
  display_name = "TestAppRegistration"
}
resource "azuread_service_principal_password" "Client_Secret" {
  service_principal_id = data.azuread_service_principal.existing_SP.object_id
}
Run Code Online (Sandbox Code Playgroud)

执行 terraform-apply 它已成功创建,但我在应用程序注册的“秘密和证书”部分中没有看到它:

在此输入图像描述

但是当我检查 tfstate 时,它​​显示为服务主体创建的值,但对象 ID 与同一应用程序注册中存在的企业应用程序相同:

在此输入图像描述

所以,我的问题是:

  1. 如何使用 terraform 创建客户端密钥,我做错了什么吗?
  2. 如果我做得正确,那么在门户中可以在哪里找到生成的秘密?

Ans*_*-MT 5

如何使用 terraform 创建客户端密钥,我做错了什么吗?

是的,你做的一切都是正确的。

但为了消除这里的混乱,您可能已经知道有两种类型的azure ad applicationieapp registrationsenterprise application。在 terraform 或 powershell 或 cli 中,它App Registration被称为Azure AD applicationEnterprise Application同一应用程序注册的 被称为Service Principal。因此,如果您是通过转到应用程序注册刀片从 Portal 创建的,那么默认情况下会为其创建一个服务主体,但如果您从 Powershell 或 Terraform 创建应用程序注册,则情况会有所不同。

默认情况下you will be not be able to see the secret or certificate created for service principal from portal,但您绝对可以将它与 client-id 一起用于身份验证目的。

例如 :

我使用您的代码在我的环境中对此进行了测试,并获取了 tfstate 文件中存在的密码值并用它来进行 az 登录:

在此输入图像描述

注意:使用 terraform 创建服务主体密码是安全的,因为它将存储在 tfstate 文件中,因此您在搜索它时不会遇到困难。

如果我做得正确,那么在门户中可以在哪里找到生成的秘密?

但如果您想从门户网站中寻找秘密,那么我建议您使用azuread_application

data "azuread_application" "example" {
  display_name = "postman"
}
resource "azuread_application_password" "example" {
  display_name = "terraformgenerated"
  application_object_id = data.azuread_application.example.object_id
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述