azure - Terraform - 尝试使用服务主体在 Azure 中创建资源并从 keyvault 中提取该 SP 密钥
问题描述
在过去一周左右的时间里,我一直在学习使用 Terraform 来管理 Azure 中的资源。
很棒的工具。
我发现使用 AZ 用户帐户与服务主体之间存在区别。
目标是使用指定的服务主体在 Azure 中创建资源,并引用存储在 AZ 密钥保管库中的机密。远离本地存储的秘密(文件、环境变量等)。
只要我的 azurerm 提供程序包含 subid、clientid、clientsecret 和tenantid,我就可以使用经过身份验证的服务主体成功创建资源,它工作得很好。
当我将服务主体机密作为 var sp_secret 存储在 variables.tf 中(甚至作为 env var 工作)时的工作示例:
provider "azurerm" {
version = "=2.48.0"
features { }
subscription_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
client_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
client_secret = "${var.sp_secret}"
tenant_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
我已经能够成功地从 keyvault 中提取服务主体机密并“输出”它,但我想做的是从 kv 中提取该机密并使用,例如作为提供程序 client_secret 值中的 var。前任。'client_secret = "${链接到 kv 中的秘密}"'
这是我从 keyvault 检索 SP 机密并将其输出的操作:
data "azurerm_client_config" "current" {}
variable "keyvault_name" {
default = "blah-kv"
}
variable "kvrg_name" {
default = "blah-kv-rg"
}
data "azurerm_key_vault" "keyvault" {
name = "${var.keyvault_name}"
resource_group_name = "${var.kvrg_name}"
}
data "azurerm_key_vault_secret" "kv-sp" {
name = "blah-tf-sp-secret"
key_vault_id = "${data.azurerm_key_vault.keyvault.id}"
}
output "secret_value" {
value = "${data.azurerm_key_vault_secret.kv-sp.value}"
}
如前所述,上面的代码片段成功地检索并输出了秘密。我只想在 azurerm 提供程序参考中将该机密设置为 client_secret 值,而不是输出机密。
我尝试了许多 client_secret = "${data.azurerm_key_vault_secret.kv-sp.value}" 的变体,但出现以下错误:
Error: Cycle: data.azurerm_key_vault.keyvault, provider["registry.terraform.io/hashicorp/azurerm"], data.azurerm_key_vault_secret.kv-sp
我将上述错误解释为循环引用。我已经尝试了一些我在寻找答案时发现的东西,但没有骰子。
任何指导表示赞赏。
谢谢!
解决方案
我所知。不可能达到你的期望。当您使用 Terraform 管理 Azure 资源时,您需要拥有一个具有足够权限的 Azure 帐户或服务主体。如果使用服务原则,则意味着您需要azurerm
在运行 Terraform 代码之前为提供程序配置客户端 ID 和客户端密码。但是当您将机密存储在 Azure Key Vault 中时,您需要运行代码,然后才能获取机密。它会导致循环依赖。
推荐阅读
- angular - 将 ngIf 放置在表单元素上后,FormControl 元素未定义
- python - 如何显示使用 pytube 下载 YouTube 视频的进度?
- c# - [已解决]我怎样才能得到
在 asp:repeater 中单击 div 的 div 中的值?
- azure - 天蓝色逻辑应用程序设计器中的“将自适应卡发布到团队频道并等待响应”错误
- codenameone - 找不到档案 pod 和 Podfile.lock
- anaconda - 我可以在离开 conda (Ubuntu) 时删除 anaconda 吗?
- c - 这里的“分配内存块的开始”是什么意思?
- html - 左侧的角度下拉按钮
- xcb - xcb 内存管理:我应该在迭代器中释放数据字段吗?
- google-sheets - 我在excel中为条件格式制作了一个自定义公式,它运行良好,但在谷歌表格中的工作方式不同