Azure DevOps版本-Terraform导入失败,显示“使用服务主体进行身份验证”

时间:2020-04-27 12:45:45

标签: azure azure-devops terraform terraform-provider-azure azure-devops-extensions

我有一个在Azure DevOps上运行的项目,该项目要求创建一个KeyVault并为该保管库中的机密提供一系列托管的AppService身份访问。

由于Terraform无法赋予其自己的服务连接访问密钥库的权限(这是某种错误),因此我不得不在Terraforming之前创建具有SP访问权限的ResourceGroup和Keyvault。

通过PowerShell任务在资源组和Keyvault上运行terraform import时:

terraform init
$state = terraform state list
if ($state -like '*azurerm_resource_group.instancerg*' -and '*azurerm_key_vault.instancekeyvault*') {
    Write-Host "Resources have already been imported!"
}
else {
    terraform import azurerm_resource_group.instancerg /subscriptions/$(subscriptionid)/resourceGroups/rgname
    terraform import azurerm_key_vault.instancekeyvault /subscriptions/$(subscriptionid)/resourceGroups/rgname/providers/Microsoft.KeyVault/vaults/keyvaultname
}

terraform导入命令发生故障:

“使用服务主体进行身份验证”以对Azure进行身份验证 使用服务主体,您可以使用单独的auth方法- 有关说明,请参见此处:'

我的main.tf包含:

provider "azurerm" { 
  version = "=2.7.0"

  subscription_id = var.subscriptionid
  client_id       = var.devopsserviceconnectionaid
  client_secret   = var.devopsserviceconnectionpw
  tenant_id       = var.tennantid

  features {}
}

所有变量都链接到正确的凭据。

据我了解,Terraform应该根据上面的块中的凭证或特定的env变量(也存在...)来选择使用哪种身份验证方法,但是Terraform仍然以为我认为尝试通过Azure Cli而非服务主体进行身份验证。

1 个答案:

答案 0 :(得分:0)

如下所示,您可以在Terrav的Keyvault中使用管理身份。

object_id = azurerm_app_service.app.identity.0.principal_id

enter image description here

Web应用程序如下所示创建托管身份

enter image description here

KV如下

enter image description here

订单应该是创建具有托管身份的Web应用,然后是KV,然后是KV访问策略。

对于使用Azure管道进行身份验证,下面的服务连接可以正常工作,但是您需要通过管道传递参数。 enter image description here

有关更多信息,请查看此博客here

使用here说明了使用Azure DevOps管道调用Terraform的基于PowerShell的完整实现。此实现可防止在地形化之前将任何天蓝色资源作为先决条件。只有先决条件是创建SPN才能启用身份验证和授权。