【问题标题】:Update firewall rule of Azure KeyVault using Terraform使用 Terraform 更新 Azure KeyVault 的防火墙规则
【发布时间】:2021-10-21 19:45:05
【问题描述】:

我创建了一个带有默认防火墙规则的 Azure KeyVault。现在我想更新防火墙规则以使用 Terraform 添加一些 IP 地址。我知道要获取当前的 KeyVault 和资源组。但我发现很难用新的 IP 地址(防火墙)更新 KeyVault。

provider "azurerm" {
  version = "=1.36.0"
  subscription_id = "7e7f55d3-f30a-4bfd-a6be-1c59594b8592"
}

data "azurerm_resource_group" "rg_name" {
  name = "ITQIG-eu-rsv-sangamn-dev"
}

data "azurerm_key_vault" "kv_name" {
  name                = "manjugtestkv"
  resource_group_name = "${data.azurerm_resource_group.rg_name.name}"
}

【问题讨论】:

  • 如果要更新资源的配置,您需要使用资源而不是数据源。数据源只是为了获取有关现有资源的信息。您是否在 Terraform 中创建了密钥库?如果是这样,您应该在那里编辑network_acls。如果没有,那么您应该将其导入并使用 Terraform 进行管理。
  • 如果我使用 Terraform(无网络 ACL)创建了 KeyVault,现在如果我使用相同的模板(仅添加 network_acl 部分),Terraform 不会部署新的 KeyVault(删除并重新创建)?我不会丢失我现有的 KeyVault 配置(秘密和其他东西)吗?
  • 它至少会保持秘密。抱歉回答错误。我已经删除了。
  • 谢谢。我会再做一次 PoC 并检查一下。

标签: azure terraform


【解决方案1】:

您需要使用已创建密钥库的资源:

假设您的 keyvualt 在 terraform docs 中定义。我已经删除了不相关的属性。

为了允许 IP 地址列表,您需要在 network_acls 块中定义它们:

resource "azurerm_key_vault" "example" {
  name                        = "testvault"
  ...

  access_policy {
    ...
  }

  network_acls {
    # The Default Action to use when no rules match from ip_rules / 
    # virtual_network_subnet_ids. Possible values are Allow and Deny
    default_action = "Deny"

    # Allows all azure services to acces your keyvault. Can be set to 'None'
    bypass         = "AzureServices"

    # The list of allowed ip addresses.
    ip_rules       = ["1.1.1.1","2.2.2.2"]

  }
}

【讨论】:

  • 如果我使用 Terraform(无网络 ACL)创建了 KeyVault,现在如果我使用上述模板,Terraform 不会部署新的 KeyVault 吗?我不会丢失我现有的 KeyVault 配置(秘密和其他东西)吗?
【解决方案2】:

如果您手动创建了密钥库,则网络 ACL 位于该资源下。要在 TF 下进行管理,您需要将其导入您的状态,然后使用代码对其进行更新。

因此,将您的密钥库添加到您的代码中,例如之前设置的内容

resource "azurerm_key_vault" "example" {
  name                        = "testvault"
  ...

}

现在您需要导入状态文件的那部分,类似于以下内容:

terraform import azurerm_key_vault.example /subscriptions/7e7f55d3-f30a-4bfd-a6be-1c59594b8592/resourceGroups/ITQIG-eu-rsv-sangamn-dev/providers/Microsoft.KeyVault/vaults/manjugtestkv

导入后,当您运行计划时,它可能会显示一些差异,因此您需要将它们添加到代码中以匹配您的状态。一旦匹配,您就可以添加您的 network_acls 块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多