如何在Terraform中导入Azure KeyVault的多条访问策略
问题原因与解决方案
1. 配置报错的根源
你遇到的格式错误和多策略声明逻辑无关,问题出在object_id的赋值写法不符合HCL语法规范:
你当前写的object_id = 001、object_id = 002是带前导零的数字类型,HCL中不允许数字字面量带前导零(会被识别为非法八进制数值),同时object_id参数本身要求输入字符串类型,你没有给值加引号,双重问题导致语法校验不通过。
2. 多访问策略的支持性
你这种为每条访问策略单独声明azurerm_key_vault_access_policy资源的实现方式完全正确,Terraform AzureRM provider支持为同一个Key Vault关联最多1024条独立的访问策略资源,导入全部4条存量策略没有任何功能限制。
3. 修复与导入步骤
- 先修正所有
object_id的赋值,给值加双引号转为字符串类型,示例:
resource "azurerm_key_vault_access_policy" "policy1" { key_vault_id = azurerm_key_vault.example.id tenant_id = data.azurerm_client_config.current.tenant_id # 字符串类型必须加双引号,真实场景替换为实际UUID格式的ObjectId即可 object_id = "001" key_permissions = [ "Get", ] secret_permissions = [ "Get", ] } resource "azurerm_key_vault_access_policy" "policy2" { key_vault_id = azurerm_key_vault.example.id tenant_id = data.azurerm_client_config.current.tenant_id object_id = "002" key_permissions = [ "Get", ] secret_permissions = [ "Get", ] }
- 依次为每条策略执行导入命令,第二条策略的导入命令格式参考:
terraform import azurerm_key_vault_access_policy.policy2 /subscriptions/[你的订阅ID]/resourceGroups/[你的资源组名]/providers/Microsoft.KeyVault/vaults/[你的KV名称]/objectId/[第二条策略对应的真实ObjectId] - 四条策略全部导入完成后,执行
terraform plan验证无变更提示,即配置与存量资源完全匹配。
注意事项
不要在azurerm_key_vault资源块内同时声明access_policy参数,和外部独立的azurerm_key_vault_access_policy资源同时使用会产生配置冲突,导致访问策略被意外覆盖。
内容的提问来源于stack exchange,提问作者hitman126
相关产品推荐
相关产品推荐

