如何在Terraform中将资源添加到子网中



我需要通过防火墙保护我的所有资源(位于不同子网中),因此我需要知道如何为每个资源分配子网。

我想知道将任何资源连接到子网的最简单方法是什么

我见过不同的资源可以通过不同的解决方案连接到一个子网。这让我很困惑,因为显然每个资源都有自己的解决方案来连接到子网。

以下是一些例子:

Databricks可以通过将delegation添加到子网来连接,如下所示:

resource "azurerm_subnet" "private_snet" {
name                 = "subnet-private"
resource_group_name  = var.resource_group_name
virtual_network_name = azurerm_virtual_network.test_vnet.name
address_prefixes     = ["10.0.1.0/24"]
delegation {
name = "databricksprivatermdelegation"
service_delegation {
name = "Microsoft.Databricks/workspaces"
}
}
}

然而,azurerm_mssql_server使用非常不同的资源azurerm_mssql_virtual_network_rule,将sql数据库放置到子网中,如下所示:

resource "azurerm_mssql_virtual_network_rule" "example" {
name      = "sql-vnet-rule"
server_id = azurerm_mssql_server.example.id
subnet_id = azurerm_subnet.example.id
}

当涉及到azurerm_storage_account时,它有自己的解决方案network_rules,如下所示:

resource "azurerm_storage_account" "example" {
name                = "storageaccountname"
resource_group_name = azurerm_resource_group.example.name
location                 = azurerm_resource_group.example.location
account_tier             = "Standard"
account_replication_type = "LRS"
network_rules {
default_action             = "Deny"
ip_rules                   = ["100.0.0.1"]
virtual_network_subnet_ids = [azurerm_subnet.example.id]
}
}

并且最后CCD_ 6没有将其连接到子网的自变量。

简而言之,我的问题是:

有没有什么简单直接的解决方案可以让我将资源设置为azurerm_subnet

TLDR

答案1:如果您只想使用服务端点,则没有简单的统一方法来配置资源以允许从子网访问。考虑使用私人链接。

答案2:识别不同类型的Azure服务VNet集成:https://learn.microsoft.com/en-us/azure/virtual-network/vnet-integration-for-azure-services


您需要重新迭代您的计划,并确定您的资源与虚拟网络的集成类型。

Azure服务与VNets集成的高级描述:https://learn.microsoft.com/en-us/azure/virtual-network/vnet-integration-for-azure-services

服务终结点

  • 到资源的传入流量
  • 使部署/注入子网的资源能够与目标资源通信
  • 需要配置
    • 目标资源:允许从给定子网访问
    • 源子网:
      • 启用服务端点
        • serviceEndpoints属性
      • 打开(VNet服务端点策略)[https://learn.microsoft.com/en-us/azure/virtual-network/virtual-network-service-endpoint-policies-overview]为了额外的安全
        • serviceEndpointPolicies属性

Azure在服务端点打开后自动更改路由和IP地址。添加资源的传入规则并添加对源子网的服务端点支持后,无需额外交互。

专用终结点

  • 专用链接与服务端点类似,但更新,可以配置更多
  • 资源的传入流量
  • (支持的服务列表)[https://learn.microsoft.com/en-us/azure/private-link/availability]
  • 需要以下额外资源
    • 专用端点
      • 主要是元数据
    • 网络接口
      • 到此接口的流量被路由到目标资源
    • 可选的专用DNS区域和相关资源
      • 建议,否则需要使用IP地址和/或更改主机文件
    • 用于额外安全性的可选NSG规则

VNet注入/部署到VNet

  • Azure服务已部署/注入VNet
  • 传出和传入流量通过VNet
  • 某些服务需要专用子网=>只有一种服务类型可以部署到专用子网中

您的示例:

Databricks

Databricks支持VNet注入在将数据bricks部署到VNet后,它可以安全地连接正在使用的Azure资源:

  • 服务端点
  • 私人链接
  • 或部署到VNet中(相同或其他子网,如果存在对等,甚至其他VNet上的子网)

Azure SQL

Azure SQL同时支持服务端点和私有链接。您的示例只是添加了来自部署到azurerm_subnet.example中的服务的访问权限"将sql数据库放置到子网";并没有真正发生。

存储帐户

存储帐户同时支持服务端点和专用链接。virtual_network_subnet_ids只是一个包含允许的子网ID的列表。

数据工厂

为了实现VNet与数据工厂的集成,您有两个解决方案

Azure托管的集成运行时

  • 启用托管虚拟网络功能

在Azure VM上运行自托管集成运行时(SHIR)

  • 如果你在Azure上运行SHIR,那么你可以使用服务端点和私有链接来确保与其他Azure服务的连接

摘要

首先:确定您的资源类型:如何将它们与Azure VNets集成

资源防火墙/网络规则是特定于资源的,就像您在Azure SQL和Azure Storage中注意到的那样。如果您需要更统一的访问控制和配置,我建议您使用私有enpoint:

  • 专用端点是分离的资源类型=>配置独立于目标资源
  • 如果需要额外的访问控制,可以使用网络安全组来限制进入专用端点的流量

二头肌模板示例(带有私有端点+VM的Azure SQL)从高层概述了私有链接模板的工作原理。看过微软的Bicep示例后,应该更容易找到正确的Terraform资源类型。

VNet的部署/注入仍然使用特定于资源的配置/模板属性,并且必须根据具体情况进行。

相关内容

  • 没有找到相关文章

最新更新