Übung: Einschränken des Netzwerkzugriffs

Abgeschlossen

Benutzer stellen eine Verbindung mit Ihrem App-Server her, um Bestellungen einzugeben, ihr Konto zu aktualisieren und ähnliche Aktivitäten auszuführen. Der App-Server aktualisiert die Datenbank wiederum mit diesen Änderungen. Da Benutzer personenbezogene Daten in der Datenbank speichern, ist es wichtig sicherzustellen, dass Sie nur vertrauenswürdigen und erforderlichen Ressourcen Zugriff erteilen. Es gibt verschiedene Möglichkeiten, den Zugriff auf Ihre SQL-Datenbank über das Netzwerk zu steuern.

Firewallregeln

Azure SQL-Datenbank verfügt über eine integrierte Firewall, über die Netzwerkzugriff auf den Datenbankserver selbst oder auf einzelne Datenbanken gewährt und verweigert werden kann. Anfänglich blockiert die Firewall der SQL-Datenbank jeglichen Zugriff auf Ihre Azure SQL-Datenbank. Damit Sie auf den Datenbankserver zugreifen können, müssen Sie mindestens eine IP-Firewallregel auf Serverebene angeben, die Zugriff auf Ihre Azure SQL Datenbank-Instanz ermöglichen. Geben Sie mit den IP-Firewallregeln an, welche IP-Adressbereiche aus dem Internet zulässig sind, und ob Azure-Anwendungen versuchen können, eine Verbindung mit Ihrer Azure SQL Datenbank-Instanz herzustellen.

Firewallregeln werden auf Server- oder Datenbankebene konfiguriert. Die Regeln geben genau an, welche Netzwerkressourcen eine Verbindung mit der Datenbank herstellen dürfen. Je nach Ebene können Sie die folgenden Regeln festlegen:

  • Firewallregeln auf Serverebene
    • Zugriff auf Azure-Dienste erlauben
    • IP-Adressregeln
    • Regeln für virtuelle Netzwerke
  • Firewallregeln auf Datenbankebene
    • IP-Adressregeln

Hinweis

SQL Data Warehouse unterstützt nur IP-Firewallregeln auf Serverebene und keine IP-Firewallregeln auf Datenbankebene.

Sehen Sie sich nun die Funktionsweise dieser Regeln genauer an.

Firewallregeln auf Serverebene

Diese Regeln ermöglichen es Clients, auf den gesamten Azure SQL-Datenbankserver zuzugreifen (also auf alle Datenbanken innerhalb eines logischen Servers). Es gibt drei Arten von Regeln, die auf Serverebene angewendet werden können.

Die Regel Zugriff auf Azure-Dienste erlauben lässt eine Verbindung zwischen Diensten in Azure und Ihrer Azure SQL-Datenbank-Instanz zu. Wenn diese Regel festgelegt ist, wird die Kommunikation mit allen öffentlichen Azure-IP-Adressen zugelassen. Diese Kommunikation schließt alle Azure-PaaS-Dienste (Platform-as-a-Service) wie Azure App Service und Azure Container Service sowie Azure-VMs mit ausgehendem Internetzugriff ein. Diese Regel kann über die Option ON/OFF (EIN/AUS) im Firewallbereich im Portal oder über eine IP-Regel konfiguriert werden, für die 0.0.0.0 als IP-Start- und -Endadresse angegeben ist.

Das Diagramm zeigt, wie der Zugriff auf das Azure-Dienstnetzwerk ermöglicht wird.

Diese Regel wird verwendet, wenn einige Ihrer Anwendungen in PaaS-Diensten in Azure ausgeführt werden, die auf Ihre Azure SQL-Datenbank-Instanz zugreifen müssen, wie z. B. Azure Logic Apps oder Azure Functions. Viele dieser Dienste umfassen keine statische IP-Adresse. Daher stellte diese Regel sicher, dass sie eine Verbindung mit der Datenbank herstellen können.

Wichtig

Diese Option konfiguriert die Firewall so, dass sie alle von Azure ausgehenden Verbindungen zulässt, auch Verbindungen von den Abonnements anderer Kunden. Wenn Sie diese Option auswählen, stellen Sie sicher, dass die Anmelde- und Benutzerberechtigungen den Zugriff auf autorisierte Benutzer beschränken.

IP-Adressregeln basieren auf bestimmten Bereichen öffentlicher IP-Adressen. IP-Adressen, die eine Verbindung von einem zulässigen öffentlichen IP-Adressbereich aus herstellen, dürfen eine Verbindung mit der Datenbank herstellen.

Diagramm stellt eine IP-Adressregel dar.

Sie können diese Regeln verwenden, wenn Sie eine statische, öffentliche IP-Adresse haben, die auf Ihre Datenbank zugreifen muss.

Mit VNET-Regeln können Sie Verbindungen von angegebenen Subnetzen in einem oder mehreren virtuellen Azure-Netzwerken explizit zulassen. VNET-Regeln ermöglichen eine umfangreichere Zugriffssteuerung für Ihre Datenbanken und können die bevorzugte Option sein. Da die Adressbereiche von virtuellen Netzwerken in Azure privat sind, können Sie die Offenlegung für öffentliche IP-Adressen vollständig eliminieren und die Verbindung zu den von Ihnen gesteuerten Adressen sichern.

Diagramm stellt eine virtuelle Netzwerkregel dar.

Verwenden Sie VNET-Regeln, wenn Sie über Azure-VMs verfügen, die auf Ihre Datenbank zugreifen müssen.

Bei Regeln auf Serverebene können alle Regeln über das Portal, PowerShell, die CLI und Transact-SQL (T-SQL) erstellt und angepasst werden.

Firewallregeln auf Datenbankebene

Diese Regeln lassen den Zugriff auf eine einzelne Datenbank auf einem logischen Server zu. Sie werden in der Datenbank selbst gespeichert. Für Regeln auf Datenbankebene können Sie nur IP-Adressregeln konfigurieren. Ihre Funktionsweise unterscheidet sich nicht von Regeln auf Serverebene. Der einzige Unterschied ist der Gültigkeitsbereich.

Diagramm stellt eine Datenbank-IP-Adressnetzwerkregel dar.

Einer der Vorteile von Regeln auf Datenbankebene ist deren Portabilität. Wenn Sie eine Datenbank auf einem anderen Server replizieren, werden auch die Regeln auf Datenbankebene repliziert, da sie in der Datenbank selbst gespeichert werden.

Ein Nachteil von Regeln auf Datenbankebene ist die Tatsache, dass nur IP-Adressregeln verwendet werden können. Diese Regeln können Ihre Flexibilität einschränken und den Verwaltungsaufwand erhöhen.

Firewallregeln auf Datenbankebene können nur über T-SQL erstellt und angepasst werden.

Einschränken des Netzwerkzugriffs in der Praxis

Es ist eine bewährte Methode, nach Möglichkeit IP-Firewallregeln auf Datenbankebene zu verwenden, um die Sicherheit und die Portabilität der Datenbank zu verbessern. Verwenden Sie IP-Firewallregeln auf Serverebene für Administratoren und wenn Sie über mehrere Datenbanken mit identischen Zugriffsanforderungen verfügen, damit Sie die Datenbanken nicht einzeln konfigurieren müssen.

Sehen Sie sich nun an, wie sich diese Regeln in der Praxis verhalten und wie Sie den Netzwerkzugriff absichern können, um nur dort Zugriff zuzulassen, wo er auch erforderlich ist. Sie haben bereits einen logischen Azure SQL-Datenbank-Server, eine Datenbank und die Linux-VM appServer erstellt, die als Anwendungsserver fungiert. Dieses Szenario tritt häufig auf, wenn eine Datenbank zu Azure SQL-Datenbank migriert wurde und Ressourcen auf einer VM darauf zugreifen müssen. Das Firewallfeature von Azure SQL-Datenbank kann in vielen Szenarien eingesetzt werden. Dieses Beispiel hat einen praktischen Anwendungsfall und veranschaulicht, wie die einzelnen Regeln funktionieren.

Sehen Sie sich nun die einzelnen Firewalleinstellungen und ihre Funktionsweise an. Sie verwenden für diese Übungen sowohl das Portal als auch Cloud Shell.

Die von Ihnen erstellte Datenbank unterbindet derzeit jeden Zugriff über jegliche Verbindungen. Dieser eingeschränkte Zugriff ist beabsichtigt und basiert auf den Befehlen, die Sie zum Erstellen des logischen Servers und der Datenbank ausgeführt haben. Vergewissern Sie sich, dass kein Zugriff möglich ist.

  1. Stellen Sie in Cloud Shell eine SSH-Verbindung mit Ihrer Linux-VM her, wenn Sie dies noch nicht getan haben. Ersetzen Sie nnn.nnn.nnn.nnn durch den Wert von publicIpAddress aus der vorherigen Lerneinheit.

    ssh nnn.nnn.nnn.nnn
    
  2. Führen Sie den zuvor abgerufenen Befehl sqlcmd erneut aus, um eine Verbindung mit der Datenbank herzustellen. Ersetzen Sie [server-name] durch den Namen Ihres Servers. Ersetzen Sie [username] und [password] durch die ADMINUSER-Anmeldeinformationen, die Sie in der vorherigen Lerneinheit angegeben haben. Behalten Sie die einfachen Anführungszeichen um den Benutzernamen und das Kennwort bei, damit Sonderzeichen von der Shell nicht falsch interpretiert werden.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    Beim Versuch, eine Verbindung herzustellen, sollte ein Fehler mit einer Ausgabe ähnlich der folgenden auftreten. Diese Ausgabe war zu erwarten, da kein Zugriff auf die Datenbank erlaubt ist.

    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.
    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Error code 0x2AF9.
    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible.Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
    

Gewähren Sie Zugriff, damit Sie eine Verbindung herstellen können.

Verwenden der Regel auf Serverebene zum Erlauben von Zugriff auf Azure-Dienste

Da Ihre VM ausgehenden Internetzugriff hat, können Sie mit der Regel Zugriff auf Azure-Dienste erlauben Zugriff von Ihrer VM aus erlauben.

  1. Melden Sie sich beim Azure-Portal mit dem Konto an, über das Sie die Sandbox aktiviert haben.

  2. Suchen Sie oben im Portal im Feld Ressourcen, Dienste und Dokumente durchsuchen nach dem Namen des Datenbankservers, server-name. Wählen Sie den SQL-Server aus.

  3. Wählen Sie im SQL-Serverbereich im Menü auf der linken Seite unter Sicherheit die Option Netzwerk aus.

  4. Scrollen Sie nach unten zu Ausnahmen, aktivieren Sie das Kontrollkästchen für Azure-Diensten und -Ressourcen den Zugriff auf diesen Server gestatten, und wählen Sie dann Speichern aus. Warten Sie, bis das System diese Änderung bestätigt.

  5. Kehren Sie zur SSH-Sitzung zurück und versuchen Sie erneut, eine Verbindung mit der Datenbank herzustellen.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    Jetzt sollten Sie eine Verbindung herstellen können. Wenn der Vorgang erfolgreich war, sollten Sie eine sqlcmd-Eingabeaufforderung sehen.

    1>
    

Sie haben jetzt eine Verbindung hergestellt, doch die Einstellung lässt aktuell den Zugriff von jeder Azure-Ressource aus zu, auch von Ressourcen außerhalb Ihres Abonnements. Schränken Sie diesen Zugang weiter ein, um den Netzwerkzugriff auf die Ressourcen zu beschränken, die Ihnen gehören.

Verwenden einer IP-Adressregel auf Datenbankebene

Wie bereits erwähnt lassen IP-Adressregeln auf Datenbankebene den Zugriff auf eine einzelne Datenbank auf einem logischen Server zu. Verwenden Sie eine Regel, um Zugriff auf die statische IP-Adresse Ihrer appServer-VM zu gewähren.

Zum Erstellen einer IP-Regel auf Datenbankebene müssen Sie einige T-SQL-Befehle ausführen. Erstellen Sie eine Datenbankregel mithilfe der folgenden Konvention, in der Sie den Namen der Regel, die IP-Startadresse und die IP-Endadresse übergeben. Indem Sie die identische IP-Startadresse und IP-Endadresse angeben, beschränken Sie den Zugriff auf eine einzelne IP. Sie können den Bereich erweitern, wenn Sie über einen größeren Adressblock verfügen, der Zugriff erfordert.

EXECUTE sp_set_database_firewall_rule N'My Firewall Rule', '40.112.128.214', '40.112.128.214'
  1. Führen Sie in der sqlcmd-Eingabeaufforderung den folgenden Befehl aus. Ersetzen Sie die öffentliche IP-Adresse Ihrer appServer-VM in beiden Speicherorten.

    Tipp

    Wenn Sie T-SQL-Befehle wie den folgenden ausführen, wird die GO in der zweiten Zeile möglicherweise nicht in die Eingabeaufforderung sqlcmd kopiert. Möglicherweise müssen Sie diesen Teil abtippen. Stellen Sie sicher, dass Sie den Befehl GO ausführen, da der T-SQL-Befehl ohne ihn nicht ausgeführt wird.

    EXECUTE sp_set_database_firewall_rule N'My Firewall Rule', '[From IP Address]', '[To IP Address]';
    GO
    

    Nachdem der Befehl ausgeführt wurde, geben Sie exit ein, um sqlcmd zu beenden. Bleiben Sie über SSH verbunden.

  2. Deaktivieren Sie im Azure-Portal im Bereich Netzwerk für Ihre SQL Server-Instanz die Option Azure-Diensten und -Ressourcen den Zugriff auf diesen Server gestatten und wählen Sie dann Speichern aus. Durch diese Änderung wird der Zugriff über alle Azure-Dienste verweigert. Sie können aber weiterhin eine Verbindung herstellen, weil Sie eine IP-Adressregel auf Datenbankebene für Ihren Server erstellt haben.

  3. Versuchen Sie in Cloud Shell erneut in der VM, mit der Sie über SSH verbunden sind, eine Verbindung mit Ihrer Datenbank herzustellen.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    Jetzt sollten Sie eine Verbindung herstellen können. Wenn der Vorgang erfolgreich war, wird eine sqlcmd-Eingabeaufforderung angezeigt.

    1>
    

Wenn Sie eine Regel auf Datenbankebene verwenden, kann der Zugriff explizit auf eine Datenbank beschränkt werden. Diese Regel kann sehr nützlich sein, wenn Sie den Netzwerkzugriff datenbankbasiert festlegen möchten. Wenn mehrere Datenbanken das gleiche Maß an Netzwerkzugriff haben sollen, können Sie den Verwaltungsaufwand senken, indem Sie eine Regel auf Serverebene anwenden, um den gleichen Zugriff für alle Datenbanken des Servers zu gewähren.

Verwenden einer IP-Adressregel auf Serverebene

Regeln auf Datenbankebene sind für viele Situationen die passende Option. Was aber, wenn Sie mehrere Datenbanken auf demselben Server haben, mit denen die appServer-VM eine Verbindung herstellen muss? Sie könnten jeder Datenbank eine Regel auf Datenbankebene hinzufügen, doch je mehr Datenbanken Sie hinzufügen, desto höher ist der Aufwand. Um den Verwaltungsaufwand zu minimieren, erlauben Sie den Zugriff über eine Regel auf Serverebene, die für alle Datenbanken des Servers gilt.

Verwenden Sie nun eine IP-Adressregel auf Serverebene, um die Systeme einzuschränken, die eine Verbindung herstellen dürfen.

  1. Führen Sie in der sqlcmd-Eingabeaufforderung den folgenden Befehl aus, um die IP-Adressregel auf Datenbankebene zu löschen.

    EXECUTE sp_delete_database_firewall_rule N'My Firewall Rule';
    GO
    

    Nachdem der Befehl ausgeführt wurde, geben Sie exit ein, um sqlcmd zu beenden. Bleiben Sie über SSH verbunden.

  2. Kehren Sie zum Azure-Portal zurück und wählen Sie im Bereich Netzwerk für Ihren SQL-Server unter Firewallregeln die Option Firewallregel hinzufügen aus. Nennen Sie die Regel appServer zulassen, geben Sie die öffentliche IP-Adresse der VM appServer als Start-IP-Adresse und End-IP-Adresse ein, und wählen Sie dann OK aus.

  3. Wählen Sie Speichern aus.

    Screenshot: Erstellen einer Serverfirewallregel im Azure-Portal

  4. Kehren Sie zu Cloud Shell zurück und versuchen Sie in Ihrer appServer-VM erneut eine Verbindung zu Ihrer Datenbank herzustellen.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    Jetzt sollten Sie eine Verbindung herstellen können. Die Regel auf Serverebene ermöglicht den Zugriff basierend auf der öffentlichen IP-Adresse der appServer-VM. Wenn der Vorgang erfolgreich war, sollten Sie eine sqlcmd-Eingabeaufforderung sehen.

    1>
    

    Geben Sie exit ein, um sqlcmd zu beenden. Bleiben Sie über SSH verbunden.

Sie haben den Zugriff auf die IP-Adresse eingeschränkt, die Sie in der Regel angegeben haben. Diese Isolation funktioniert einwandfrei, kann aber dennoch Mehraufwand bedeuten, wenn Sie neue Systeme hinzufügen, mit denen eine Verbindung hergestellt werden soll. Außerdem ist eine statische IP oder eine IP aus einem definierten IP-Adressbereich erforderlich.

Wenn die IP-Adresse dynamisch ist und sich ändert, müssen Sie die Regel aktualisieren, um die Verbindung sicherzustellen. Die appServer-VM ist derzeit mit einer dynamischen IP-Adresse konfiguriert. Diese IP-Adresse wird sich wahrscheinlich zu einem bestimmten Zeitpunkt ändern und ihren Zugriff unterbrechen, sobald dies geschieht. Sehen Sie sich an, inwiefern VNET-Regeln bei Ihrer Konfiguration von Vorteil sein können.

Verwenden einer Regel auf Serverebene für virtuelle Netzwerke

Da Ihre VM in Azure ausgeführt wird, können Sie in diesem Fall eine VNET-Regel auf Serverebene verwenden, um den Zugriff einzuschränken und es gleichzeitig zu ermöglichen, dass weitere Dienste in Zukunft auf einfache Weise Zugriff erhalten können.

  1. Kehren Sie zum Azure-Portal zurück und wählen Sie im Bereich Netzwerk unter Virtuelle Netzwerke die Option Virtuelles Netzwerk hinzufügen aus.

  2. Das Dialogfeld „Create/Update virtual network rule“ (Regel für virtuelles Netzwerk erstellen/aktualisieren) wird angezeigt. Legen Sie folgende Werte fest.

    Einstellung Wert
    Name Behalten Sie den Standardwert bei.
    Abonnement Concierge-Abonnement
    Virtuelles Netzwerk appServerVNET
    Subnetzname/Adresspräfix appServerSubnet/10.0.0.0/24
  3. Wählen Sie Aktivieren aus, um den Dienstendpunkt im Subnetz zu aktivieren. Nachdem der Endpunkt aktiviert wurde, wählen Sie OK aus, um die Regel zu erstellen.

  4. Entfernen Sie die IP-Adressregel. Wählen Sie neben Ihrer Regel appServer zulassen die ..., anschließend Löschen und dann Speichern aus.

  5. Kehren Sie zu Cloud Shell zurück und versuchen Sie in Ihrer appServer-VM erneut eine Verbindung zu Ihrer Datenbank herzustellen.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    Jetzt sollten Sie eine Verbindung herstellen können. Wenn der Vorgang erfolgreich war, wird eine sqlcmd-Eingabeaufforderung angezeigt.

    1>
    

Was Sie hier getan haben, entfernt effektiv alle öffentlichen Zugriffe auf den SQL-Server. Er ermöglicht nur den Zugriff über das spezifische Subnetz im virtuellen Netzwerk von Azure, das Sie definiert haben. Wenn Sie weitere App-Server in diesem Subnetz hinzufügen, ist keine zusätzliche Konfiguration erforderlich. Jeder Server in diesem Subnetz könnte eine Verbindung mit dem SQL-Server herstellen.

Diese Konfiguration schränkt Ihre Exposition gegenüber Diensten außerhalb Ihres Einflussbereichs ein und vereinfacht die Verwaltung, falls Sie weitere Server hinzufügen. Diese Methode ist wirkungsvoll, um den Netzwerkzugriff auf eine Azure SQL-Datenbank-Instanz abzusichern.