在 Pulumi 中使用服务原则向 Azure 进行身份验证

Authenticate with Azure using service principle in Pulumi

我有一个 Pulumi - 在我的开发机上运行良好的程序。配置存储在 Azure 中,创建的资源也存储在 Azure 中。

为了运行这个我设置了如下环境变量:

SET ARM_SUBSCRIPTION_ID=<id>

我在本地使用 az login 登录到 Azure,然后要求我提供我的凭据。之后,我可以使用 pulumi up 来更新 Azure 中的更改。这一切都没有任何问题。

现在我想使用发布管道在 Azure Devops 中实现相同的目的。我使用“Azure CLI”- 具有正确配置的 ARM 连接的任务。该任务包含 pulumi up -s develop --yes(其中“develop”是我的 pulumi-stack)

我可以在日志中看到 Azure 登录按预期工作,但 pulumi 抛出以下错误: 错误:

Error building AzureRM Client: Authenticating using the Azure CLI is only supported as a User (not a Service Principal). To authenticate to Azure using a Service Principal, you can use the separate 'Authenticate using a Service Principal' auth method - instructions for which can be found here: https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/guides/service_principal_client_secret

虽然错误很清楚,甚至包含 url 解决此问题的解决方案:这对我没有真正帮助,因为我不直接使用 terraform,而是使用 pulumi。

TL;DR:如何配置 pulumi cli 以使用 Azure 的服务主体身份验证?

有两个选项可以配置 Pulumi 以使用服务主体进行身份验证:

  1. 设置环境变量ARM_CLIENT_IDARM_CLIENT_SECRETARM_TENANT_IDARM_SUBSCRIPTION_ID

  2. 使用配置设置它们

    pulumi config set azure:clientId <clientID>
    pulumi config set azure:clientSecret <clientSecret> --secret
    pulumi config set azure:tenantId <tenantID>
    pulumi config set azure:subscriptionId <subscriptionId>
    

参考:Service Principal Authentication