webentwicklung-frage-antwort-db.com.de

Wie sichere ich den Zugriff von App Service auf Azure SQL-Datenbank mithilfe eines virtuellen Netzwerks?

Szenario

Ich möchte ein virtuelles Netzwerk verwenden, um den Zugriff auf Azure-Datenbank nur von meinem App-Dienst aus zu beschränken, damit ich in den Firewall-Einstellungen die Option "Zugriff auf App-Dienste zulassen" deaktivieren kann

 Allow access to App Services screenshot

Was habe ich getan:

  1. Ich ging zu App Service -> Netzwerk -> VNET-Integration -> Setup -> Neues virtuelles Netzwerk erstellen
  2. Ich habe ein neues VNET mit Standardeinstellungen erstellt.
  3. Als VNET erstellt wurde, ging ich zu App Service -> Networking -> VNET Integration und stellte sicher, dass das VNET verbunden ist
  4. Ich ging zu SQL Firewall Einstellungen -> Virtuelles Netzwerk -> Vorhandenen virtuellen Newtork hinzufügen und wählte mein VNET aus. Ich habe das Standard-Subnetz und den Standard-Adressraum "default/10.0.0.0/24" belassen und das IgnoreMissingServiceEndpoint-Flag deaktiviert.

Ich kann jetzt den Microsoft.Sql-Dienstendpunkt in meinem VNET sehen:  enter image description here

Frage

Ich bekomme jedoch immer noch

SqlException: Der vom Login angeforderte Server 'my-sqlserver' kann nicht geöffnet werden. Client mit der IP-Adresse '52 .233 ..'darf nicht auf den Server zugreifen .:

Was vermisse ich?

6
Liero

Leider können Sie dieses Szenario vorerst nicht erreichen.

Warum:

  1. Wenn Sie die VNET-Integration mit Ihrer Web-App verwenden, kann Ihre Web-App mit dem VNET wie Web App <---> VNET kommunizieren.

  2. Wenn Sie eine SQL-Firewall verwenden, um Triffic von einem bestimmten VNet aus zuzulassen, kann der Datenverkehr aus dem VNET-Adressraum mit Ihrem SQL wie VNet <---> SQL server kommunizieren.

  3. Wenn alle Konfigurationen eingerichtet sind, sollte Ihr Szenario Web App <---> VNET <---> SQL server sein. Wichtig ist, dass der Datenverkehr von der Web-App nicht über das VNET zum SQL-Server geleitet werden kann, da die Web-App nicht im VNET ist, sondern außerhalb des VNET! Wenn Sie mit Web App versuchen, auf den SQL-Server zuzugreifen, stammt der Triffic nicht aus dem VNET.

Lösung:

Die Lösung ist, dass Sie Ihre Web-App in das VNet einbinden. Sie können also Azure ASE verwenden, um dies zu erreichen.

Referenz:

VNet-Integration gibt Ihrer Webanwendung Zugriff auf Ressourcen in Ihrem virtuellen Netzwerk, gewährt jedoch keinen privaten Zugriff auf Ihre Webanwendung aus dem virtuellen Netzwerk. Privater Site-Zugriff bezieht sich darauf, dass Ihre App nur über ein privates Netzwerk zugänglich ist, z. B. über ein virtuelles Azure-Netzwerk. Der Zugriff auf eine private Site ist nur mit einer ASE möglich, die mit einem Internal Load Balancer (ILB) konfiguriert ist. Einzelheiten zur Verwendung einer ILB-ASE finden Sie im folgenden Artikel: Erstellen und Verwenden einer ILB-ASE .

Ähnliches Beispiel: Integration von App Service VNet mit Azure Storage Service Enpoint

1

Eine Option, die Sie in Betracht ziehen sollten, um die Firewall-Einstellung "Zugriff auf App Services erlauben" zu entfernen, ist Hinzufügen von Firewall-Regeln für die ausgehenden IP-Adressen Ihrer spezifischen App Services .

Sie finden die aktuelle Liste im Abschnitt "Eigenschaften" des App-Dienstes oder mit PowerShell ...

$outboundIps = (Get-AzureRmResource -ResourceGroupName $rg -ResourceType Microsoft.Web/sites -ResourceName $appService).Properties.outboundIpAddresses

Ein paar wichtige Vorbehalte.

  1. Die ausgehenden IP-Adressen können sich ändern, dies ist jedoch vorhersehbar (siehe Link unten). Ich führe PowerShell-Skripts als Teil eines VSTS-Veröffentlichungsprozesses aus, der die Firewall-Regeln aktualisiert. (Wenn Sie Ihre Ressourcen und ihre Größe auch über Ihren Veröffentlichungsprozess verwalten und nicht über das Azure-Portal, scheint dieser Ansatz zuverlässig zu sein.)

  2. Ich konnte keine Informationen finden, die bestätigen, ob diese IP-Adressen für Ihren App Service eindeutig sind. Dies ist ein zu berücksichtigendes Risiko.

https://docs.Microsoft.com/en-us/Azure/app-service/app-service-ip-addresses

2
Steve S