Wdrażanie aplikacji dla przedsiębiorstw przy użyciu App Service EnvironmentEnterprise app deployment using App Service Environment

Azure App Service to usługa PaaS używana do hostowania różnych aplikacji na platformie Azure: aplikacje sieci Web, aplikacje interfejsu API, funkcje i aplikacje mobilne.Azure App Service is a PaaS service used to host a variety of apps on Azure: web apps, API apps, functions, and mobile apps. App Service Environment lub ASE pozwala przedsiębiorstwom wdrażać aplikacje App Service w podsieci we własnym Virtual Network platformy Azure, zapewniając izolowane, wysoce skalowalne i dedykowane środowisko dla obciążeń w chmurze.App Service Environment or ASE allows enterprises to deploy their App Service apps in a subnet in their own Azure Virtual Network, providing an isolated, highly scalable, and dedicated environment for their cloud workloads.

Ta architektura referencyjna przedstawia typowe obciążenie przedsiębiorstwa przy użyciu środowiska ASE oraz najlepsze rozwiązania w zakresie zwiększania bezpieczeństwa tego obciążenia.This reference architecture demonstrates a common enterprise workload using ASE, and best practices to tighten security of this workload.

Logo usługi GitHub — implementacja odniesienia dla tej architektury jest dostępna w witrynie GitHub.GitHub logo A reference implementation for this architecture is available on GitHub.

Architektura referencyjna dla standardowego wdrożenia ASE

ArchitekturaArchitecture

Głównym składnikiem tej architektury jest środowisko App Service.The main component of this architecture is the App Service environment. Środowisko ASE można wdrożyć jako zewnętrzne środowisko ASE z publicznym adresem IP lub wewnętrznym środowiskiem ASE przy użyciu wewnętrznego adresu ip należącego do Load Balancer wewnętrznej (ILB) .An ASE can be deployed either as external ASE with a public IP address, or as internal ASE , with an internal IP address belonging to the Internal Load Balancer (ILB) . Ta architektura referencyjna wdraża aplikację internetową przedsiębiorstwa w wewnętrznym środowisku ASE, zwaną również ILB ASE.This reference architecture deploys an enterprise web application in an internal ASE, also called an ILB ASE. Użyj środowiska ILB ASE, gdy scenariusz wymaga:Use an ILB ASE when your scenario requires you to:

  • Bezpiecznie udostępniaj aplikacje intranetowe w chmurze, do których uzyskujesz dostęp za pośrednictwem typu lokacja-lokacja lub ExpressRoute.Host intranet applications securely in the cloud, which you access through a site-to-site or ExpressRoute.
  • Ochrona aplikacji przy użyciu urządzenia WAF.Protect apps with a WAF device.
  • Hostowanie w chmurze aplikacji, które nie są wymienione na publicznych serwerach DNS.Host apps in the cloud that aren't listed in public DNS servers.
  • Tworzenie odizolowanych od Internetu aplikacji zaplecza, z którymi można bezpiecznie integrować aplikacje frontonu.Create internet-isolated back-end apps, which your front-end apps can securely integrate with.

Środowisko ASE musi być zawsze wdrożone we własnej podsieci w sieci wirtualnej przedsiębiorstwa, co pozwala na ścisłą kontrolę nad ruchem przychodzącym i wychodzącym.An ASE must be always deployed in its own subnet within the enterprise' virtual network, allowing a tight control of the incoming and outgoing traffic. W tej podsieci App Service aplikacje są wdrażane w co najmniej jednym planie App Service, który jest kolekcją zasobów fizycznych wymaganych do uruchomienia aplikacji.Within this subnet, App Service applications are deployed in one or more App Service plans, which is a collection of physical resources required to run the app. W zależności od stopnia złożoności i wymagania dotyczącego zasobów plan App Service może być współużytkowany przez wiele aplikacji.Depending on the complexity and resource requirement, an App Service plan can be shared between multiple apps. Ta implementacja referencyjna wdraża aplikację sieci Web o nazwie aplikacja do głosowania , która współdziała z prywatnym interfejsem API sieci Web i funkcją.This reference implementation deploys a web app named Voting App , that interacts with a private web API and a function. Wdraża również fikcyjną aplikację sieci Web o nazwie test App , aby zademonstrować wdrożenia wieloaplikacji.It also deploys a dummy web app named Test App to demonstrate multi-app deployments. Każda aplikacja App Service jest hostowana we własnym planie App Service, co pozwala na ich skalowanie niezależnie, w razie potrzeby.Each App Service app is hosted in its own App Service plan, allowing each to be scaled independently if necessary. Wszystkie zasoby wymagane przez te aplikacje hostowane, takie jak Storage i COMPUTE, oraz wymagania dotyczące skalowania są w pełni zarządzane przez infrastrukturę App Service Environment.All resources required by these hosted apps, such as storage and compute, as well as scaling needs are fully managed by the App Service Environment infrastructure.

Prosta aplikacja do głosowania w tej implementacji umożliwia użytkownikom wyświetlanie istniejących lub tworzonych nowych wpisów, a także głosowanie istniejących wpisów.The simple voting app in this implementation, allows users to view existing or create new entries, as well as vote on the existing entries. Internetowy interfejs API służy do tworzenia i pobierania wpisów i głosów.The web API is used for creation and retrieval of entries and votes. Dane są przechowywane w bazie danych SQL Server.The data itself is stored in a SQL Server database. Aby zademonstrować asynchroniczne aktualizacje danych, aplikacja internetowa kolejkuje nowo dodane głosy w wystąpieniu Service Bus.To demonstrate asynchronous data updates, the web app queues newly added votes in a Service Bus instance. Funkcja pobiera głosy w kolejce i aktualizuje bazę danych SQL.The function picks up queued votes and updates the SQL database. CosmosDB jest używany do przechowywania makiety usługi AD, którą aplikacja sieci Web pobiera do wyświetlania w przeglądarce.CosmosDB is used to store a mock-up ad, that the web app retrieves to display on the browser. Aplikacja używa usługi Azure cache for Redis do zarządzania pamięcią podręczną.The application uses Azure Cache for Redis for cache management. Używana jest pamięć podręczna systemu Azure w warstwie Premium dla Redis, która umożliwia konfigurację w tej samej sieci wirtualnej co środowisko ASE w własnej podsieci.A Premium tier Azure Cache for Redis is used, which allows configuration to the same virtual network as the ASE, in its own subnet. Zapewnia to zwiększone zabezpieczenia i izolację pamięci podręcznej.This provides enhanced security and isolation to the cache.

Aplikacje sieci Web są jedynymi składnikami dostępnymi dla Internetu za pośrednictwem bramy App Gateway.The web apps are the only components accessible to the internet via the App Gateway. Interfejs API i funkcja są niedostępne z poziomu klienta internetowego.The API and the function are inaccessible from an internet client. Ruch przychodzący jest chroniony przez zaporę aplikacji sieci Web skonfigurowaną w bramie aplikacji.The inbound traffic is protected by a Web Application Firewall configured on the App Gateway.

Poniższe usługi są kluczem do blokowania środowiska ASE w tej architekturze:The following services are key to locking down the ASE in this architecture:

Usługa azure Virtual Network lub Sieć wirtualna jest prywatną siecią w chmurze platformy Azure, należącym do firmy.Azure Virtual Network or VNet is a private Azure cloud network owned by the enterprise. Zapewnia bezpieczeństwo i izolację sieci.It provides network-based security and isolation. Środowisko ASE jest wdrożeniem App Service w podsieci sieci wirtualnej należącej do przedsiębiorstwa.ASE is an App Service deployment into a subnet of the enterprise-owned VNet. Umożliwia ona ścisłą kontrolę nad tym miejscem sieci i zasobami, do których uzyskuje dostęp, przy użyciu sieciowych grup zabezpieczeń i punktów końcowych usługi .It allows the enterprise to tightly control that network space and the resources it accesses, using Network Security groups and Service Endpoints .

Application Gateway jest modułem równoważenia obciążenia sieci Web na poziomie aplikacji z odciążeniem protokołu TLS/SSL oraz ochroną zapory aplikacji sieci Web (WAF).Application Gateway is an application-level web traffic load balancer, with TLS/SSL offloading, and web application firewall (WAF) protection. Nasłuchuje na publicznym adresie IP i kieruje ruch do punktu końcowego aplikacji w ILB ASE.It listens on a public IP address and routes traffic to the application endpoint in the ILB ASE. Ponieważ jest to Routing na poziomie aplikacji, może kierować ruchem do wielu aplikacji w ramach tego samego ILB ASE.Since this is application-level routing, it can route traffic to multiple apps within the same ILB ASE. Zobacz Application Gateway wielu witryn, aby dowiedzieć się, jak Brama App Gateway obsługuje wiele lokacji.See Application Gateway multiple site hosting to learn how App Gateway supports multiple sites.

Zapora platformy Azure służy do ograniczania ruchu wychodzącego z aplikacji sieci Web.Azure Firewall is used to restrict the outbound traffic from the web application. Ruch wychodzący, który nie przechodzi przez kanały punktu końcowego usługi i tabelę tras wymaganą przez środowisko ASE, jest kierowany do podsieci zapory.Outgoing traffic that does not go through the service endpoint channels and a route table required by ASE, is directed to the firewall subnet. Chociaż zaleca się skonfigurowanie punktów końcowych usługi w podsieci zapory na potrzeby śledzenia, może to nie być zawsze możliwe.Although it is recommended for service endpoints to be configured on the firewall subnet for traceability, it may not be always feasible. Na przykład niektóre punkty końcowe usługi są wymagane przez infrastrukturę środowiska ASE, aby znajdować się w podsieci środowiska ASE.For example, some service endpoints are required by the ASE infrastructure to be on the ASE subnet. Dla uproszczenia ta architektura konfiguruje wszystkie punkty końcowe usługi w podsieci środowiska ASE.For simplicity, this architecture configures all service endpoints on the ASE subnet.

Azure Active Directory lub usługa Azure AD zapewnia prawa dostępu i zarządzanie uprawnieniami do zasobów i usług platformy Azure.Azure Active Directory or Azure AD provides access rights and permissions management to Azure resources and services. Zarządzane tożsamości przypisują tożsamości do usług i aplikacji, które są automatycznie zarządzane przez usługę Azure AD.Managed Identities assigns identities to services and apps, automatically managed by Azure AD. Tożsamości te mogą służyć do uwierzytelniania w dowolnej usłudze, która obsługuje uwierzytelnianie w usłudze Azure AD.These identities can be used to authenticate to any service that supports Azure AD authentication. Eliminuje to konieczność jawnego konfigurowania poświadczeń dla tych aplikacji.This removes the need to explicitly configure credentials for these apps. Ta architektura przypisuje zarządzaną tożsamość do aplikacji sieci Web.This architecture assigns a managed identity to the web app.

Key Vault przechowuje wpisy tajne i poświadczenia wymagane przez aplikacje.Key Vault stores any secrets and credentials required by the apps. Użyj tej opcji, aby przechowywać wpisy tajne bezpośrednio w aplikacji.Use this option over storing secrets directly in the application.

Azure Pipelines zapewnia ciągłą integrację i ciągłe wdrażanie w tej architekturze.Azure Pipelines provides Continuous Integration and Continuous Deployment capabilities in this architecture. Ze względu na to, że środowisko ASE jest wewnętrzne dla sieci wirtualnej, maszyna wirtualna jest używana jako serwera przesiadkowego w ramach wirtualnej do wdrażania aplikacji w planach App Service.Since the ASE is internal to the virtual network, a virtual machine is used as a jumpbox inside the VNet to deploy apps in the App Service plans. Potok tworzy aplikacje spoza sieci wirtualnej.The pipeline builds the apps outside the VNet. W celu zwiększenia bezpieczeństwa i bezproblemowej łączności protokołu RDP/SSH należy rozważyć użycie ostatnio wydanej platformy Azure bastionu jako serwera przesiadkowego.For enhanced security and seamless RDP/SSH connectivity, consider using the recently released Azure Bastion as the jumpbox.

Konfiguracja z konfiguracją wiele lokacjiMulti-site configuration

Wdrożenie z obsługą kilku lokacji

Wewnętrzne środowisko ASE może hostować kilka aplikacji sieci Web i interfejsów API z punktami końcowymi HTTP.Internal ASE can host several web apps and APIs with HTTP endpoints. Te aplikacje są blokowane z publicznej sieci Internet, ponieważ adres IP ILB jest dostępny tylko w ramach Virtual Network.These applications are locked down from the public internet as the ILB IP is only accessible from within the Virtual Network. Application Gateway służy do selektywnego uwidaczniania tych aplikacji w Internecie.The Application Gateway is used to selectively expose these applications to the internet. Środowisko ASE przypisuje domyślny adres URL do każdej App Service aplikacji jako <default-appName>.<ASE-domain>.appserviceenvironment.net .ASE assigns a default URL to each App Service application as <default-appName>.<ASE-domain>.appserviceenvironment.net. Zostanie utworzona prywatna strefa DNS , która mapuje nazwę domeny środowiska ASE na adres IP środowiska ASE ILB.A private DNS zone is created that maps the ASE domain name to the ASE ILB IP address. Pozwala to uniknąć używania niestandardowego serwera DNS w celu uzyskania dostępu do aplikacji w sieci wirtualnej.This avoids using a custom DNS to access the apps within the VNet.

Brama aplikacji jest skonfigurowana tak, że odbiornik nasłuchuje na porcie https w przypadku żądań na adres IP bramy.The App Gateway is configured such that a listener listens on the HTTPS port for requests to the Gateway's IP address. Dla uproszczenia Ta implementacja nie korzysta z publicznej rejestracji nazw DNS i wymaga modyfikacji pliku localhost na komputerze, aby wskazywał arbitralnie wybrany adres URL dla adresu IP bramy aplikacji.For simplicity, this implementation does not use a public DNS name registration, and requires you to modify the localhost file on your computer to point an arbitrarily chosen URL to the App Gateway's IP. Dla uproszczenia odbiornik używa certyfikatu z podpisem własnym, aby przetwarzać te żądania.For simplicity, the listener uses a self-signed certificate to process these requests. Brama aplikacji ma Pule zaplecza dla każdego domyślnego adresu URL aplikacji App Service.The App Gateway has backend pools for each App Service application's default URL. Reguła routingu jest konfigurowana w celu połączenia odbiornika z pulą zaplecza.A routing rule is configured to connect the listener to the backend pool. Utworzono Ustawienia protokołu HTTP , które określają, czy połączenie między bramą i środowiskiem ASE zostanie zaszyfrowane.HTTP settings are created that determine whether the connection between the gateway and the ASE will be encrypted. Te ustawienia są również używane do zastąpienia przychodzącego nagłówka hosta HTTP nazwą hosta pobraną z puli zaplecza.These settings are also used to override the incoming HTTP host header with a host name picked from the backend pool. Ta implementacja używa domyślnych certyfikatów utworzonych dla domyślnych adresów URL aplikacji środowiska ASE, które są zaufane przez bramę.This implementation uses default certificates created for the default ASE app URLs, which are trusted by the gateway. Żądanie jest przekierowywane do domyślnego adresu URL odpowiedniej aplikacji.The request is redirected to the default URL of the corresponding app. Prywatna Usługa DNS połączona z siecią wirtualną przekazuje to żądanie do adresu IP ILB.The private DNS linked to the VNet forwards this request to the ILB IP. Następnie środowisko ASE przekazuje je do żądanej usługi App Service.The ASE then forward this to the requested App service. Każda komunikacja HTTP w aplikacjach środowiska ASE przechodzi przez prywatny system DNS.Any HTTP communication within the ASE apps, goes through the private DNS. Należy pamiętać, że dla każdej aplikacji środowiska ASE należy skonfigurować odbiornik, pulę zaplecza, regułę routingu i ustawienia protokołu HTTP.Note that the listener, backend pool, routing rule, and the HTTP settings need to be configured on the App Gateway for each ASE app.

Poznaj appgw.js i dns.js , aby zrozumieć, w jaki sposób te konfiguracje zostały wprowadzone, aby umożliwić korzystanie z wielu lokacji.Explore appgw.json and dns.json to understand how these configurations are made to allow multiple sites. Aplikacja sieci Web o nazwie testapp jest pustą aplikacją utworzoną w celu przedstawienia tej konfiguracji.The web app named testapp is an empty app created to demonstrate this configuration. Te pliki JSON są dostępne ze skryptu wdrażania deploy_std. sh. Są one również dostępne dla deploy_ha. sh, który jest używany do wdrożenia wielowitrynowego o wysokiej dostępności.These JSON files are accessed from the deployment script deploy_std.sh. These are also accessed by deploy_ha.sh, which is used for a high availability multi-site ASE deployment.

Zagadnienia dotyczące bezpieczeństwaSecurity considerations

Środowisko usługi App ServiceApp Service Environment

Wewnętrzna środowisko ASE jest wdrażana w sieci wirtualnej przedsiębiorstwa, Ukryta z publicznego Internetu.An internal ASE is deployed in the enterprise virtual network, hidden from the public internet. Dzięki temu przedsiębiorstwo może blokować usługi zaplecza, takie jak interfejsy API sieci Web i funkcje, na poziomie sieci.It allows the enterprise to lock down their backend services, such as web APIs and functions, at the network level. Wszystkie aplikacje środowiska ASE z punktem końcowym HTTP są dostępne za pośrednictwem ILB, z poziomu sieci wirtualnej.Any ASE app with an HTTP endpoint, can be accessed through the ILB, from within the virtual network. Brama aplikacji jest skonfigurowana do przesyłania dalej żądań do aplikacji sieci Web za pomocą ILB.The App Gateway is configured to forward requests to the web app through the ILB. Sama aplikacja internetowa przechodzi przez ILB, aby uzyskać dostęp do interfejsu API.The web app itself goes through the ILB to access the API. Krytyczne składniki zaplecza, czyli interfejs API i funkcja, są skutecznie niedostępne z publicznego Internetu.The critical backend components, that is, the API and the function, are effectively inaccessible from the public internet.

Dla każdej usługi App Service są tworzone domyślne certyfikaty z domyślną nazwą domeny przypisaną przez środowisko ASE.Default certificates are created for each App service for the default domain name assigned by ASE. Ten certyfikat może wzmocnić zabezpieczenia ruchu między bramą a aplikacją i może być wymagany w określonych scenariuszach.This certificate can tighten the security of the traffic between the gateway and the app, and may be required in certain scenarios. Te certyfikaty nie będą widoczne dla przeglądarki klienta, ale mogą odpowiadać tylko na certyfikaty skonfigurowane w bramie aplikacji.These certificates will not be visible by the client browser, it can only respond to the certificates configured at the App Gateway.

Brama aplikacjiApp Gateway

Implementacja referencyjna konfiguruje bramę aplikacji programowo w appgw.jsna.The reference implementation configures the App Gateway programmatically in the appgw.json. Plik deploy_std. sh używa tej konfiguracji podczas wdrażania bramy:The file deploy_std.sh uses this configuration when deploying the gateway:

az deployment group create --resource-group $RGNAME --template-file templates/appgw.json --parameters vnetName=$VNET_NAME appgwSubnetAddressPrefix=$APPGW_PREFIX appgwApplications=@appgwApps.parameters.json
APPGW_PUBLIC_IP=$(az deployment group show -g $RGNAME -n appgw --query properties.outputs.appGwPublicIpAddress.value -o tsv)

SzyfrowanieEncryption

Zgodnie z opisem zawartym w temacie Omówienie zakończenia protokołu TLS i kompleksowej usługi TLS z Application Gateway, Brama aplikacji może Transport Layer Security używać protokołu SSL (TLS)/Secure Sockets Layer (Secure ) do szyfrowania i ochrony całego ruchu z przeglądarek sieci Web.As described in the Overview of TLS termination and end to end TLS with Application Gateway, App Gateway can use Transport Layer Security (TLS)/Secure Sockets Layer (SSL) to encrypt and protect all traffic from web browsers. Szyfrowanie można skonfigurować w następujący sposób:Encryption can be configured in the following ways:

  1. Szyfrowanie zostało przerwane na bramie .Encryption terminated at the gateway . W tym przypadku pule zaplecza są skonfigurowane dla protokołu HTTP.The backend pools in this case are configured for HTTP. Szyfrowanie zostaje zatrzymane na bramie, a ruch między bramą a usługą App Service jest niezaszyfrowany.The encryption stops at the gateway, and traffic between the gateway and the app service is unencrypted. Ponieważ szyfrowanie jest czasochłonne, nieszyfrowany ruch w zapleczu zwiększa wydajność i zapewnia prostsze zarządzanie certyfikatami.Since encryption is CPU-intensive, unencrypted traffic at the backend improves performance and allows simpler certificate management. Zapewnia to rozsądny poziom zabezpieczeń, ponieważ zaplecze jest zabezpieczone przez konfigurację sieci.This provides a reasonable level of security since the backend is secured by virtue of the network configuration.

  2. Kompleksowe szyfrowanie .End to end encryption . W niektórych scenariuszach, takich jak określone wymagania dotyczące zabezpieczeń lub zgodności, ruch może być wymagany do szyfrowania między bramą a aplikacją.In some scenarios, such as specific security or compliance requirements, the traffic might be required to be encrypted between the gateway and the app. Jest to realizowane przy użyciu połączenia HTTPS i konfigurowania certyfikatów w puli zaplecza.This is achieved by using HTTPS connection, and configuring certificates at the backend pool.

Ta implementacja referencyjna używa certyfikatów z podpisem własnym dla usługi App Gateway.This reference implementation uses self-signed certificates for App Gateway. W przypadku kodu produkcyjnego należy użyć certyfikatu wystawionego przez urząd certyfikacji .For production code, a certificate issued by a Certificate Authority should be used. Aby uzyskać listę obsługiwanych typów certyfikatów, Odczytaj Certyfikaty obsługiwane przez zakończenie protokołu TLS.For a list of supported certificate types, read Certificates supported for TLS termination. Aby dowiedzieć się, jak utworzyć szyfrowanie zakończone przez bramę, przeczytaj artykuł Konfigurowanie bramy aplikacji z zakończeniem protokołu TLS przy użyciu Azure Portal .Read Configure an application gateway with TLS termination using the Azure portal to learn how to create Gateway-terminated encryption. Następujące wiersze kodu w appgw.jssą konfigurowane programowo:The following lines of code in the appgw.json configure this programmatically:

          {
            "name": "httpListeners",
            "count": "[length(parameters('appgwApplications'))]",
            "input": {
              "name": "[concat(variables('appgwListenerName'), parameters('appgwApplications')[copyIndex('httpListeners')].name)]",
              "properties": {
                "frontendIPConfiguration": {
                  "id": "[concat(variables('appgwId'), '/frontendIPConfigurations/', variables('appgwFrontendName'))]"
                },
                "frontendPort": {
                  "id": "[concat(variables('appgwId'), '/frontendPorts/port_443')]"
                },
                "protocol": "Https",
                "sslCertificate": {
                  "id": "[concat(variables('appgwId'), '/sslCertificates/', variables('appgwSslCertificateName'), parameters('appgwApplications')[copyIndex('httpListeners')].name)]"
                },
                "hostName": "[parameters('appgwApplications')[copyIndex('httpListeners')].hostName]",
                "requireServerNameIndication": true
              }
            }
          },

W przypadku ruchu między aplikacjami sieci Web w środowisku ASE i bramą używane są domyślne certyfikaty SSL.For traffic between the web apps on the ASE and the gateway, the default SSL certificates are used. Pule zaplecza w tej implementacji są skonfigurowane tak, aby przekierowywać ruch HTTPS z nazwą hosta przesłoniętą przez domyślne nazwy domen skojarzone z aplikacjami sieci Web.The backend pools in this implementation are configured to redirect HTTPS traffic with host name overridden by the default domain names associated to the web apps. Brama aplikacji ufa domyślnym certyfikatom SSL, ponieważ są wystawiane przez firmę Microsoft.The App Gateway trusts the default SSL certificates since they are issued by Microsoft. Przeczytaj temat konfigurowanie App Service z Application Gateway , aby dowiedzieć się, jak te konfiguracje zostały wykonane.Read Configure App Service with Application Gateway to know how these configurations are made. Następujące wiersze w appgw.jspokazują, jak to jest skonfigurowane w implementacji odwołania:The following lines in the appgw.json show how this is configured in the reference implementation:

         {
            "name": "backendHttpSettingsCollection",
            "count": "[length(parameters('appgwApplications'))]",
            "input": {
              "name": "[concat(variables('appgwHttpSettingsName'), parameters('appgwApplications')[copyIndex('backendHttpSettingsCollection')].name)]",
              "properties": {
                "Port": 443,
                "Protocol": "Https",
                "cookieBasedAffinity": "Disabled",
                "pickHostNameFromBackendAddress": true,
                "requestTimeout": 20,
                "probe": {
                  "id": "[concat(variables('appgwId'), '/probes/', variables('appgwHealthProbeName'), parameters('appgwApplications')[copyIndex('backendHttpSettingsCollection')].name)]"
                }
              }
            }
          },

Web Application FirewallWeb Application Firewall

Zapora aplikacji sieci Web (WAF) na Application Gateway chroni aplikacje sieci Web przed złośliwymi atakami, takimi jak iniekcja SQL.Web Application Firewall (WAF) on the Application Gateway protects the web apps from malicious attacks, such as SQL injection. Jest ona również zintegrowana z Azure Monitor, aby monitorować ataki przy użyciu dziennika w czasie rzeczywistym.It is also integrated with Azure Monitor, to monitor attacks using a real-time log. WAF musi być włączona na bramie, zgodnie z opisem w temacie Tworzenie bramy aplikacji za pomocą zapory aplikacji sieci Web przy użyciu Azure Portal.WAF needs to be enabled on the gateway, as described in Create an application gateway with a Web Application Firewall using the Azure portal. Implementacja referencyjna umożliwia programowe WAF appgw.jsw pliku z następującym fragmentem kodu:The reference implementation enables WAF programmatically in the appgw.json file with the following snippet:

        "webApplicationFirewallConfiguration": {
          "enabled": true,
          "firewallMode": "Detection",
          "ruleSetType": "OWASP",
          "ruleSetVersion": "3.0"
        },

Virtual NetworkVirtual Network

Sieciowe grupy zabezpieczeń można kojarzyć z co najmniej jedną podsiecią w sieci wirtualnej.Network security groups can be associated with one or more subnets in the VNet. Są to reguły zabezpieczeń zezwalające lub uniemożliwiające przepływ ruchu między różnymi zasobami platformy Azure.These are security rules that allow or deny traffic to flow between various Azure resources. Ta architektura kojarzy osobne sieciowej grupy zabezpieczeń z każdą podsiecią.This architecture associates a separate NSG for each subnet. Pozwala to na precyzyjne dostrajanie tych reguł dla każdej podsieci, zgodnie z usługami zawartymi w tej podsieci.This allows fine-tuning of these rules per subnet, as per the service(s) contained in that subnet. Na przykład należy zapoznać się z konfiguracją programu "type": "Microsoft.Network/networkSecurityGroups" w pliku ase.jsna sieciowej grupy zabezpieczeń dla podsieci środowiska ASE oraz w pliku appgw.jsna potrzeby podsieci usługi App Gateway.For example, explore the configuration for "type": "Microsoft.Network/networkSecurityGroups" in the file ase.json for the NSG for the ASE subnet, and in the file appgw.json for the NSG for App Gateway subnet.

Punkty końcowe usługi zwiększają prywatną przestrzeń adresową i tożsamość sieci wirtualnej w celu obsługi usług platformy Azure, ograniczając dostęp do tych usług tylko do sieci wirtualnej.Service endpoints extend your VNet's private address space and identity to supporting Azure services, restricting the access to these services to only your VNet. W celu zwiększenia bezpieczeństwa należy włączyć punkty końcowe usługi w podsieci środowiska ASE dla dowolnej usługi platformy Azure, która go obsługuje.For improved security, service endpoints should be enabled on the ASE subnet for any Azure service that supports it. Usługa może być następnie zabezpieczona w sieci wirtualnej przedsiębiorstwa przez ustawienie w tej usłudze reguł usługi Virtual Network, co skutecznie blokuje dostęp z publicznego Internetu.The service can then be secured to the enterprise VNet by setting virtual network rules on the service, effectively blocking access from public internet. Infrastruktura środowiska ASE konfiguruje punkty końcowe usługi dla centrum zdarzeń, SQL Server i magazynu na potrzeby własnego zarządzania, nawet jeśli sama architektura nie może ich używać, jak wspomniano w sekcji architektura systemu w tym artykule.ASE infrastructure sets up service endpoints for Event Hub, SQL Server, and Storage, for its own management, even if the architecture itself may not use them, as mentioned in the System Architecture section of this article. Ta architektura konfiguruje punkty końcowe usługi dla używanych usług, które obsługują następujące: Service Bus, SQL Server, Key Vault i CosmosDB.This architecture configures service endpoints for the services used, that support this: Service Bus, SQL Server, Key Vault, and CosmosDB. Zapoznaj się z tą konfiguracją w ase.js, tak jak "type": "Microsoft.Network/virtualNetworks/subnets" --> "properties" --> "serviceEndpoints" .Explore this configuration in the ase.json, as "type": "Microsoft.Network/virtualNetworks/subnets" --> "properties" --> "serviceEndpoints".

Włączanie punktów końcowych usługi w podsieci jest procesem dwuetapowym.Enabling service endpoints on a subnet is a two-step process. Zasoby muszą być skonfigurowane tak, aby odbierali ruch z punktów końcowych usługi z tej sieci wirtualnej.The resources themselves need to be configured to receive traffic on the service endpoints from this virtual network. Aby uzyskać więcej informacji, przeczytaj temat ograniczanie dostępu sieciowego do zasobu .For more information, read Restrict network access to a resource .

FirewallFirewall

Punkty końcowe zapory i usługi platformy Azure uzupełniają się wzajemnie.Azure Firewall and service endpoints complement each other. Gdy punkty końcowe usługi chronią zasoby przez ograniczenie przychodzącego ruchu pochodzącego z sieci wirtualnej, Zapora platformy Azure umożliwia ograniczenie ruchu wychodzącego z aplikacji.While service endpoints protect the resources by restricting incoming traffic to originate from your virtual network, Azure Firewall allows you to restrict the outbound traffic from your applications. Zaleca się, aby cały ruch wychodzący był przekazywany przez podsieć zapory, w tym ruch punktu końcowego usługi.It is recommended to let all outbound traffic to pass through the firewall subnet, including service endpoint traffic. Pozwala to na lepsze monitorowanie ruchu wychodzącego.This allows better monitoring of the outbound traffic. Jednak infrastruktura środowiska ASE wymaga, aby punkty końcowe usług SQL Server, Storage i Event Hubs zostały skonfigurowane w podsieci środowiska ASE.However, ASE infrastructure requires service endpoints for SQL Server, Storage, and Event Hubs to be configured on the ASE subnet. Zobacz blokowanie App Service Environment na potrzeby dyskusji na temat integracji zapory.See the Locking down an App Service Environment for discussion on firewall integration. Ponadto ta implementacja używa CosmosDB w trybie połączenia bezpośredniego, który wymaga otwarcia zakresu portów.Additionally, this implementation uses CosmosDB in direct connection mode, which requires a range of ports to be opened up. Może to spowodować skomplikowanie konfiguracji zapory.This may complicate the firewall configuration. Dla uproszczenia ta architektura referencyjna konfiguruje wszystkie punkty końcowe usługi w podsieci środowiska ASE zamiast podsieci zapory.For simplicity, this reference architecture configures all service endpoints on the ASE subnet instead of the firewall subnet. Obejmuje to punkty końcowe dla Service Bus, CosmosDB i Key Vault, a także te, które są wymagane przez infrastrukturę środowiska ASE.This includes endpoints for Service Bus, CosmosDB, and Key Vault, in addition to those required by the ASE infrastructure.

Zobacz Konfigurowanie zapory platformy Azure przy użyciu środowiska ASE , aby dowiedzieć się, jak Zapora jest zintegrowana z środowiskiem ASE.See Configuring Azure Firewall with your ASE to learn how firewall is integrated with the ASE. Każdy ruch, który nie przechodzi przez punkty końcowe usługi i tabelę tras sieci wirtualnej, będzie monitorowany i bramny przez zaporę.Any traffic not going over the service endpoints and virtual network route table, will be monitored and gated by the firewall. Konieczność stosowania tabeli tras została opisana w następnej sekcji.The need for the route table is described in the following section.

Adresy IP zarządzania środowiskiem ASEASE Management IPs

Ruch związany z zarządzaniem ASE odbywa się za pomocą sieci wirtualnej przedsiębiorstwa.The ASE management traffic flows through the enterprise virtual network. Ten ruch powinien być kierowany bezpośrednio do dedykowanych adresów IP spoza sieci wirtualnej, unikając zapory.This traffic should be routed directly to the dedicated IP addresses outside the virtual network, avoiding the firewall. Jest to osiągane przez utworzenie zdefiniowanej przez użytkownika tabeli tras sieci wirtualnej.This is achieved by creating a user-defined virtual network route table. Artykuł App Service Environment adresy zarządzania wyświetla listę tych adresów IP.The article App Service Environment management addresses lists these IP addresses. Ta lista może być zbyt długa, aby można ją było skonfigurować ręcznie w zaporze.This list can get too long to be configured in the firewall manually. Ta implementacja pokazuje, jak można to zrobić programowo.This implementation shows how this can be populated programmatically. Poniższy wiersz w deploy_std. sh uzyskuje tę listę przy użyciu interfejsu wiersza polecenia platformy Azure i JQ, Analizator JSON wiersza poleceń:The following line in the deploy_std.sh obtains this list using Azure CLI and jq, a command line JSON parser:

ENDPOINTS_LIST=$(az rest --method get --uri $ASE_ID/inboundnetworkdependenciesendpoints?api-version=2016-09-01 | jq '.value[0].endpoints | join(", ")' -j)

Jest to odpowiednik udokumentowanej metody uzyskiwania adresów zarządzania z interfejsu API.This is equivalent to the documented method of getting the management addresses from API.

Następujące polecenia w deploy_std. sh tworzą sieć wirtualną wraz z tabelą tras zgodnie z konfiguracją w network.jsna:The following commands in the deploy_std.sh create the virtual network along with the route table, as configured in the network.json:

VNET_NAME=$(az network vnet list -g $RGNAME --query "[?contains(addressSpace.addressPrefixes, '${NET_PREFIX}')]" --query [0].name -o tsv)
az deployment group create --resource-group $RGNAME --template-file templates/network.json --parameters existentVnetName=$VNET_NAME vnetAddressPrefix=$NET_PREFIX
VNET_NAME=$(az deployment group show -g $RGNAME -n network --query properties.outputs.vnetName.value -o tsv)
VNET_ROUTE_NAME=$(az deployment group show -g $RGNAME -n network --query properties.outputs.vnetRouteName.value -o tsv)

Po utworzeniu podsieci środowiska ASE skojarzona jest tabela tras:When the ASE subnet is created, the route table is associated with it:

az deployment group create --resource-group $RGNAME --template-file templates/ase.json -n ase --parameters vnetName=$VNET_NAME vnetRouteName=$VNET_ROUTE_NAME aseSubnetAddressPrefix=$ASE_PREFIX

Po utworzeniu zapory firewall.jsw pliku konfiguracyjnym aktualizuje tę tabelę tras za pomocą adresów IP zarządzania środowiska ASE, a po nich, przy czym jest on objęty zaporą.When the firewall is created, the firewall.json configuration file updates this route table with the ASE management IPs, followed by the firewall IP. Na tym dysku pozostały ruch przez adres IP zapory:This drives the remaining traffic through the firewall IP:

"variables": {
    "firewallSubnetName": "AzureFirewallSubnet",
    "firewallPublicIpName": "[concat('firewallIp', '-', uniqueString(resourceGroup().id))]",
    "firewallName": "[concat('firewall', '-', uniqueString(resourceGroup().id))]",
    "aseManagementEndpoints": "[split(replace(parameters('aseManagementEndpointsList') ,' ', ''), ',')]",
    "copy": [
      {
        "name": "aseManagementIpRoutes",
        "count": "[length(variables('aseManagementEndpoints'))]",
        "input": {
          "name": "[replace(variables('aseManagementEndpoints')[copyIndex('aseManagementIpRoutes')], '/', '-')]",
          "properties": {
            "addressPrefix": "[variables('aseManagementEndpoints')[copyIndex('aseManagementIpRoutes')]]",
            "nextHopType": "Internet"
          }
        }
      }
    ]
  },
  "resources": [
    {
      "type": "Microsoft.Network/routeTables",
      "apiVersion": "2019-11-01",
      "name": "[parameters('vnetRouteName')]",
      "location": "[parameters('location')]",
      "tags": {
        "displayName": "UDR - Subnet"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Network/azureFirewalls', variables('firewallName'))]"
      ],
      "properties": {
        "routes": "[concat(variables('aseManagementIpRoutes'), array(json(concat('{ \"name\": \"Firewall\", \"properties\": { \"addressPrefix\": \"0.0.0.0/0\", \"nextHopType\": \"VirtualAppliance\", \"nextHopIpAddress\": \"', reference(concat('Microsoft.Network/azureFirewalls/', variables('firewallName')),'2019-09-01','Full').properties.ipConfigurations[0].properties.privateIPAddress, '\" } }'))))]"
      }
    },

Lista adresów IP zarządzania może ulec zmianie po wdrożeniu tabeli tras, w której przypadku należy ponownie wdrożyć tę tabelę tras.The management IP list may change after the route table is deployed, in which case this route table will need to be redeployed.

Azure Active DirectoryAzure Active Directory

Azure Active Directory udostępnia funkcje zabezpieczeń do uwierzytelniania aplikacji i autoryzacji dostępu do zasobów.Azure Active Directory provides security features to authenticate applications and authorize access to resources. Ta architektura referencyjna korzysta z dwóch kluczowych funkcji Azure Active Directory: tożsamości zarządzanych i kontroli dostępu opartej na rolach.This reference architecture uses two key features of Azure Active Directory: managed identities, and role based access control.

Podczas kompilowania aplikacji w chmurze poświadczenia wymagane do uwierzytelnienia w usługach w chmurze muszą być zabezpieczone.When building cloud applications, the credentials required to authenticate to cloud services, must be secured. W idealnym przypadku poświadczenia nigdy nie powinny występować na stacjach roboczych deweloperów ani nie zostały zaewidencjonowane do kontroli źródła.Ideally, the credentials should never appear on developer workstations or checked into source control. Azure Key Vault zapewnia sposób bezpiecznego przechowywania poświadczeń i wpisów tajnych, ale aplikacja nadal musi uwierzytelnić się, aby Key Vault je pobrać.Azure Key Vault provides a way to securely store credentials and secrets, but the app still has to authenticate to Key Vault to retrieve them. Zarządzane tożsamości dla zasobów platformy Azure zapewniają usługi platformy Azure z automatyczną tożsamością zarządzaną w usłudze Azure AD.Managed Identities for Azure resources provides Azure services with an automatically managed identity in Azure AD. Ta tożsamość może służyć do uwierzytelniania w dowolnej usłudze, która obsługuje uwierzytelnianie usługi Azure AD, w tym Key Vault, bez żadnych poświadczeń w aplikacji.This identity can be used to authenticate to any service that supports Azure AD authentication, including Key Vault, without any credentials in the application.

Kontrola dostępu oparta na rolach lub RBAC zarządza dostępem do zasobów platformy Azure.Role-based access control or RBAC manages access to Azure resources. Możliwości obejmują:This includes:

  • która jednostka ma dostęp: użytkownik, tożsamość zarządzana, podmiot zabezpieczeń.which entity has the access: user, managed identity, security principal.
  • jakiego typu dostępu posiada: właściciel, współautor, czytelnik, administrator.what type of access it has: owner, contributor, reader, admin.
  • zakres dostępu: zasobu, grupy zasobów, subskrypcji lub grupy zarządzania.scope of the access: resource, resource group, subscription, or management group.

Dostęp do aplikacji środowiska ASE można zablokować, ściśle kontrolując wymaganą rolę i typ dostępu dla każdej aplikacji.You can lock down access to ASE applications by tightly controlling the role required and the type of access for each app. Dzięki temu wiele aplikacji można wdrożyć na tym samym środowisku ASE z różnych zespołów programistycznych.This way, multiple apps can be deployed on the same ASE from different development teams. Na przykład fronton może być obsługiwany przez jednego zespołu, a zaplecze przez inną.For example, the frontend might be handled by one team, and the backend by another. RBAC może służyć do ograniczania dostępu poszczególnych zespołów do aplikacji, nad którymi pracuje.RBAC can be used to limit each team's access to the app(s) it is working on. Poznaj role niestandardowe w usłudze Azure RBAC , aby utworzyć role odpowiednie dla Twojej organizacji.Explore Custom roles in Azure RBAC to create roles suitable to your organization.

Key VaultKey Vault

Niektóre usługi obsługują tożsamości zarządzane, jednak używają RBAC, aby skonfigurować uprawnienia do aplikacji.Some services support managed identities, however they use RBAC to set up permissions for the app. Na przykład zobacz Service Bus " wbudowane role RBAC, a także RBAC in CosmosDB.For example, see Service Bus' built-in RBAC roles, as well as RBAC in CosmosDB. Dostęp właściciela do subskrypcji jest wymagany do udzielenia tych uprawnień, nawet jeśli personel z dostępem współautora może wdrożyć te usługi.Owner access to the subscription is required for granting these permissions, even though personnel with Contributor access can deploy these services. Aby umożliwić szerszemu zespołowi deweloperów uruchamianie skryptów wdrażania, następna najlepsza opcja polega na użyciu natywnych zasad kontroli dostępu usługi:To allow a wider team of developers to be able to run the deployment scripts, the next best option is to use native access control policies of the service:

Parametry połączenia dla tych zasad kontroli dostępu są następnie przechowywane w Key Vault.The connection strings for these access control policies are then stored in the Key Vault. Do magazynu można uzyskać dostęp za pomocą tożsamości zarządzanych, które nie wymagają kontroli RBAC.The vault itself is accessed through managed identities, which does not require RBAC. Odpowiednio ustaw zasady dostępu dla tych parametrów połączenia.Set the access policy for these connection strings appropriately. Na przykład, tylko do odczytu dla zaplecza, tylko do zapisu dla frontonu i tak dalej, zamiast korzystać z domyślnych zasad dostępu głównych.For example, read-only for the backend, write-only for the frontend, and so on, instead of using default root access policy.

Poniższy fragment kodu w services.json pokazuje konfigurację magazynu kluczy dla następujących usług:The following snippet in services.json shows the KeyVault configuration for these services:

    {
      "type": "Microsoft.KeyVault/vaults/secrets",
      "name": "[concat(variables('keyVaultName'), '/CosmosKey')]",
      "apiVersion": "2015-06-01",
      "dependsOn": [
        "[resourceId('Microsoft.KeyVault/vaults', variables('keyVaultName'))]",
        "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('cosmosName'))]"
      ],
      "properties": {
        "value": "[listKeys(resourceId('Microsoft.DocumentDB/databaseAccounts',variables('cosmosName')),'2015-04-08').primaryMasterKey]"
      }
    },
    {
      "type": "Microsoft.KeyVault/vaults/secrets",
      "name": "[concat(variables('keyVaultName'), '/ServiceBusListenerConnectionString')]",
      "apiVersion": "2015-06-01",
      "dependsOn": [
        "[resourceId('Microsoft.KeyVault/vaults', variables('keyVaultName'))]",
        "[resourceId('Microsoft.ServiceBus/namespaces/AuthorizationRules', variables('serviceBusName'), 'ListenerSharedAccessKey')]"
      ],
      "properties": {
        "value": "[listKeys(resourceId('Microsoft.ServiceBus/namespaces/AuthorizationRules',variables('serviceBusName'),'ListenerSharedAccessKey'),'2015-08-01').primaryConnectionString]"
      }
    },
    {
      "type": "Microsoft.KeyVault/vaults/secrets",
      "name": "[concat(variables('keyVaultName'), '/ServiceBusSenderConnectionString')]",
      "apiVersion": "2015-06-01",
      "dependsOn": [
        "[resourceId('Microsoft.KeyVault/vaults', variables('keyVaultName'))]",
        "[resourceId('Microsoft.ServiceBus/namespaces/AuthorizationRules', variables('serviceBusName'), 'SenderSharedAccessKey')]"
      ],
      "properties": {
        "value": "[listKeys(resourceId('Microsoft.ServiceBus/namespaces/AuthorizationRules',variables('serviceBusName'),'SenderSharedAccessKey'),'2015-08-01').primaryConnectionString]"
      }
    },

Te wartości parametrów połączenia są dostępne dla aplikacji, odwołując się do pary Key Vault klucz/wartość.These connection string values are accessed by the apps, by referencing the Key Vault key/value pair. Jest to wykonywane w sites.jsna pliku, ponieważ Poniższy fragment kodu jest wyświetlany dla aplikacji do głosowania:This is done in the sites.json file as the following snippet shows for the Voting App:

   "properties": {
        "enabled": true,
        "name": "[variables('votingWebName')]",
        "hostingEnvironment": "[variables('aseId')]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('votingWebPlanName'))]",
        "siteConfig": {
          "appSettings": [
            {
...
...
...
            {
              "name": "ConnectionStrings:sbConnectionString",
              "value": "[concat('@Microsoft.KeyVault(SecretUri=', reference(resourceId('Microsoft.KeyVault/vaults/secrets', parameters('keyVaultName'), variables('serviceBusSenderConnectionStringSecretName')), '2016-10-01').secretUriWithVersion, ')')]"
            },
...
...
            {
              "name": "ConnectionStrings:RedisConnectionString",
              "value": "[concat('@Microsoft.KeyVault(SecretUri=', reference(resourceId('Microsoft.KeyVault/vaults/secrets', parameters('keyVaultName'), variables('redisSecretName')), '2016-10-01').secretUriWithVersion, ')')]"
            },
...
...
            {
              "name": "ConnectionStrings:CosmosKey",
              "value": "[concat('@Microsoft.KeyVault(SecretUri=', reference(resourceId('Microsoft.KeyVault/vaults/secrets', parameters('keyVaultName'), variables('cosmosKeySecretName')), '2016-10-01').secretUriWithVersion, ')')]"
            }

Funkcja uzyskuje również dostęp do parametrów połączenia odbiornika Service Bus w podobny sposób.The function also accesses the Service Bus listener connection string in a similar manner.

Zagadnienia dotyczące skalowalnościScalability considerations

Projektowanie skalowalnych aplikacjiDesign scalable apps

Aplikacja w tej architekturze referencyjnej ma strukturę, aby można było skalować poszczególne składniki na podstawie użycia.The application in this reference architecture is structured so that individual components can be scaled based on usage. Każda aplikacja sieci Web, interfejs API i funkcja jest wdrażana we własnym planie App Service.Each web app, API, and function is deployed in its own App Service plan. W razie potrzeby można monitorować każdą aplikację pod kątem wąskich gardeł wydajności, a następnie skalować ją w górę .You can monitor each app for any performance bottlenecks, and then scale it up if required. Przeczytaj artykuł poprawianie skalowalności w aplikacji sieci Web platformy Azure , aby dowiedzieć się, jak projektować skalowalne aplikacje internetowe przy użyciu Azure App Service.Read Improve scalability in an Azure web application to learn how to design scalable web applications using Azure App Service.

Skalowanie automatyczne bramy aplikacjiAutoscaling App Gateway

Skalowanie automatyczne można włączyć na platformie Azure Application Gateway v2.Autoscaling can be enabled on Azure Application Gateway V2. Umożliwia to skalowanie w górę lub w dół w zależności od wzorców obciążenia ruchu.This allows App Gateway to scale up or down based on the traffic load patterns. Ta architektura referencyjna konfiguruje autoscaleConfiguration w pliku appgw.jsna , aby skalować od zera do 10 dodatkowych wystąpień.This reference architecture configures autoscaleConfiguration in the file appgw.json to scale between zero and 10 additional instances. Aby uzyskać więcej informacji , zobacz skalowanie Application Gateway i WAF v2 .See Scaling Application Gateway and WAF v2 for more details.

Zagadnienia dotyczące wdrażaniaDeployment considerations

Skrypty wdrażania w tej architekturze referencyjnej służą do wdrażania środowiska ASE, innych usług i aplikacji w środowisku ASE.The deployment scripts in this reference architecture are used to deploy ASE, other services, and the applications inside the ASE. Po wdrożeniu tych aplikacji przedsiębiorstwa mogą chcieć zaplanować ciągłą integrację i wdrażanie w celu konserwacji i uaktualniania aplikacji.Once these applications are deployed, enterprises might want to have a plan for continuous integration and deployment for app maintenance and upgrades. W tej sekcji przedstawiono niektóre typowe sposoby korzystania przez deweloperów z aplikacji platformy ASE/CD.This section shows some of the common ways developers use for CI/CD of ASE applications.

Aplikacje można wdrażać do wewnętrznego środowiska ASE tylko z poziomu sieci wirtualnej.Apps can be deployed to an internal ASE only from within the virtual network. Następujące trzy metody są szeroko używane do wdrażania aplikacji środowiska ASE:The following three methods are widely used to deploy ASE apps:

  1. Ręcznie wewnątrz Virtual Network — Utwórz maszynę wirtualną w sieci wirtualnej ASE z wymaganymi narzędziami do wdrożenia.Manually inside the Virtual Network - Create a virtual machine inside the ASE VNet with the required tools for the deployment. Otwórz połączenie RDP z maszyną wirtualną przy użyciu konfiguracji sieciowej grupy zabezpieczeń.Open up the RDP connection to the VM using an NSG configuration. Skopiuj artefakty kodu do maszyny wirtualnej, skompiluj i Wdróż w podsieci środowiska ASE.Copy your code artifacts to the VM, build, and deploy to the ASE subnet. Jest to prosty sposób, aby skonfigurować wstępne kompilacje i testowe środowisko programistyczne.This is a simple way to set up an initial build and test development environment. Nie jest to jednak zalecane w środowisku produkcyjnym, ponieważ nie może skalować wymaganej przepływności wdrożenia.It is however not recommended for production environment since it cannot scale the required deployment throughput.

  2. Wskaż połączenie z lokacją z lokalnej stacji roboczej — pozwala to na rozbudowę sieci wirtualnej ASE na maszynę deweloperskią i wdrożenie z niej.Point to site connection from local workstation - This allows you to extend your ASE VNet to your development machine, and deploy from there. Jest to inny sposób konfigurowania początkowego środowiska deweloperskiego i nie jest to zalecane w środowisku produkcyjnym.This is another way to set up an initial dev environment, and not recommended for production.

  3. Za pomocą Azure Pipelines — implementuje kompletny potok ciągłej integracji/ciągłego wdrażania, kończąc w agencie znajdującym się wewnątrz sieci wirtualnej.Through Azure Pipelines - This implements a complete CI/CD pipeline, ending in an agent located inside the VNet. Jest to idealne rozwiązanie w środowiskach produkcyjnych wymagających dużej przepływności wdrożenia.This is ideal for production environments requiring high throughput of deployment. Potok kompilacji pozostaje całkowicie poza siecią wirtualną.The build pipeline remains entirely outside the VNet. Potok Wdróż kopiuje skompilowane obiekty do agenta kompilacji w sieci wirtualnej, a następnie wdraża je w podsieci środowiska ASE.The deploy pipeline copies the built objects to the build agent inside the VNet, and then deploys to the ASE subnet. Aby uzyskać więcej informacji, przeczytaj tę dyskusję na własnym agencie kompilacji między potokami i siecią wirtualną ASE.For more information, read this discussion on the self-hosted build agent between Pipelines and the ASE VNet.

Używanie Azure Pipelines jest zalecane w środowiskach produkcyjnych.Using Azure Pipelines is recommended for production environments. Ciągłe tworzenie skryptów/dysk CD z pomocą Azure Pipelines schematu YAML ułatwia automatyzację procesów kompilacji i wdrażania.Scripting CI/CD with the help of Azure Pipelines YAML schema helps to automate the build and deployment processes. Azure-Pipelines. yml implementuje taki potok ciągłej integracji/ciągłego wdrażania dla aplikacji sieci Web w tej implementacji odwołania.The azure-pipelines.yml implements such a CI/CD pipeline for the web app in this reference implementation. Istnieją podobne skrypty CI/CD dla internetowego interfejsu API oraz funkcji.There are similar CI/CD scripts for the web API as well as the function. Przeczytaj Azure Pipelines Użyj , aby dowiedzieć się, jak są one używane do automatyzowania ciągłej integracji/ciągłego dostarczania dla każdej aplikacji.Read Use Azure Pipelines to learn how these are used to automate CI/CD for each application.

Niektóre przedsiębiorstwa mogą nie chcieć zachować stałego agenta kompilacji w sieci wirtualnej.Some enterprises may not want to maintain a permanent build agent inside the VNet. W takim przypadku można utworzyć agenta kompilacji w potoku DevOps i po zakończeniu wdrażania wykonać tę opcję.In that case, you can choose to create a build agent within the DevOps pipeline, and tear it down once the deployment is completed. Spowoduje to dodanie kolejnego kroku w DevOps, ale zmniejsza złożoność obsługi maszyny wirtualnej.This adds another step in the DevOps, however it lowers the complexity of maintaining the VM. Możesz nawet rozważyć użycie kontenerów jako agentów kompilacji, a nie maszyn wirtualnych.You may even consider using containers as build agents, instead of VMs. Agenci kompilacji mogą również całkowicie unikać wdrażania z pliku spakowanego znajdującego się poza siecią wirtualną , zazwyczaj na koncie magazynu.Build agents can also be completely avoiding by deploying from a zipped file placed outside the VNet , typically in a storage account. Konto magazynu musi być dostępne ze środowiska ASE.The storage account will need to be accessible from the ASE. Potok powinien mieć dostęp do magazynu.The pipeline should be able to access the storage. Na końcu potoku wydania plik skompresowany może zostać porzucony do magazynu obiektów BLOB.At the end of the release pipeline, a zipped file can be dropped into the blob storage. Następnie środowisko ASE można pobrać i wdrożyć.The ASE can then pick it up and deploy. Należy pamiętać o następujących ograniczeniach tego podejścia:Be aware of the following limitations of this approach:

  • Istnieje rozłączenie między DevOps i rzeczywistym procesem wdrażania, co prowadzi do problemów związanych z monitorowaniem i śledzeniem ewentualnych problemów z wdrażaniem.There is a disconnect between the DevOps and the actual deployment process, leading to difficulties in monitoring and tracing any deployment issues.
  • W zablokowanym środowisku z zabezpieczonym ruchem może zajść konieczność zmiany reguł w celu uzyskania dostępu do pliku spakowanego w magazynie.In a locked down environment with secured traffic, you may need to change the rules to access the zipped file on the storage.
  • Aby móc wdrażać dane z pliku zip, należy zainstalować określone rozszerzenia i narzędzia w środowisku ASE.You will need to install specific extensions and tools on the ASE to be able to deploy from the zip.

Aby dowiedzieć się więcej na temat innych sposobów wdrażania aplikacji w planach App Service, Przeczytaj artykuł App Service koncentrując się na strategiach wdrażania.To know some more ways the apps can be deployed to the App Service plans, read the App Service articles focusing on deployment strategies.

Kwestie związane z kosztamiCost considerations

Koszty możesz szacować za pomocą kalkulatora cen platformy Azure.Use the Azure pricing calculator to estimate costs. Inne zagadnienia są opisane w sekcji koszt w Microsoft Azure Well-Architected Framework.Other considerations are described in the Cost section in Microsoft Azure Well-Architected Framework. Rezerwacje platformy Azure pomagają zaoszczędzić pieniądze dzięki rocznym lub 3-letnim planom dla wielu zasobów platformy Azure.Azure Reservations help you save money by committing to one-year or three-years plans for many Azure resources. Zapoznaj się z artykułem kupowanie rezerwacji.Read more in the article Buy a reservation.

Oto kilka kwestii, które należy wziąć pod uwagę w przypadku niektórych kluczowych usług używanych w tej architekturze.Here are some points to consider for some of the key services used in this architecture.

Środowisko usługi App ServiceApp Service Environment

Dostępne są różne Opcje cenowe dla App Service.There are various pricing options available for App Service. Środowisko App Service jest wdrażane przy użyciu odizolowanego planu usługi.An App Service environment is deployed using the Isolated Service Plan. W ramach tego planu dostępne są trzy opcje rozmiarów procesora CPU — I1, I2 i i3.Within this plan, there are three options for CPU sizes - I1, I2, and I3. Ta implementacja referencyjna korzysta z trzech I1's na wystąpienie.This reference implementation is using three I1's per instance.

Application GatewayApplication Gateway

Cennik Application Gateway oferuje różne opcje cenowe dla usługi App Gateway.Application Gateway pricing provides various pricing options for App Gateway. Korzystamy z Application Gateway Standard_v2 i WAF_v2 jednostki SKU , która obsługuje automatyczne skalowanie i nadmiarowość stref.We are using the Application Gateway Standard_v2 and WAF_v2 SKU , that supports auto scaling and zone redundancy. Przeczytaj ten artykuł , aby dowiedzieć się więcej o modelu cen używanym dla tej jednostki SKU.Read this article to know more about the pricing model used for this SKU.

Azure Cache for RedisAzure Cache for Redis

Usługa Azure cache for Redis oferuje różne opcje cenowe dla tej usługi.Azure Cache for Redis pricing provides the various pricing options for this service. Ta architektura używa jednostki SKU Premium do obsługi sieci wirtualnej.This architecture uses the Premium SKU , for the virtual network support.

Poniżej znajdują się strony cenowe dla innych usług służących do blokowania środowiska ASE:The following are pricing pages for other services used to lock down the ASE:

Wdrażanie rozwiązaniaDeploy the solution

Aby wdrożyć implementację referencyjną dla tej architektury, zobacz plik Readme usługi GitHubi postępuj zgodnie ze skryptami dotyczącymi standardowego wdrożenia .To deploy the reference implementation for this architecture, see the GitHub readme, and follow the script for standard deployment .

Następne krokiNext steps

Aby dowiedzieć się, jak wdrożyć tę architekturę w celu obsługi wysokiej dostępności, zapoznaj się z artykułem wdrażanie aplikacji o wysokiej dostępności przy użyciu środowiska App Services.To learn how to extend this architecture to support high availability, read High availability app deployment using App Services Environment.