Ćwiczenie — Ograniczanie dostępu sieciowego

Ukończone

Użytkownicy łączą się z serwerem aplikacji, aby wprowadzać zamówienia, aktualizować swoje konto i wykonywać podobne działania. Serwer aplikacji z kolei aktualizuje bazę danych za pomocą tych zmian. Ze względu na to, że użytkownicy mają dane osobowe przechowywane w bazie danych, niezwykle ważne jest zapewnienie, że zezwalasz na dostęp tylko z zaufanych i niezbędnych zasobów. Istnieje kilka sposobów kontrolowania dostępu do bazy danych SQL w sieci.

Reguły zapory

Usługa Azure SQL Database ma wbudowaną zaporę umożliwiającą i odmawiającą dostępu sieciowego zarówno do samego serwera bazy danych, jak i poszczególnych baz danych. Początkowo zapora usługi SQL Database blokuje cały publiczny dostęp do usługi Azure SQL Database. W celu uzyskania dostępu do serwera bazy danych należy określić co najmniej jedną regułę zapory bazującą na adresach IP na poziomie serwera, która umożliwia dostęp do usługi Azure SQL Database. Użyj reguł zapory bazujących na adresach IP, aby określić zakres dozwolonych adresów IP pochodzących z Internetu oraz możliwość podejmowania przez aplikacje platformy Azure prób połączenia się z usługą Azure SQL Database.

Reguły zapory są konfigurowane na poziomie serwera lub bazy danych. Reguły określają, które zasoby sieciowe mogą nawiązać połączenie z bazą danych. W zależności od poziomu reguły, które można zastosować, są następujące:

  • Reguły zapory na poziomie serwera
    • Zezwalanie na dostęp usługom platformy Azure
    • Reguły adresów IP
    • Reguły sieci wirtualnej
  • Reguły zapory na poziomie bazy danych
    • Reguły adresów IP

Uwaga

Usługa SQL Data Warehouse obsługuje tylko reguły zapory bazujące na adresach IP na poziomie serwera, a nie reguły zapory bazujące na adresach IP na poziomie bazy danych.

Przyjrzyj się bliżej sposobom działania tych reguł.

Reguły zapory na poziomie serwera

Te reguły umożliwiają klientom dostęp do całego serwera Azure SQL, to znaczy do wszystkich baz danych na tym samym serwerze logicznym. Istnieją trzy typy reguł, które można zastosować na poziomie serwera.

Reguła Zezwalaj na dostęp do usług platformy Azure służy do zezwalania usługom platformy Azure na nawiązywanie połączenia z usługą Azure SQL Database. Po włączeniu to ustawienie umożliwia komunikację ze wszystkich publicznych adresów IP platformy Azure. Ta komunikacja obejmuje wszystkie usługi Azure Platform as a Service (PaaS), takie jak aplikacja systemu Azure Service i Azure Container Service oraz maszyny wirtualne platformy Azure, które mają wychodzący dostęp do Internetu. Tę regułę można skonfigurować za pomocą opcji WŁĄCZONE/WYŁĄCZONE w okienku zapory w portalu lub za pomocą reguły adresów IP, dla której początkowy i końcowy adres IP ustawiono na 0.0.0.0.

Diagram shows how to allow access to Azure services network.

Ta reguła jest używana, gdy masz aplikacje uruchamiane w usługach PaaS na platformie Azure, takich jak Azure Logic Apps lub Azure Functions, które muszą uzyskiwać dostęp do usługi Azure SQL Database. Wiele z tych usług nie ma statycznego adresu IP, więc ta reguła gwarantuje, że będą mogli nawiązać połączenie z bazą danych.

Ważne

Ta opcja konfiguruje zaporę w celu zezwalania na wszystkie połączenia z platformy Azure, w tym połączenia z subskrypcji innych klientów. Podczas wybierania tej opcji upewnij się, że logowanie i uprawnienia użytkownika ograniczają dostęp tylko do autoryzowanych użytkowników.

Reguły adresów IP to reguły, które są oparte na określonych zakresach publicznych adresów IP. Adresy IP, które łączą się z dozwolonym publicznym zakresem adresów IP, mogą łączyć się z bazą danych.

Diagram represents an IP address rule.

Te reguły można użyć, gdy masz statyczny publiczny adres IP, który musi uzyskać dostęp do bazy danych.

Reguły sieci wirtualnej umożliwiają jawne zezwalanie na połączenie z określonych podsieci w co najmniej jednej sieci wirtualnej platformy Azure. Reguły sieci wirtualnej mogą zapewnić większą kontrolę dostępu do baz danych i mogą być preferowaną opcją. Ponieważ przestrzenie adresowe sieci wirtualnej platformy Azure są prywatne, można skutecznie wyeliminować narażenie na publiczne adresy IP i zabezpieczyć łączność z tymi adresami, które kontrolujesz.

Diagram represents a virtual network rule.

Użyj reguł sieci wirtualnej, jeśli masz maszyny wirtualne platformy Azure, które muszą uzyskiwać dostęp do bazy danych.

W przypadku reguł na poziomie serwera można tworzyć i manipulować wszystkimi tymi regułami za pośrednictwem portalu, programu PowerShell, interfejsu wiersza polecenia i języka Transact-SQL (T-SQL).

Reguły zapory na poziomie bazy danych

Te reguły zezwalają na dostęp do pojedynczej bazy danych na serwerze logicznym i są przechowywane w samej bazie danych. W przypadku reguł na poziomie bazy danych można skonfigurować tylko reguły adresów IP. Działają one w taki sam sposób, jak w przypadku stosowania na poziomie serwera, ale ich zakres jest ograniczony tylko do bazy danych.

Diagram represents a database IP address network rule.

Korzyścią wynikającą z używania zasad na poziomie bazy danych jest ich przenośność. Podczas replikacji bazy danych na inny serwer reguły na poziomie bazy danych są replikowane, ponieważ są przechowywane w samej bazie danych.

Wadą reguł na poziomie bazy danych jest to, że można używać tylko reguł adresów IP. Te reguły mogą ograniczyć elastyczność i zwiększyć nakład pracy administracyjnej.

Reguły zapory na poziomie bazy danych można tworzyć i manipulować tylko za pomocą języka T-SQL.

Ograniczanie dostępu do sieci w praktyce

Najlepszym rozwiązaniem jest użycie reguł zapory adresów IP na poziomie bazy danych w celu zwiększenia zabezpieczeń i zwiększenia przenośni bazy danych. Użyj reguł zapory adresów IP na poziomie serwera dla administratorów i jeśli masz kilka baz danych z tymi samymi wymaganiami dostępu, aby nie poświęcać czasu na indywidualne konfigurowanie każdej bazy danych.

Przyjrzyj się, jak działają te reguły w praktyce i jak można zabezpieczyć dostęp sieciowy, aby zezwolić tylko na to, co jest konieczne. Pamiętaj, że utworzono serwer logiczny usługi Azure SQL Database, bazę danych i maszynę wirtualną z systemem Linux appServer , która działa jako serwer aplikacji. Ten scenariusz często ma miejsce, gdy baza danych została zmigrowana do usługi Azure SQL Database, a zasoby w sieci wirtualnej muszą uzyskiwać do niej dostęp. Funkcja zapory usługi Azure SQL Database może być używana w wielu scenariuszach, ale ten przykład ma praktyczne zastosowanie i pokazuje, jak działa każda z reguł.

Zapoznaj się z ustawieniami zapory i zobacz, jak działają. W tych ćwiczeniach użyjesz zarówno portalu, jak i usługi Cloud Shell.

Utworzona baza danych nie zezwala obecnie na dostęp z żadnych połączeń. Ten ograniczony dostęp jest projektowany i oparty na poleceniach, które uruchomiono w celu utworzenia serwera logicznego i bazy danych. Upewnij się, że nie ma dostępu.

  1. W usłudze Cloud Shell połączenie SSH z maszyną wirtualną z systemem Linux, jeśli jeszcze nie nawiązano połączenia. Zastąp nnn.nnn.nnn.nnn wartość wartością z publicIpAddress poprzedniej lekcji.

    ssh nnn.nnn.nnn.nnn
    
  2. sqlcmd Uruchom ponownie pobrane wcześniej polecenie, aby spróbować nawiązać połączenie z bazą danych. Pamiętaj o zastąpieniu wartości [username] i [password] poświadczeniami użytkownika ADMINUSER określonymi w poprzedniej lekcji. Pamiętaj, aby zachować pojedyncze cudzysłowy wokół nazwy użytkownika i hasła, aby powłoka nie interpretowała żadnych znaków specjalnych.

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

    Podczas próby nawiązania połączenia powinien zostać wyświetlony błąd podobny do następujących danych wyjściowych. Te dane wyjściowe są oczekiwane, ponieważ dostęp do bazy danych nie jest dozwolony.

    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.
    

Udziel dostępu, aby można było nawiązać połączenie.

Używanie reguły na poziomie serwera zezwalającej na dostęp do usług platformy Azure

Ponieważ maszyna wirtualna ma wychodzący dostęp do Internetu, możesz użyć reguły Zezwalaj na dostęp do usług platformy Azure, aby zezwolić na dostęp z maszyny wirtualnej.

  1. Zaloguj się do witryny Azure Portal przy użyciu tego samego konta, za pomocą którego aktywowano piaskownicę.

  2. W polu Szukaj zasobów, usług i dokumentów u góry wyszukaj nazwę serwera bazy danych: serverNNNNN. Wybierz serwer SQL.

  3. W okienku SQL Server w okienku menu po lewej stronie w obszarze Zabezpieczenia wybierz pozycję Sieć.

  4. Przewiń w dół do pozycji Wyjątki, zaznacz pole wyboru Zezwalaj usługom i zasobom platformy Azure na dostęp do tego serwera, a następnie wybierz pozycję Zapisz. Poczekaj, aż system potwierdzi tę zmianę.

  5. Wróć do sesji SSH, spróbuj ponownie nawiązać połączenie z bazą danych.

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

    W tym momencie nawiązanie połączenia powinno zakończyć się pomyślnie. Jeśli tak się stanie, powinien zostać wyświetlony wiersz polecenia narzędzia sqlcmd.

    1>
    

Otwarto łączność, ale to ustawienie obecnie zezwala na dostęp z dowolnego zasobu platformy Azure, w tym zasobów spoza subskrypcji. Ogranicz ten dostęp dalej, aby ograniczyć dostęp sieciowy tylko do zasobów, które znajdują się w twojej kontroli.

Używanie reguły adresów IP na poziomie bazy danych

Pewnie pamiętasz, że reguły adresów IP na poziomie bazy danych zezwalają na dostęp tylko do pojedynczej bazy danych na serwerze logicznym. Użyj jednego z tych elementów, aby udzielić dostępu do statycznego adresu IP maszyny wirtualnej appServer .

Aby utworzyć regułę adresu IP na poziomie bazy danych, należy uruchomić kilka poleceń języka T-SQL. Utwórz regułę bazy danych przy użyciu następującej konwencji, w której przekazujesz nazwę reguły, początkowy adres IP i końcowy adres IP. Określając początkowe i końcowe adresy IP, które mają być takie same, należy ograniczyć dostęp do pojedynczego adresu IP. Zakres można rozszerzyć, jeśli masz większy blok adresów wymagających dostępu.

EXECUTE sp_set_database_firewall_rule N'My Firewall Rule', '40.112.128.214', '40.112.128.214'
  1. W wierszu polecenia sqlcmd uruchom następujące polecenie. Zastąp publiczny adres IP maszyny wirtualnej appServer w obu lokalizacjach.

    Napiwek

    Po uruchomieniu poleceń języka T-SQL, takich jak poniżej, w GO drugim wierszu może nie zostać skopiowany do sqlcmd wiersza polecenia. Może być konieczne wpisenie tej części. Polecenie T-SQL nie zostanie uruchomione bez niego, dlatego upewnij się, że uruchom polecenie GO .

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

    Po zakończeniu polecenia wprowadź polecenie exit , aby zamknąć narzędzie sqlcmd. Zachowaj połączenie za pośrednictwem protokołu SSH.

  2. W witrynie Azure Portal w okienku Sieć dla serwera SQL usuń zaznaczenie pozycji Zezwalaj usługom i zasobom platformy Azure na dostęp do tego serwera, a następnie wybierz pozycję Zapisz. Ta zmiana wyłącza dostęp ze wszystkich usług platformy Azure, ale można nawiązać połączenie, ponieważ masz regułę adresu IP na poziomie bazy danych dla serwera.

  3. Po powrocie do usługi Cloud Shell na maszynie wirtualnej, z którą nawiązano połączenie za pośrednictwem protokołu SSH, spróbuj ponownie nawiązać połączenie z bazą danych.

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

    W tym momencie nawiązanie połączenia powinno zakończyć się pomyślnie. Jeśli to się powiedzie, zostanie wyświetlony monit sqlcmd.

    1>
    

Użycie reguły na poziomie bazy danych umożliwia izolowanie dostępu konkretnie do bazy danych. Ta reguła może być przydatna, jeśli chcesz zachować skonfigurowany dostęp sieciowy na bazę danych. Jeśli wiele baz danych korzysta z tego samego poziomu dostępu do sieci, możesz uprościć czynności administracyjne, korzystając z reguły na poziomie serwera w celu zastosowania takiego samego dostępu do wszystkich baz danych na serwerze.

Używanie reguły adresów IP na poziomie serwera

Reguły na poziomie bazy danych są doskonałym rozwiązaniem, ale co zrobić, jeśli masz wiele baz danych na tym samym serwerze, z którym maszyna wirtualna appServer musi nawiązać połączenie? Możesz dodać regułę na poziomie bazy danych do każdej bazy danych, ale może to zająć więcej pracy podczas dodawania większej liczby baz danych. Aby zmniejszyć nakłady pracy administracyjnej, zezwól na dostęp przy użyciu reguły na poziomie serwera, która będzie stosowana do wszystkich baz danych na serwerze.

Użyj reguły adresów IP na poziomie serwera, aby ograniczyć systemy, które mogą się łączyć.

  1. Będąc nadal w wierszu polecenia narzędzia sqlcmd, uruchom następujące polecenie, aby usunąć regułę adresu IP na poziomie bazy danych.

    EXECUTE sp_delete_database_firewall_rule N'My Firewall Rule';
    GO
    

    Po zakończeniu polecenia wprowadź polecenie exit , aby zamknąć narzędzie sqlcmd. Zachowaj połączenie za pośrednictwem protokołu SSH.

  2. W witrynie Azure Portal w okienku Sieć dla serwera SQL w obszarze Reguły zapory wybierz pozycję Dodaj regułę zapory. Nadaj regule nazwę Zezwalaj na serwer appServer, wprowadź publiczny adres IP maszyny wirtualnej appServer dla początkowego adresu IP i końcowego adresu IP, a następnie wybierz przycisk OK.

  3. Wybierz pozycję Zapisz.

    Screenshot of the Azure portal showing the server firewall rule creation.

  4. Ponownie w usłudze Cloud Shell na maszynie wirtualnej appServer spróbuj ponownie nawiązać połączenie z bazą danych.

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

    W tym momencie nawiązanie połączenia powinno zakończyć się pomyślnie. Reguła na poziomie serwera zezwala na dostęp na podstawie publicznego adresu IP maszyny wirtualnej appServer . Jeśli tak się stanie, powinien zostać wyświetlony wiersz polecenia narzędzia sqlcmd.

    1>
    

    Wprowadź polecenie exit , aby zamknąć polecenie sqlcmd. Zachowaj połączenie za pośrednictwem protokołu SSH.

Izolowana łączność tylko z adresem IP określonym w regule. Ta izolacja działa świetnie, ale nadal może stanowić wyzwanie administracyjne w miarę dodawania kolejnych systemów, które muszą się łączyć. Wymaga również statycznego adresu IP lub adresu IP ze zdefiniowanego zakresu adresów IP.

Jeśli adres IP jest dynamiczny i zmienia się, musisz zaktualizować regułę, aby zapewnić łączność. Maszyna wirtualna appServer jest obecnie skonfigurowana przy użyciu dynamicznego adresu IP. Ten adres IP prawdopodobnie zmieni się w pewnym momencie, co spowoduje przerwanie dostępu tak szybko, jak to się stanie. Teraz sprawdź, jak reguły sieci wirtualnej mogą być korzystne w konfiguracji.

Używanie reguły sieci wirtualnej na poziomie serwera

W takim przypadku, ponieważ maszyna wirtualna jest uruchomiona na platformie Azure, możesz użyć reguły sieci wirtualnej na poziomie serwera, aby odizolować dostęp i umożliwić przyszłym usługom uzyskiwanie dostępu do bazy danych.

  1. Wróć do witryny Azure Portal i nadal w okienku Sieć w obszarze Sieci wirtualne wybierz pozycję Dodaj regułę sieci wirtualnej.

  2. Zostanie wyświetlone okno dialogowe Tworzenie/aktualizowanie reguły sieci wirtualnej. Ustaw następujące wartości.

    Ustawienie Wartość
    Nazwa/nazwisko Pozostaw wartość domyślną
    Subskrypcja Subskrypcja Concierge
    Sieć wirtualna appServerVNET
    Nazwa podsieci/prefiks adresu appServerSubnet / 10.0.0.0/24
  3. Wybierz pozycję Włącz , aby włączyć punkt końcowy usługi w podsieci, a następnie wybierz przycisk OK po włączeniu punktu końcowego, aby utworzyć regułę.

  4. Usuń regułę adresu IP. Wybierz pozycję ... obok reguły Zezwalaj na serwer aplikacji, wybierz pozycję Usuń, a następnie wybierz pozycję Zapisz.

  5. Ponownie w usłudze Cloud Shell na maszynie wirtualnej appServer spróbuj ponownie nawiązać połączenie z bazą danych.

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

    W tym momencie nawiązanie połączenia powinno zakończyć się pomyślnie. Jeśli to się powiedzie, zostanie wyświetlony monit sqlcmd.

    1>
    

To, co zrobiliśmy tutaj, skutecznie usuwa wszelkie publiczne prawa dostępu do serwera SQL. Zezwala na dostęp tylko z określonej podsieci w zdefiniowanej sieci wirtualnej platformy Azure. Jeśli dodasz więcej serwerów aplikacji w tej podsieci, żadna dodatkowa konfiguracja nie jest konieczna. Każdy serwer w tej podsieci będzie miał możliwość nawiązania połączenia z serwerem SQL.

Ta konfiguracja ogranicza narażenie na usługi poza zakresem kontroli i ułatwia administrowanie w przypadku dodawania większej liczby serwerów. Ta metoda jest skuteczna w celu zabezpieczenia dostępu sieciowego do usługi Azure SQL Database.