【问题标题】:azure web app + sql database private endpointazure web app + sql 数据库私有端点
【发布时间】:2022-08-19 03:08:25
【问题描述】:

我试图更好地了解 Web 应用程序和 sql 如何在 vnet 和不同的子网中一起运行,但是 Microsoft 文档让我很困惑。

为了开始这个工作,我得到了这个 terraform 脚本并更改了其中的一些内容。

terraform {
  required_providers {
    azurerm = {
      source = \"hashicorp/azurerm\"
      version = \"~>2.0\"
    }
  }
}
provider \"azurerm\" {
  features {}
}

resource \"azurerm_resource_group\" \"rg-hri-private-link\" {
  name     = \"appservice-rg\"
  location = \"westeurope\"
}

resource \"azurerm_virtual_network\" \"vnet\" {
  name                = \"vnet\"
  location            = azurerm_resource_group.rg-hri-private-link.location
  resource_group_name = azurerm_resource_group.rg-hri-private-link.name
  address_space       = [\"10.1.0.0/16\"]
}

resource \"azurerm_subnet\" \"integrationsubnet\" {
  name                 = \"integrationsubnet\"
  resource_group_name  = azurerm_resource_group.rg-hri-private-link.name
  virtual_network_name = azurerm_virtual_network.vnet.name
  address_prefixes     = [\"10.1.1.0/24\"]
  delegation {
    name = \"delegation\"
    service_delegation {
      name = \"Microsoft.Web/serverFarms\"
    }
  }
}

resource \"azurerm_subnet\" \"endpointsubnet\" {
  name                 = \"endpointsubnet\"
  resource_group_name  = azurerm_resource_group.rg-hri-private-link.name
  virtual_network_name = azurerm_virtual_network.vnet.name
  address_prefixes     = [\"10.1.2.0/24\"]
  enforce_private_link_endpoint_network_policies = true
  service_endpoints = [
  \"Microsoft.Sql\"
  ]
  delegation {
    name = \"delegation\"
    service_delegation {
      actions = [
        \"Microsoft.Network/virtualNetworks/subnets/join/action\",
        \"Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action\",
        \"Microsoft.Network/virtualNetworks/subnets/unprepareNetworkPolicies/action\",
      ]
      name = \"Microsoft.Sql/managedInstances\"
    }
  }
}

resource \"azurerm_app_service_plan\" \"appserviceplan\" {
  name                = \"appserviceplan\"
  location            = azurerm_resource_group.rg-hri-private-link.location
  resource_group_name = azurerm_resource_group.rg-hri-private-link.name

  sku {
    tier = \"Premiumv2\"
    size = \"P1v2\"
  }
}

resource \"azurerm_app_service\" \"frontwebapp\" {
  name                = \"frontweba\"
  location            = azurerm_resource_group.rg-hri-private-link.location
  resource_group_name = azurerm_resource_group.rg-hri-private-link.name
  app_service_plan_id = azurerm_app_service_plan.appserviceplan.id

  app_settings = {
    \"WEBSITE_DNS_SERVER\": \"168.63.129.16\",
    \"WEBSITE_VNET_ROUTE_ALL\": \"1\"
  }
}

resource \"azurerm_app_service_virtual_network_swift_connection\" \"vnetintegrationconnection\" {
  app_service_id  = azurerm_app_service.frontwebapp.id
  subnet_id       = azurerm_subnet.integrationsubnet.id
}

resource \"azurerm_sql_server\" \"srv-backend\" {
  administrator_login          = \"username\"
  administrator_login_password = \"password!\"
  location                     = azurerm_resource_group.rg-hri-private-link.location
  name                         = \"serverbackend\"
  resource_group_name          = azurerm_resource_group.rg-hri-private-link.name
  version                      = \"12.0\"
}

resource \"azurerm_sql_virtual_network_rule\" \"privatesql\" {
  name                = \"azuresqldatabaseendpoint\"
  resource_group_name = azurerm_resource_group.rg-hri-private-link.name
  server_name         = azurerm_sql_server.srv-backend.name
  subnet_id           = azurerm_subnet.endpointsubnet.id
  ignore_missing_vnet_service_endpoint = true
}

resource \"azurerm_sql_database\" \"sqlprivatedatabase\" {
  location            = azurerm_resource_group.rg-hri-private-link.location
  name                = \"sqlprivatedatabase\"
  resource_group_name = azurerm_resource_group.rg-hri-private-link.name
  server_name         = azurerm_sql_server.srv-backend.name
}

resource \"azurerm_private_dns_zone\" \"dnsprivatezone\" {
  name                = \"privatelink.azurewebsites.net\"
  resource_group_name = azurerm_resource_group.rg-hri-private-link.name
}

resource \"azurerm_private_dns_zone_virtual_network_link\" \"dnszonelink\" {
  name = \"dnszonelink\"
  resource_group_name = azurerm_resource_group.rg-hri-private-link.name
  private_dns_zone_name = azurerm_private_dns_zone.dnsprivatezone.name
  virtual_network_id = azurerm_virtual_network.vnet.id
}

resource \"azurerm_private_endpoint\" \"privateendpoint\" {
  name                = \"backwebappprivateendpoint\"
  location            = azurerm_resource_group.rg-hri-private-link.location
  resource_group_name = azurerm_resource_group.rg-hri-private-link.name
  subnet_id           = azurerm_subnet.endpointsubnet.id

  private_dns_zone_group {
    name = \"privatednszonegroup\"
    private_dns_zone_ids = [azurerm_private_dns_zone.dnsprivatezone.id]
  }

  private_service_connection {
    name = \"privateendpointconnection\"
    private_connection_resource_id = azurerm_sql_server.srv-backend.id
    subresource_names = [\"sqlServer\"]
    is_manual_connection = false
  }
}

我创建以下资源:

  • 网络
  • 集成子网
  • 私有端点子网
  • 使用专用 dns 区域的 Web 应用配置
  • 将前端应用程序与集成子网连接
  • 创建后端 sql server 和数据库
  • 创建专用 DNS 区域
  • 将区域链接到 vnet
  • 创建到端点子网的专用端点后端

脚本运行得很好。我部署了一个 web 应用程序模板来测试 web 应用程序和后端 sql 数据库之间的连接,它工作得很好。

但是在这里我开始感到困惑。我的 Web 应用程序有它的默认 url .azurewebsites.net 并且我的 sql 数据库仍然可以从它的主机名访问。似乎dns区域没有做任何特别的事情。

我该如何测试这个。

我的想法是有一个zero trust 架构,只允许前端应用程序在入站流量中访问 sql 数据库,并在 sql 数据库的出站流量中只允许它访问前端 Web 应用程序。

我怎样才能做到这一点?

  • 在同一个 VNET 中,通常不会过滤流量。然而,你想限制它。你看过nsg吗?在企业网络中,防火墙保护 VNET 中的设备免受外部流量的影响。在没有防火墙的情况下,可以使用 NSG 完成另一层保护。 NSG 可以在子网级别应用。

标签: terraform terraform-provider-azure azure-private-link azure-private-dns azure-private-dns-zone


【解决方案1】:

另一种选择可能是使用我工作的项目 OpenZiti。它是一个基于零信任原则的开源网络覆盖 - 例如,仅出站连接、私有 DNS、连接前认证。我们将我们的 Java SDK 放入 JDBC 中,以便它可以用于促进 Web 应用程序到 MySQL - https://github.com/openziti-test-kitchen/zdbc

【讨论】:

    猜你喜欢
    • 2017-03-05
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2018-04-02
    相关资源
    最近更新 更多