如何通过Terraform为Azure DevOps服务连接配置指定服务主体凭证
解决方案
方案1:创建Service Principal客户端密钥(配置最简单,通用性最高)
直接通过Terraform为已创建的应用注册生成客户端密钥即可,新增如下资源:
resource "azuread_application_password" "terraform_app_secret" { application_id = azuread_application.terraform_app.id # 可自定义密钥有效期,示例为1年 end_date_relative = "8760h" }
之后修改azuredevops_serviceendpoint_azurerm的credentials块即可,注意此处serviceprincipalid需要填写服务主体的客户端ID(即application_id,而非对象ID):
credentials { serviceprincipalid = azuread_service_principal.terraform.application_id serviceprincipalkey = azuread_application_password.terraform_app_secret.value }
方案2:使用已存储在Key Vault中的证书
首先要确认你创建的Key Vault证书已开启私钥可导出权限,Terraform执行身份对Key Vault有秘密获取权限。
首先新增数据源读取证书对应的私钥内容(Key Vault中创建证书后会自动生成一个同名的秘密存储私钥):
data "azurerm_key_vault_secret" "terraform_app_cert_key" { name = azurerm_key_vault_certificate.terraform_application.name key_vault_id = azurerm_key_vault.terraform_key_vault.id }
之后修改credentials块引用私钥即可:
credentials { serviceprincipalid = azuread_service_principal.terraform.application_id serviceprincipalkey = data.azurerm_key_vault_secret.terraform_app_cert_key.value }
注意事项
- 两种方式获取的
serviceprincipalkey都是敏感值,Terraform会默认标记为敏感,不会在控制台输出明文 - 客户端密钥和证书都要注意有效期,避免过期导致服务端点失效
- 禁止硬编码任何密钥、私钥内容,全部通过Terraform资源引用传递
内容的提问来源于stack exchange,提问作者el n00b
相关产品推荐
相关产品推荐

