【问题标题】:How to create a Client Secret using Terraform?如何使用 Terraform 创建客户端密码?
【发布时间】:2021-10-18 20:27:05
【问题描述】:

我正在尝试使用以下代码为我的服务主体创建 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
}

执行 terraform-apply 成功创建,但我在应用注册的 Secrets and Certificates 部分看不到它:

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

所以,我的问题:

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

【问题讨论】:

    标签: azure azure-active-directory terraform-provider-azure


    【解决方案1】:

    如何使用 terraform 创建客户端密码,有什么我需要的吗? 做错了吗?

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

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

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

    例如:

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

    注意:使用 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
    }
    

    【讨论】:

    • 感谢小伙伴的详细解释:)
    • 很高兴能帮助@UserP!!
    猜你喜欢
    • 2020-11-11
    • 2019-12-04
    • 2018-03-27
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    相关资源
    最近更新 更多