簡體   English   中英

Azure KeyVault Terraform 循環

[英]Azure KeyVault Terraform cycle

我正在嘗試為集成 Azure 函數、KeyVault 和 CosmosDB 編寫 Terraform 描述符。

一方面,我需要 Azure 函數身份 id 來創建 KeyVault 訪問策略。 另一方面,我需要將 KeyVault 的 CosmosDB 密鑰引用放入 Azure 功能配置中。 這會導致循環依賴 Azure Functions <-> KeyVault。 有沒有辦法以某種方式解決它? 如果我要手動執行此操作,我將創建 Azure Functions App、創建 KeyVault、在 KeyVault 中添加訪問策略並使用 KeyVault 密鑰引用更新 Azure Functions。 但據我所知,Terraform 不允許以后創建和更新資源。

一些代碼片段:

函數.tf

variable "db_key" {
   type = string
}

resource "azurerm_linux_function_app" "my_functions" {
   ...
   app_settings = {
      "DB_KEY": var.db_key
   }
} 

output "functions_app_id" {
   value = azurerm_linux_function_app.my_functions.identity[0].principal_id
}

密鑰庫.tf

variable "functions_app_id" {
  type = string
}

resource "azurerm_key_vault" "my_keyvault" {
   access_policy {
      tenant_id = ...
      object_id = var.functions_app_id

      secret_permissions {
         "Get"
      }
   }
}

resource "azurerm_key_vault_secret" "db_key" {
   ...
}

output "db_key" {
   value = "@Microsoft.KeyVault(SecretUri=${azurerm_key_vault_secret.db_key.id})"
}

主文件

module "functions" {
   ...
   db_key = module.key-vault.db_key
}

module "key-vault" {
   ...
   functions_app_id = module.functions.functions_app_id
}

你可以:

  1. 使用密鑰創建 Key Vault
  2. 使用密鑰參考創建 function
  3. 將訪問策略或 RBAC 添加到 function 的保管庫

好的,我已經想出了如何做到這一點。 我應該在 functions.tf 中使用“azurerm_key_vault_access_policy”資源,而不是在 key_vault 腳本中使用 access_policy 塊。 現在看起來像這樣

函數.tf

variable "db_key" {
   type = string
}

resource "azurerm_linux_function_app" "my_functions" {
   ...
   app_settings = {
      "DB_KEY": var.db_key
   }

   identity {
      type = "SystemAssigned"
   }
} 

resource "azurerm_key_vault_access_policy" "functions_app_access_policy" {
   key_vault_id = ... //passed as output from key_vault.tf
   tenant_id = ...
   object_id = azurerm_linux_function_app.my_functions.identity[0].principal_id

   secret_permissions = ["Get"]
}

key_vault.tf 文件中不再有 access_policy 塊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM