如何在 Terraform 中为 2 个存储帐户创建专用终结点

How to create Private Endpoints for 2 storage accounts in Terraform

我正在尝试为不同资源组中的 2 个存储帐户创建专用终结点 - link连接到第三个资源组中的 vNet。

我相信你只能有一个 dns_zone 和一个 dns_zone link 到 link 它到 vNet?我不确定应该在哪里创建 EndPoints 和 dns 区域。是在 Vnet 所在的资源组中还是在相关存储帐户的资源组中?

我目前的代码:

# Creating a Private DNS Zone for the Private Endpoints
resource "azurerm_private_dns_zone" "pv-dns-zone" {
  name                = "privatelink.blob.core.windows.net"
  resource_group_name = var.resource_group.name
  #
}

# Linking DNS Zone to the configured VNET
resource "azurerm_private_dns_zone_virtual_network_link" "dns_zone_network_link" {
  name                  = "vnet_link"
  resource_group_name   = var.resource_group.name
  private_dns_zone_name = azurerm_private_dns_zone.pv-dns-zone.name
  virtual_network_id    = azurerm_virtual_network.abcd-vnt.id
}


# Creating Azure Private Endpoint for 1st Blob Storage
resource "azurerm_private_endpoint" "abcd-endpt" {
  name                = "abcdendpoint"
  location            = var.resource_group.location
  resource_group_name = var.resource_group.name
  subnet_id           = azurerm_subnet.storage_subnet.id

  private_dns_zone_group {
    name                 = "private-dns-zone-group"
    private_dns_zone_ids = [azurerm_private_dns_zone.pv-dns-zone.id]
  }

  private_service_connection {
    name                           = "abcd-psc"
    is_manual_connection           = false
    private_connection_resource_id = "/subscriptions/(subscription-id)/resourceGroups/(Resourcegroupname)/providers/Microsoft.Storage/storageAccounts/(storageaccountname)"
    subresource_names              = ["blob"]
  }    
}


# Creating Azure Private Endpoint for 2nd Blob Storage  
resource "azurerm_private_endpoint" "xyz-endpt" {
  name                = "xyz-pe"
  location            = var.resource_group.location
  resource_group_name = var.resource_group.name
  subnet_id           = azurerm_subnet.storage_subnet.id

  private_dns_zone_group {
    name                 = "private-dns-zone-group"
    private_dns_zone_ids = [azurerm_private_dns_zone.pv-dns-zone.id]
  }


  private_service_connection {
    name                           = "xyz-pscs"
    is_manual_connection           = false
    private_connection_resource_id = "/subscriptions/(subscriptionid)/resourceGroups/(resourcegroupname)/providers/Microsoft.Storage/storageAccounts/(storageaccountname)"
    subresource_names              = ["blob"]
  }
}

如您所述,只有一种私有 DNS 区域类型(例如 privatelink.blob.core.windows.net)可以绑定到 VNET。这是为了让 VNET 知道将流量路由到哪里。

资源组通常只是用于访问控制的逻辑容器。您放入每个资源组的资源通常取决于您的组织要求或位置要求。与此一致,只有您的私有 DNS 区域与您的 VNET 位于同一资源组中才有意义,因为它与 VNET 相关联。

将来,您可以在不同的资源组中为其他项目拥有额外的存储帐户,这些项目都将使用相同的私有 DNS 区域。因此,将 'shared' 资源绑定到特定的 project/Resource 组是没有意义的。

另一方面,专用终结点链接到特定资源。这意味着它们的生命周期也将与该资源相关联。因此,将它们与所引用的资源放在同一个资源组中更有意义。

尽管在上面将它们部署到哪个资源组实际上并不重要,但实际上更像是一种使管理资源更加精简的约定。