使用多个服务主体的 Terraform 身份验证多订阅

时间:2021-04-13 11:51:33

标签: terraform terraform-provider-azure azure-managed-identity terraform-cloud

我希望我的 terraform 脚本能够使用多个服务主体对多个 azure 订阅进行身份验证。

这是我的想法:

  • 创建服务主体(应用注册)。
  • 在 azure 容器实例中部署 terraform 脚本
  • 将“贡献者”角色授予我订阅 (x) 上的服务主体
  • 当我想在此订阅中创建资源时,使用环境变量配置 terraform 脚本以选择正确的凭据。
<块引用>
$ export ARM_SUBSCRIPTION_ID=159f2485-xxxx-xxxx-xxxx-xxxxxxxxxxxx     # Client subscription
$ export ARM_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx           # client_id of the service principal
$ export ARM_CLIENT_SECRET=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
$ export ARM_TENANT_ID=72f988bf-xxxx-xxxx-xxxx-xxxxxxxxxxxx           # the same tenant for all clients

这是正确的吗?

在使用 terraform 云时,您是否有更安全的方式对多个订阅进行身份验证? (理想情况下没有 client_secret)

1 个答案:

答案 0 :(得分:1)

如果容器实例可以运行Terraform脚本,那么步骤没有问题。您授予服务主体权限并为不同的订阅更改环境变量 ARM_SUBSCRIPTION_ID,然后 Terraform 脚本适用于不同的订阅。

更安全的方法是使用 authentication with Azure CLI。如果您使用 CLI 命令设置不同的订阅:

az account set --subscription="SUBSCRIPTION_ID"

然后 Terraform 脚本也适用于不同的订阅。这样你就不需要将secret设置为环境变量了。