You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Terraform为Azure私有端点的网络接口添加标签?

用Terraform为Azure私有端点的网络接口添加标签

场景1:新建私有端点时直接配置网络接口标签

如果是从零开始创建密钥库的私有端点,可以直接在azurerm_private_endpoint资源的network_interface块中定义标签,这样生成的网络接口会直接带上指定标签。

resource "azurerm_resource_group" "example" {
  name     = "example-rg"
  location = "East Asia"
}

resource "azurerm_key_vault" "example" {
  name                       = "example-kv"
  location                   = azurerm_resource_group.example.location
  resource_group_name        = azurerm_resource_group.example.name
  tenant_id                  = data.azurerm_client_config.current.tenant_id
  soft_delete_retention_days = 7
  sku_name                   = "standard"
}

resource "azurerm_subnet" "example" {
  name                 = "private-endpoint-subnet"
  resource_group_name  = azurerm_resource_group.example.name
  virtual_network_name = azurerm_virtual_network.example.name
  address_prefixes     = ["10.0.1.0/24"]

  enforce_private_link_endpoint_network_policies = true
}

resource "azurerm_private_endpoint" "kv_pe" {
  name                = "example-kv-pe"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  subnet_id           = azurerm_subnet.example.id

  private_service_connection {
    name                           = "example-kv-psc"
    private_connection_resource_id = azurerm_key_vault.example.id
    subresource_names              = ["vault"]
    is_manual_connection           = false
  }

  # 直接为私有端点的网络接口设置标签
  network_interface {
    name = "example-kv-pe-nic"
    tags = {
      Environment = "Production"
      Owner       = "DevOps-Team"
      Purpose     = "KeyVault-Private-Access"
    }
  }
}

场景2:为已存在的私有端点网络接口添加/更新标签

如果私有端点已经创建,需要给它关联的网络接口补加标签,可以通过data数据源先获取目标资源,再用azurerm_network_interface资源更新标签。

# 获取已存在的密钥库私有端点
data "azurerm_private_endpoint" "existing_kv_pe" {
  name                = "existing-kv-pe"
  resource_group_name = "example-rg"
}

# 获取该私有端点对应的网络接口(一个私有端点仅关联一个网络接口)
data "azurerm_network_interface" "kv_pe_nic" {
  name                = data.azurerm_private_endpoint.existing_kv_pe.network_interface[0].name
  resource_group_name = data.azurerm_private_endpoint.existing_kv_pe.resource_group_name
}

# 更新网络接口标签,用merge保留原有标签并添加新标签
resource "azurerm_network_interface" "updated_kv_pe_nic" {
  name                = data.azurerm_network_interface.kv_pe_nic.name
  resource_group_name = data.azurerm_network_interface.kv_pe_nic.resource_group_name
  location            = data.azurerm_network_interface.kv_pe_nic.location

  # 必须完整继承原有IP配置,Terraform需要管理资源的完整状态
  ip_configuration {
    name                          = data.azurerm_network_interface.kv_pe_nic.ip_configuration[0].name
    subnet_id                     = data.azurerm_network_interface.kv_pe_nic.ip_configuration[0].subnet_id
    private_ip_address_allocation = data.azurerm_network_interface.kv_pe_nic.ip_configuration[0].private_ip_address_allocation
    private_ip_address            = data.azurerm_network_interface.kv_pe_nic.ip_configuration[0].private_ip_address
  }

  tags = merge(
    data.azurerm_network_interface.kv_pe_nic.tags, # 保留原有标签
    {
      UpdatedAt   = timestamp()
      CostCenter  = "CC-12345"
    }
  )
}

注意事项

  • 私有端点与网络接口是一对一关联的,所以通过network_interface[0]即可获取目标接口的名称。
  • 更新已存在的网络接口时,必须完整配置ip_configuration块,不能仅修改标签,否则Terraform会尝试重建接口导致服务中断。

内容的提问来源于stack exchange,提问作者Hamma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:45:33