首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何向Terraform中的子网添加资源?

如何向Terraform中的子网添加资源?
EN

Stack Overflow用户
提问于 2022-10-03 07:50:25
回答 1查看 190关注 0票数 0

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

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

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

以下是一些例子:

数据库可以通过向子网添加delegation连接,如下所示:

代码语言:javascript
运行
复制
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数据库放置到子网中,如下所示:

代码语言:javascript
运行
复制
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,如下所示:

代码语言:javascript
运行
复制
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]
  }

}

最后,azurerm_data_factory没有任何参数可以将其连接到子网。

所以,简单来说,我的问题是:

是否有任何简单、直接的解决方案,可以将我的资源设置为azurerm_subnet

EN

回答 1

Stack Overflow用户

发布于 2022-10-07 10:32:40

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性质

代码语言:javascript
运行
复制
    - turn on (VNet Service endpoint policy)[https://learn.microsoft.com/en-us/azure/virtual-network/virtual-network-service-endpoint-policies-overview] for extra safety 
        - serviceEndpointPolicies property

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

私有端点

  • 私有链接与服务端点相似,但更新,可以配置得更多。
  • 进入资源的通信量
  • (支持的services)https://learn.microsoft.com/en-us/azure/private-link/availability列表)
  • 需要以下额外资源:
    • 专用端点
      • 主要是元数据

代码语言:javascript
运行
复制
- network interface 
    - traffic to this interface is routed to target resource
代码语言:javascript
运行
复制
- optional private DNS zones and related resources 
    - recommended, otherwise usage of IP addresses and/or hosts-file changes are needed
代码语言:javascript
运行
复制
- optional NSG rules for extra security

VNet注入/部署到VNet中

  • 将Azure服务部署/注入到VNet中
  • 传出和传入的流量通过VNet
  • 有些服务需要专用子网=>,只能将一种服务类型部署到专用子网中。

你的例子:

数据库

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

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

Azure SQL

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

存储帐户

存储帐户既支持服务端点,也支持私有链接。virtual_network_subnet_ids只是一个包含允许子网ids的列表。

数据工厂

要启用与数据工厂的VNet集成,您有两个解决方案

Azure-托管集成运行库

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

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

摘要

首先:标识您的资源类型:它们如何与Azure VNets集成

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

  • 私有端点是分开的资源类型,=>配置与目标资源无关。
  • 如果需要额外的访问控制,则可以使用网络安全组将流量限制到专用端点。

二头针模板示例(Azure与专用端点+ VM)提供了一个很好的高级概述了私有链接模板的工作原理。在查看Microsoft的Bicep示例之后,应该更容易找到正确的Terraform资源类型。

对VNet的部署/注入仍然使用特定于资源的配置/模板属性,并且必须逐案执行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73932489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档