VPN для защиты экземпляра контейнера Azure

#azure #azure-container-instances #vnet

Вопрос:

У меня есть экземпляр контейнера azure… Я добавил его в виртуальную сеть… с частным IP-адресом..10.0.0.4

Я хочу, чтобы только несколько служб приложений azure могли вызывать API rest, который предоставляет этот экземпляр контейнера azure, как я могу предоставить этим службам приложений azure возможность вызывать контейнер?

Твое здоровье, Эндрю

Ответ №1:

Есть несколько способов, которыми вы могли бы этого достичь.

Одним из них может быть настройка единого общедоступного IP-адреса для исходящего и входящего трафика в группу контейнеров Azure. С помощью этого метода вы можете развернуть экземпляр контейнера Azure в виртуальной сети, как вы уже сделали.

Затем,

Развертывание брандмауэра Azure в сети

Во-первых, используйте созданную подсеть виртуальной сети az network, чтобы добавить подсеть с именем AzureFirewallSubnet для брандмауэра. AzureFirewallSubnet-обязательное имя этой подсети.

 az network vnet subnet create 
  --name AzureFirewallSubnet 
  --resource-group $RESOURCE_GROUP_NAME 
  --vnet-name $aci-vnet   
  --address-prefix 10.0.1.0/26
 

Используйте следующие команды Azure CLI для создания брандмауэра в подсети.

Если он еще не установлен, добавьте расширение брандмауэра в интерфейс командной строки Azure с помощью команды az extension add:

 az extension add --name azure-firewall
 

Создайте ресурсы брандмауэра:

 az network firewall create 
  --name myFirewall 
  --resource-group $RESOURCE_GROUP_NAME 
  --location eastus

az network public-ip create 
  --name fw-pip 
  --resource-group $RESOURCE_GROUP_NAME 
  --location eastus 
  --allocation-method static 
  --sku standard
    
az network firewall ip-config create 
  --firewall-name myFirewall 
  --name FW-config 
  --public-ip-address fw-pip 
  --resource-group $RESOURCE_GROUP_NAME 
  --vnet-name $aci-vnet
 

Обновите конфигурацию брандмауэра с помощью команды az network firewall update:

 az network firewall update 
  --name myFirewall 
  --resource-group $RESOURCE_GROUP_NAME
 

Получите частный IP-адрес брандмауэра, используя команду списка ip-конфигурации сетевого брандмауэра az. Этот частный IP-адрес используется в более поздней команде.

 FW_PRIVATE_IP="$(az network firewall ip-config list 
  --resource-group $RESOURCE_GROUP_NAME 
  --firewall-name myFirewall 
  --query "[].privateIpAddress" --output tsv)"
 

Получите общедоступный IP-адрес брандмауэра с помощью команды az network public-ip show. Этот общедоступный IP-адрес используется в более поздней команде.

 FW_PUBLIC_IP="$(az network public-ip show 
  --name fw-pip 
  --resource-group $RESOURCE_GROUP_NAME 
  --query ipAddress --output tsv)"
 

Определите пользовательский маршрут в подсети ACI

Определите используемый маршрут в подсети ACI для перенаправления трафика на брандмауэр Azure. Дополнительные сведения см. в разделе Маршрутизация сетевого трафика.

Создать Таблицу Маршрутов

Сначала выполните следующую команду az network route-table create для создания таблицы маршрутов. Создайте таблицу маршрутов в том же регионе, что и виртуальная сеть.

 az network route-table create 
  --name Firewall-rt-table 
  --resource-group $RESOURCE_GROUP_NAME 
  --location eastus 
  --disable-bgp-route-propagation true
 
Создать маршрут

Запустите команду az network-route-table route create, чтобы создать маршрут в таблице маршрутов. Чтобы направить трафик на брандмауэр, установите тип следующего перехода VirtualAppliance и передайте частный IP-адрес брандмауэра в качестве адреса следующего перехода.

 az network route-table route create 
  --resource-group $RESOURCE_GROUP_NAME 
  --name DG-Route 
  --route-table-name Firewall-rt-table 
  --address-prefix 0.0.0.0/0 
  --next-hop-type VirtualAppliance 
  --next-hop-ip-address $FW_PRIVATE_IP
 
Связать таблицу маршрутов с подсетью ACI

Выполните команду обновления подсети виртуальной сети az network, чтобы связать таблицу маршрутов с подсетью, делегированной экземплярам контейнеров Azure.

 az network vnet subnet update 
  --name $aci-subnet 
  --resource-group $RESOURCE_GROUP_NAME 
  --vnet-name $aci-vnet 
  --address-prefixes 10.0.0.0/24 
  --route-table Firewall-rt-table
 

Окончательно,

Настройка правил на брандмауэре

По умолчанию брандмауэр Azure запрещает (блокирует) входящий и исходящий трафик.

Настройте правило NAT на брандмауэре для подсети ACI

Создайте правило NAT на брандмауэре для преобразования и фильтрации входящего интернет-трафика в контейнер приложения, который вы ранее запустили в сети. Дополнительные сведения см. в разделе Фильтрация входящего интернет-трафика с помощью DNAT брандмауэра Azure

Создайте правило и коллекцию NAT с помощью команды создания правила nat сетевого брандмауэра az:

 az network firewall nat-rule create 
  --firewall-name myFirewall 
  --collection-name myNATCollection 
  --action dnat 
  --name myRule 
  --protocols TCP 
  --source-addresses '$SOURCE_ADDRESSES' 
  --destination-addresses $FW_PUBLIC_IP 
  --destination-ports 80 
  --resource-group $RESOURCE_GROUP_NAME 
  --translated-address $ACI_PRIVATE_IP 
  --translated-port 80 
  --priority 200
 

Добавьте правила NAT по мере необходимости для фильтрации трафика на другие IP-адреса в подсети. Например, другие группы контейнеров в подсети могут предоставлять IP-адреса для входящего трафика, или другие внутренние IP-адреса могут быть назначены группе контейнеров после перезапуска.

Примечание.Замените $SOURCE_ADDRESSES списком исходящих IP-адресов служб приложений, разделенных пробелами.

Создайте правило исходящего приложения на брандмауэре

Выполните следующую команду az network firewall application-rule creat e, чтобы создать исходящее правило на брандмауэре. Это примерное правило разрешает доступ из подсети, делегированной экземплярам контейнеров Azure, к полному доменному checkip.dyndns.org имени . Доступ по протоколу HTTP к сайту используется на более позднем этапе для подтверждения IP-адреса выхода из экземпляров контейнеров Azure.

 az network firewall application-rule create 
  --collection-name myAppCollection 
  --firewall-name myFirewall 
  --name Allow-CheckIP 
  --protocols Http=80 Https=443 
  --resource-group $RESOURCE_GROUP_NAME 
  --target-fqdns checkip.dyndns.org 
  --source-addresses 10.0.0.0/24 
  --priority 200 
  --action Allow
 

Альтернативным методом может быть интеграция службы приложений с виртуальной сетью Azure. С помощью виртуальной сети Azure (VNET) вы можете разместить многие ресурсы Azure в сети, не подключенной к Интернету. Функция интеграции с виртуальной сетью позволяет вашим приложениям получать доступ к ресурсам в виртуальной сети или через нее. Интеграция с виртуальной сетью не позволяет получать доступ к вашим приложениям частным образом.

Пожалуйста, найдите наглядный пример здесь. Затем вы можете подключить виртуальную сеть Службы приложений к виртуальной сети ACI через пиринг Vnet-toVnet или VPN-шлюз Vnet-to-Vnet

Однако с помощью этого метода вам придется интегрировать все службы приложений Azure, которые будут подключаться к вашему ACI, в виртуальную сеть.