التحكم في حركة الخروج لمثيل Azure Spring Apps

تنطبق هذه المقالة على: ✔️ Java ✔️ C#‎

تنطبق هذه المقالة على: ✔️ Basic/Standard ✔️ Enterprise

توضح هذه المقالة كيفية تأمين نسبة استخدام الشبكة الصادرة من التطبيقات المستضافة في Azure Spring Apps. توفر المقالة مثالا على مسار معرف من قبل المستخدم. المسار المعرف من قبل المستخدم هو ميزة متقدمة تتيح لك التحكم الكامل في حركة الخروج. يمكنك استخدام مسار معرف من قبل المستخدم في سيناريوهات مثل عدم السماح بعنوان IP عام تم إنشاؤه تلقائيا في Azure Spring Apps.

المتطلبات الأساسية

إنشاء شبكة ظاهرية باستخدام مسار معرف من قبل المستخدم

يوضح الرسم التوضيحي التالي مثالا على شبكة ظاهرية ل Azure Spring Apps تستخدم مسارا معرفا من قبل المستخدم (UDR).

رسم تخطيطي يوضح بنية شبكة Azure Spring Apps الظاهرية التي تستخدم مسارا معرفا من قبل المستخدم (UDR).

يوضح هذا الرسم التخطيطي الميزات التالية للبنية:

  • يجب أن تتدفق حركة مرور الدخول العام من خلال عوامل تصفية جدار الحماية.
  • يتم عزل كل مثيل Azure Spring Apps داخل شبكة فرعية مخصصة.
  • يمتلك العملاء جدار الحماية ويديرونه.
  • تضمن هذه البنية أن جدار الحماية يتيح بيئة صحية لجميع الوظائف التي تحتاجها.
  • لا تقوم Azure Spring Apps تلقائيا بإنشاء موارد IP عامة.

تعريف متغيرات البيئة

يوضح المثال التالي كيفية تعريف مجموعة من متغيرات البيئة لاستخدامها في إنشاء الموارد:

export PREFIX="asa-egress"
export RG="${PREFIX}-rg"
export LOC="eastus"
export ASANAME="${PREFIX}"
export VNET_NAME="${PREFIX}-vnet"
export ASA_APP_SUBNET_NAME="asa-app-subnet"
export ASA_SERVICE_RUNTIME_SUBNET_NAME="asa-service-runtime-subnet"
# Do not change FWSUBNET_NAME. This is currently a requirement for Azure Firewall.
export FWSUBNET_NAME="AzureFirewallSubnet"
export FWNAME="${PREFIX}-fw"
export FWPUBLICIP_NAME="${PREFIX}-fwpublicip"
export FWIPCONFIG_NAME="${PREFIX}-fwconfig"
export APP_ROUTE_TABLE_NAME="${PREFIX}-app-rt"
export SERVICE_RUNTIME_ROUTE_TABLE_NAME="${PREFIX}-service-runtime-rt"
export FWROUTE_NAME="${PREFIX}-fwrn"
export ASA_NAME="${PREFIX}-instance"

إنشاء شبكة اتصال ظاهرية مع شبكات فرعية متعددة

يوضح لك هذا القسم كيفية توفير شبكة ظاهرية بثلاث شبكات فرعية منفصلة: واحدة لتطبيقات المستخدم، وواحدة لوقت تشغيل الخدمة، وواحدة لجدار الحماية.

قم أولا بإنشاء مجموعة موارد، كما هو موضح في المثال التالي:

# Create a resource group.

az group create --name $RG --location $LOC

ثم قم بإنشاء شبكة ظاهرية بثلاث شبكات فرعية لاستضافة Azure Spring Apps ومثيلات جدار حماية Azure، كما هو موضح في المثال التالي:

# Dedicated virtual network with an Azure Spring Apps app subnet.

az network vnet create \
    --resource-group $RG \
    --name $VNET_NAME \
    --location $LOC \
    --address-prefixes 10.42.0.0/16 \
    --subnet-name $ASA_APP_SUBNET_NAME \
    --subnet-prefix 10.42.1.0/24

# Dedicated subnet for the Azure Spring Apps service runtime subnet.

az network vnet subnet create \
    --resource-group $RG \
    --vnet-name $VNET_NAME \
    --name $ASA_SERVICE_RUNTIME_SUBNET_NAME\
    --address-prefix 10.42.2.0/24

# Dedicated subnet for Azure Firewall. (Firewall name can't be changed.)

az network vnet subnet create \
    --resource-group $RG \
    --vnet-name $VNET_NAME \
    --name $FWSUBNET_NAME \
    --address-prefix 10.42.3.0/24

إعداد مثيل جدار حماية Azure باستخدام مسار معرف من قبل المستخدم

استخدم الأمر التالي لإنشاء مثيل جدار حماية Azure وإعداده باستخدام مسار معرف من قبل المستخدم، وتكوين قواعد Azure Firewall الصادرة. يتيح لك جدار الحماية تكوين قواعد حركة الخروج الدقيقة من Azure Spring Apps.

هام

إذا قام نظام المجموعة أو التطبيق بإنشاء عدد كبير من الاتصالات الصادرة الموجهة إلى نفس الوجهة أو إلى مجموعة فرعية صغيرة من الوجهات، فقد تحتاج إلى المزيد من عناوين IP الأمامية لجدار الحماية لتجنب الوصول إلى الحد الأقصى للمنافذ لكل عنوان IP للواجهة الأمامية. لمزيد من المعلومات حول كيفية إنشاء مثيل جدار حماية Azure باستخدام عناوين IP متعددة، راجع التشغيل السريع: إنشاء مثيل جدار حماية Azure بعناوين IP عامة متعددة - قالب ARM. إنشاء مورد IP عام SKU قياسي للاستخدام كعنوان الواجهة الأمامية لجدار حماية Azure.

az network public-ip create \
    --resource-group $RG \
    --name $FWPUBLICIP_NAME -l $LOC \
    --sku "Standard"

يوضح المثال التالي كيفية تثبيت ملحق CLI لمعاينة جدار حماية Azure ونشر جدار حماية Azure:

# Install the Azure Firewall preview CLI extension.

az extension add --name azure-firewall

# Deploy Azure Firewall.

az network firewall create \
    --resource-group $RG \
    --name $FWNAME -l $LOC \
    --enable-dns-proxy true

يوضح المثال التالي كيفية تعيين عنوان IP الذي قمت بإنشائه إلى الواجهة الأمامية لجدار الحماية.

إشعار

قد يستغرق إعداد عنوان IP العام لمثيل Azure Firewall بضع دقائق. لاستخدام اسم مجال مؤهل بالكامل (FQDN) على قواعد الشبكة، قم بتمكين وكيل DNS. بعد تمكين الوكيل، يستمع جدار الحماية على المنفذ 53 ويعيد توجيه طلبات DNS إلى خادم DNS المحدد. يمكن لجدار الحماية بعد ذلك ترجمة FQDN تلقائيا.

# Configure the firewall IP address.

az network firewall ip-config create \
    --resource-group $RG \
    --firewall-name $FWNAME \
    --name $FWIPCONFIG_NAME \
    --public-ip-address $FWPUBLICIP_NAME \
    --vnet-name $VNET_NAME

عند الانتهاء من العملية، احفظ عنوان IP الأمامي لجدار الحماية للتكوين لاحقا، كما هو موضح في المثال التالي:

# Capture the firewall IP address for later use.

export FWPUBLIC_IP=$(az network public-ip show \
    --resource-group $RG \
    --name $FWPUBLICIP_NAME \
    --query "ipAddress" \
    --output tsv)
export FWPRIVATE_IP=$(az network firewall show \
    --resource-group $RG \
    --name $FWNAME \
    --query "ipConfigurations[0].privateIPAddress" \
    --output tsv | tr -d '[:space:]')

إنشاء مسار معرف من قبل المستخدم بوثبة إلى Azure Firewall

يوجه Azure حركة المرور تلقائيًا بين الشبكات الفرعية Azure والشبكات الظاهرية والشبكات المحلية. إذا كنت تريد تغيير التوجيه الافتراضي في Azure، فقم بإنشاء جدول توجيه.

يوضح المثال التالي كيفية إنشاء جدول توجيه ليتم إقرانه بشبكة فرعية محددة. يحدد جدول التوجيه الوثبة التالية، كما هو الحال في مثيل Azure Firewall الذي قمت بإنشائه. يمكن أن يكون لكل شبكة فرعية جدول توجيه واحد مقترن بها، أو قد لا يكون لها جدول توجيه مقترن.

# Create a user-defined route and add a route for Azure Firewall.

az network route-table create \
    --resource-group $RG -l $LOC \
    --name $APP_ROUTE_TABLE_NAME
az network route-table route create \
    --resource-group $RG \
    --name $FWROUTE_NAME \
    --route-table-name $APP_ROUTE_TABLE_NAME \
    --address-prefix 0.0.0.0/0 \
    --next-hop-type VirtualAppliance \
    --next-hop-ip-address $FWPRIVATE_IP
az network route-table create \
    --resource-group $RG -l $LOC \
    --name $SERVICE_RUNTIME_ROUTE_TABLE_NAME
az network route-table route create \
    --resource-group $RG \
    --name $FWROUTE_NAME \
    --route-table-name $SERVICE_RUNTIME_ROUTE_TABLE_NAME \
    --address-prefix 0.0.0.0/0 \
    --next-hop-type VirtualAppliance \
    --next-hop-ip-address $FWPRIVATE_IP

إضافة قواعد جدار الحماية

يوضح المثال التالي كيفية إضافة قواعد إلى جدار الحماية الخاص بك. لمزيد من المعلومات، راجع مسؤوليات العملاء لتشغيل Azure Spring Apps في شبكة ظاهرية.

# Add firewall network rules.

az network firewall network-rule create \
    --resource-group $RG \
    --firewall-name $FWNAME \
    --collection-name 'asafwnr' \
    --name 'springcloudtcp' \
    --protocols 'TCP' \
    --source-addresses '*' \
    --destination-addresses "AzureCloud" \
    --destination-ports 443 445 \
    --action allow \
    --priority 100

# Add firewall application rules.

az network firewall application-rule create \
    --resource-group $RG \
    --firewall-name $FWNAME \
    --collection-name 'aksfwar'\
    --name 'fqdn' \
    --source-addresses '*' \
    --protocols 'https=443' \
    --fqdn-tags "AzureKubernetesService" \
    --action allow \
    --priority 100

إقران جداول المسار بالشبكات الفرعية

لربط نظام المجموعة بجدار الحماية، تأكد من أن الشبكة الفرعية المخصصة لنظام المجموعة تشير إلى جدول التوجيه الذي قمت بإنشائه. يجب أن تكون الشبكات الفرعية لوقت تشغيل التطبيق والخدمة مقترنة بجداول التوجيه المقابلة. يوضح المثال التالي كيفية إقران جدول توجيه بشبكة فرعية:

# Associate the route table with a next hop to the firewall for the Azure Spring Apps subnet.

az network vnet subnet update \
    --resource-group $RG \
    --vnet-name $VNET_NAME \
    --name $ASA_APP_SUBNET_NAME \
    --route-table $APP_ROUTE_TABLE_NAME

az network vnet subnet update
    --resource-group $RG \
    --vnet-name $VNET_NAME \
    --name $ASA_SERVICE_RUNTIME_SUBNET_NAME \
    --route-table $SERVICE_RUNTIME_ROUTE_TABLE_NAME

إضافة دور لموفر موارد Azure Spring Apps

يوضح المثال التالي كيفية إضافة دور لموفر موارد Azure Spring Apps. يتم تعيين الدور لكافة المستخدمين الذين تم تعريفهم بواسطة السلسلة e8de9221-a19c-4c81-b814-fd37c6caf9d2:

export VIRTUAL_NETWORK_RESOURCE_ID=$(az network vnet show \
    --name $VNET_NAME \
    --resource-group $RG \
    --query "id" \
    --output tsv)

az role assignment create \
    --role "Owner" \
    --scope ${VIRTUAL_NETWORK_RESOURCE_ID} \
    --assignee e8de9221-a19c-4c81-b814-fd37c6caf9d2

export APP_ROUTE_TABLE_RESOURCE_ID=$(az network route-table show \
    --name $APP_ROUTE_TABLE_NAME \
    --resource-group $RG \
    --query "id" \
    --output tsv)

az role assignment create \
    --role "Owner" \
    --scope ${APP_ROUTE_TABLE_RESOURCE_ID} \
    --assignee e8de9221-a19c-4c81-b814-fd37c6caf9d2

export SERVICE_RUNTIME_ROUTE_TABLE_RESOURCE_ID=$(az network route-table show \
    --name $SERVICE_RUNTIME_ROUTE_TABLE_NAME \
    --resource-group $RG \
    --query "id" \
    --output tsv)

az role assignment create \
    --role "Owner" \
    --scope ${SERVICE_RUNTIME_ROUTE_TABLE_RESOURCE_ID} \
    --assignee e8de9221-a19c-4c81-b814-fd37c6caf9d2

إنشاء مثيل Azure Spring Apps مع التوجيه المعرف من قبل المستخدم

يوضح المثال التالي كيفية إنشاء مثيل Azure Spring Apps مع التوجيه المعرف من قبل المستخدم:

az spring create \
    --name $ASA_NAME \
    --resource-group $RG \
    --vnet $VNET_NAME \
    --app-subnet $ASA_APP_SUBNET_NAME \
    --service-runtime-subnet $ASA_SERVICE_RUNTIME_SUBNET_NAME \
    --outbound-type userDefinedRouting

يمكنك الآن الوصول إلى عنوان IP العام لجدار الحماية من الإنترنت. يوجه جدار الحماية نسبة استخدام الشبكة إلى الشبكات الفرعية ل Azure Spring Apps وفقا لقواعد التوجيه الخاصة بك.

الخطوات التالية