如何使用Terraform为Azure Service Principal创建客户端密钥

时间:2020-07-22 06:54:26

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

我在Azure和Terraform中还很陌生,并且正在尝试使用Terraform为Azure Service Principal创建一个秘密客户端。 我无法弄清楚。

这就是我现在拥有的:

provider "azuread" {
  version = "=0.7.0"
  client_id = var.aws_client_id
  subscription_id = var.aws_subscription_id
  tenant_id = var.aws_tenant_id
  client_secret = var.aws_client_secret
}

# Create an application
resource "azuread_application" "app" {
  name = var.azurerd_app_name
}

# Create a service principal
resource "azuread_service_principal" "app" {
  application_id = azuread_application.app.application_id
}

这就是我正在尝试的(对此不太确定):

resource "random_string" "password" {
  length  = 32
  special = true
}

# Create Service Principal password
resource "azuread_service_principal_password" "app" {
  end_date             = "2299-12-30T23:00:00Z"                        # Forever
  service_principal_id = azuread_service_principal.app.id
  value                = random_string.password.result
}

这显然是行不通的。这不会产生任何错误,但是在Azure控制台上看不到任何秘密。看起来这是用于在服务主体上附加一些密码,但是我不确定它在做什么。

请让我知道对此可以采取的措施。任何帮助,将不胜感激。谢谢

2 个答案:

答案 0 :(得分:1)

实际上,azuread_service_principal_password运作良好,但是密码未在门户中显示。

您可以使用azuread_application_password来管理与Azure AD中的应用程序关联的密码。请参见注意,请确保该应用程序具有上述权限。

答案 1 :(得分:1)

在您的示例中创建的服务原则的客户机密将起作用。当您将其分配给作为客户机密的random_string.password.result时,客户机密将具有值azuread_service_principal_password.app.value

如果要将客户端机密输出到控制台以查看它,则可以创建terraform输出:

output "client_secret" {
  value = random_string.password.result
  sensitive = false # Note that you might not want to print this in out in the console all the time
}

您还可以在任何时候希望terraform从其状态中打印出值:

$ terraform state show random_string.password.result