我需要通过防火墙保护我的所有资源(位于不同子网中),因此我需要知道如何为每个资源分配子网。
我想知道将任何资源连接到子网的最简单方法是什么
我见过不同的资源可以通过不同的解决方案连接到一个子网。这让我很困惑,因为显然每个资源都有自己的解决方案来连接到子网。
以下是一些例子:
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的部署/注入仍然使用特定于资源的配置/模板属性,并且必须根据具体情况进行。