Övning – Begränsa nätverksåtkomst

Slutförd

Användare ansluter till appservern för att ange beställningar, uppdatera sitt konto och utföra liknande aktiviteter. Appservern uppdaterar i sin tur databasen med dessa ändringar. Eftersom användarna har personliga data lagrade i databasen är det viktigt att se till att du endast tillåter åtkomst från betrodda och nödvändiga resurser. Det finns flera sätt att styra åtkomsten till din SQL-databas via nätverket.

Brandväggsregler

Azure SQL Database har en inbyggd brandvägg som tillåter och nekar nätverksåtkomst till både själva databasservern och enskilda databaser. Till en början blockerar SQL Database-brandväggen all offentlig åtkomst till din Azure SQL Database. För att få åtkomst till en databasserver måste du ange en eller flera IP-brandväggar på servernivå som ger åtkomst till din Azure SQL Database. Du använder IP-brandväggsregler för att ange vilka IP-adressintervall från Internet som tillåts samt för att ange huruvida Azure-program kan försöka ansluta till din Azure SQL Database.

Brandväggsregler konfigureras på server- eller databasnivå. Reglerna anger specifikt vilka nätverksresurser som tillåts upprätta en anslutning till databasen. Beroende på nivå är de regler som du kan tillämpa följande:

  • Brandväggsregler på servernivå
    • Tillåt åtkomst till Azure-tjänster
    • IP-adressregler
    • Regler för virtuellt nätverk
  • Brandväggsregler på databasnivå
    • IP-adressregler

Kommentar

SQL Data Warehouse stöder endast IP-brandväggsregler på servernivå, inte IP-brandväggsregler på databasnivå.

Ta en närmare titt på hur dessa regler fungerar.

Brandväggsregler på servernivå

Dessa regler gör att klienterna kan komma åt hela Azure SQL-servern, det vill säga alla databaser som finns på samma logiska server. Det finns tre typer av regler som kan tillämpas på servernivå.

Regeln Tillåt åtkomst till Azure-tjänster tillåter att tjänster i Azure ansluter till din Azure SQL-databas. När den här inställningen är aktiverad tillåter den kommunikation från alla offentliga IP-adresser i Azure. Den här kommunikationen omfattar alla PaaS-tjänster (Azure Platform as a Service), till exempel Azure App Service och Azure Container Service och virtuella Azure-datorer som har utgående Internetåtkomst. Den här regeln kan konfigureras med alternativet PÅ/AV i brandväggsfönstret i portalen eller genom en IP-adressregel som har 0.0.0.0 som start- och slutadress.

Diagram som visar hur du tillåter åtkomst till Azure-tjänstnätverket.

Den här regeln används när du har program som körs på PaaS-tjänster i Azure, till exempel Azure Logic Apps eller Azure Functions som behöver åtkomst till din Azure SQL Database. Många av dessa tjänster har ingen statisk IP-adress, så den här regeln säkerställer att de kan ansluta till databasen.

Viktigt!

Det här alternativet konfigurerar brandväggen så att alla anslutningar från Azure tillåts, inklusive anslutningar från prenumerationer för andra kunder. När du väljer det här alternativet kontrollerar du att dina inloggnings- och användarbehörigheter begränsar åtkomsten till endast behöriga användare.

IP-adressregler är regler som baseras på specifika intervall för offentliga IP-adresser. IP-adresser som ansluter från ett tillåtet offentligt IP-intervall tillåts ansluta till databasen.

Diagrammet representerar en IP-adressregel.

Du kan använda dessa regler när du har en statisk offentlig IP-adress som behöver åtkomst till databasen.

Med regler för virtuellt nätverk kan du uttryckligen tillåta anslutning från angivna undernät i ett eller flera virtuella Azure-nätverk. Regler för virtuella nätverk kan ge större åtkomstkontroll till dina databaser och kan vara ett föredraget alternativ. Eftersom virtuella Azure-nätverksadressutrymmen är privata kan du effektivt eliminera exponering för offentliga IP-adresser och säker anslutning till de adresser som du kontrollerar.

Diagrammet representerar en regel för virtuellt nätverk.

Använd regler för virtuellt nätverk när du har virtuella Azure-datorer som behöver åtkomst till din databas.

För regler på servernivå kan alla dessa regler skapas och manipuleras via portalen, PowerShell, CLI och via Transact-SQL (T-SQL).

Brandväggsregler på databasnivå

Dessa regler tillåter åtkomst till en enskild databas på en logisk server och lagras i själva databasen. För regler på databasnivå kan du bara konfigurera IP-adressregler. De fungerar på samma sätt som när de tillämpas på servernivå men begränsas till bara databasen.

Diagrammet representerar en nätverksregel för databasens IP-adress.

Fördelarna med regler på databasnivå är deras portabilitet. När du replikerar en databas till en annan server replikeras reglerna på databasnivå eftersom de lagras i själva databasen.

Nackdelen med regler på databasnivå är att du bara kan använda IP-adressregler. De här reglerna kan begränsa den flexibilitet du har och kan öka de administrativa kostnaderna.

Brandväggsregler på databasnivå kan endast skapas och manipuleras via T-SQL.

Begränsa nätverksåtkomst i praktiken

Vi rekommenderar att du använder IP-brandväggsregler på databasnivå för att förbättra säkerheten och göra databasen mer portabel. Använd IP-brandväggsregler på servernivå för administratörer och när du har flera databaser med samma åtkomstkrav så att du inte vill ägna tid åt att konfigurera varje databas individuellt.

Ta en titt på hur dessa regler fungerar i praktiken och hur du kan skydda nätverksåtkomsten för att endast tillåta det som är nödvändigt. Kom ihåg att du har skapat en logisk Azure SQL Database-server, en databas och den virtuella Linux-datorn appServer som fungerar som en programserver. Det här scenariot finns ofta när en databas har migrerats till Azure SQL Database och resurser i ett virtuellt nätverk måste få åtkomst till den. Brandväggsfunktionen i Azure SQL Database kan användas i många scenarier, men det här exemplet har praktisk tillämplighet och visar hur var och en av reglerna fungerar.

Gå igenom brandväggsinställningarna och se hur de fungerar. Du använder både portalen och Cloud Shell för de här övningarna.

Databasen som du skapade tillåter för närvarande inte åtkomst från några anslutningar. Den här begränsade åtkomsten är avsiktligt och baseras på de kommandon som du körde för att skapa den logiska servern och databasen. Bekräfta att det inte finns någon åtkomst.

  1. I Cloud Shell, SSH till din virtuella Linux-dator om du inte redan är ansluten. Ersätt nnn.nnn.nnn.nnn med värdet från publicIpAddress i föregående enhet.

    ssh nnn.nnn.nnn.nnn
    
  2. Kör sqlcmd kommandot som du hämtade tidigare för att försöka ansluta till databasen igen. Ersätt [server-name] med namnet på servern. Ersätt [username] och [password] med de ADMINUSER autentiseringsuppgifter som du angav i föregående lektion. Behåll de enkla citattecknen runt användarnamnet och lösenordet så att gränssnittet inte feltolkar några specialtecken.

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

    Du bör se ett fel som liknar följande utdata när du försöker ansluta. Dessa utdata förväntas eftersom åtkomst till databasen inte tillåts.

    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.
    

Bevilja åtkomst så att du kan ansluta.

Använda regeln för att tillåta åtkomst till Azure-tjänster på servernivå

Eftersom den virtuella datorn har utgående Internetåtkomst kan du använda regeln Tillåt åtkomst till Azure-tjänster för att tillåta åtkomst från den virtuella datorn.

  1. Logga in på Azure-portalen med samma konto som du aktiverade sandbox-miljön med.

  2. I rutan Sök efter resurser, tjänster och dokument högst upp söker du efter databasservernamnet, server-name. Välj SQL-servern.

  3. I fönstret SQL-server går du till den vänstra menyrutan under Säkerhet och väljer Nätverk.

  4. Rulla ned till Undantag, markera kryssrutan för Tillåt Azure-tjänster och resurser att komma åt den här servern och välj sedan Spara. Vänta tills systemet bekräftar den här ändringen.

  5. Försök att ansluta till databasen igen i SSH-sessionen.

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

    Nu bör du kunna ansluta. Om det lyckas bör du se en sqlcmd-kommandotolk.

    1>
    

Du öppnade anslutningen, men den här inställningen tillåter för närvarande åtkomst från valfri Azure-resurs, inklusive resurser utanför din prenumeration. Begränsa den här åtkomsten ytterligare för att begränsa nätverksåtkomsten till endast resurser som finns inom din kontroll.

Använda en regel för IP-adresser på databasnivå

Kom ihåg att IP-adressregler på databasnivå bara tillåter åtkomst till en enskild databas på en logisk server. Använd en här för att bevilja åtkomst till den statiska IP-adressen för din virtuella appServer-dator .

Om du vill skapa en IP-regel på databasnivå måste du köra några T-SQL-kommandon. Skapa en databasregel med hjälp av följande konvention, där du skickar in regelnamnet, start-IP-adressen och den avslutande IP-adressen. Genom att ange att start- och slut-IP-adresserna ska vara desamma begränsar du åtkomsten till en enskild IP-adress. Du kan utöka intervallet om du har ett större adressblock som kräver åtkomst.

EXECUTE sp_set_database_firewall_rule N'My Firewall Rule', '40.112.128.214', '40.112.128.214'
  1. Kör följande kommando medan du fortfarande är i sqlcmd-kommandotolken. Ersätt den offentliga IP-adressen för din virtuella appServer-dator på båda platserna.

    Dricks

    När du kör T-SQL-kommandon, till exempel följande, GO kanske den andra raden inte kopieras till prompten sqlcmd . Du kan behöva skriva ut den här delen. T-SQL-kommandot körs inte utan det, så se till att köra GO kommandot.

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

    När kommandot har slutförts anger du exit för att avsluta sqlcmd. Förbli ansluten via SSH.

  2. I Azure-portalen går du till fönstret Nätverk för DIN SQL-server och avmarkerar Tillåt Att Azure-tjänster och resurser får åtkomst till den här servern och väljer sedan Spara. Den här ändringen inaktiverar åtkomst från alla Azure-tjänster, men du kan ansluta eftersom du har en IP-regel på databasnivå för servern.

  3. I Cloud Shell försöker du ansluta till databasen igen på den virtuella dator som du är ansluten till via SSH.

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

    Nu bör du kunna ansluta. Om det lyckas visas en sqlcmd-prompt.

    1>
    

Med en regel på databasnivå kan åtkomsten isoleras specifikt till databasen. Den här regeln kan vara användbar om du vill behålla nätverksåtkomsten konfigurerad per databas. Om flera databaser delar samma nivå av nätverksåtkomst kan du förenkla administrationen genom att använda en regel på servernivå för att tillämpa samma åtkomst till alla databaser på servern.

Använda en IP-adressregel på servernivå

Regler på databasnivå är ett bra alternativ, men vad händer om du har flera databaser på samma server som din virtuella appServer-dator måste ansluta till? Du kan lägga till en regel på databasnivå i varje databas, men det kan krävas mer arbete när du lägger till fler databaser. För att minska dina administrationsinsatser tillåter du åtkomst med en regel på servernivå, som skulle gälla för alla databaser på servern.

Använd en IP-regel på servernivå för att begränsa de system som kan ansluta.

  1. I sqlcmd-kommandotolken kör du följande kommando för att ta bort IP-adressregeln på databasnivå.

    EXECUTE sp_delete_database_firewall_rule N'My Firewall Rule';
    GO
    

    När kommandot har slutförts anger du exit för att avsluta sqlcmd. Förbli ansluten via SSH.

  2. I Azure-portalen går du till fönstret Nätverk för DIN SQL-server och under Brandväggsregler väljer du Lägg till en brandväggsregel. Namnge regeln Tillåt appServer, ange den offentliga IP-adressen för den virtuella datorn appServer för start-IP och slut-IP och välj sedan OK.

  3. Välj Spara.

    Skärmbild av Azure-portalen som visar hur serverns brandväggsregel skapas.

  4. Tillbaka i Cloud Shell, på din virtuella appServer-dator , försöker du ansluta till databasen igen.

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

    Nu bör du kunna ansluta. Regeln på servernivå tillåter åtkomst baserat på den offentliga IP-adressen för den virtuella datorn appServer . Om det lyckas bör du se en sqlcmd-kommandotolk.

    1>
    

    Ange exit för att avsluta sqlcmd. Förbli ansluten via SSH.

Du isolerade anslutningen till endast den IP-adress som du angav i regeln. Den här isoleringen fungerar bra, men kan fortfarande vara en administrativ utmaning när du lägger till fler system som behöver ansluta. Det kräver också en statisk IP-adress eller en IP-adress från ett definierat IP-adressintervall.

Om IP-adressen är dynamisk och ändras måste du uppdatera regeln för att säkerställa anslutningen. Den virtuella appServer-datorn är för närvarande konfigurerad med en dynamisk IP-adress. Den här IP-adressen kommer sannolikt att ändras någon gång, vilket bryter din åtkomst så snart det händer. Titta nu på hur regler för virtuella nätverk kan vara till nytta i din konfiguration.

Använd en regel för virtuellt nätverk på servernivå

I det här fallet, eftersom den virtuella datorn körs i Azure, kan du använda en regel för virtuellt nätverk på servernivå för att isolera åtkomsten och göra det enkelt att ge framtida tjänster åtkomst till databasen.

  1. Tillbaka i Azure-portalen och fortfarande i fönstret Nätverk under Virtuella nätverk väljer du Lägg till en regel för virtuellt nätverk.

  2. Dialogrutan Skapa/uppdatera regel för virtuellt nätverk visas. Ange följande värden.

    Inställning Värde
    Namn Låt standardvärdet vara kvar
    Abonnemang Concierge-prenumeration
    Virtuellt nätverk appServerVNET
    Undernätsnamn/adressprefix appServerSubnet/10.0.0.0/24
  3. Välj Aktivera för att aktivera tjänstslutpunkten i undernätet och välj sedan OK när slutpunkten har aktiverats för att skapa regeln.

  4. Ta bort IP-adressregeln. Välj ... bredvid regeln Tillåt appServer, välj Ta bort och välj sedan Spara.

  5. Tillbaka i Cloud Shell, på din virtuella appServer-dator , försöker du ansluta till databasen igen.

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

    Nu bör du kunna ansluta. Om det lyckas visas en sqlcmd-prompt.

    1>
    

Det du gjorde här tar effektivt bort all offentlig åtkomst till SQL-servern. Den tillåter endast åtkomst från det specifika undernätet i det virtuella Azure-nätverk som du har definierat. Om du lägger till fler appservrar i undernätet krävs ingen extra konfiguration. Alla servrar i det undernätet skulle kunna ansluta till SQL-servern.

Den här konfigurationen begränsar exponeringen för tjänster utanför din kontrollomfång och underlättar administrationen om du lägger till fler servrar. Den här metoden är effektiv för att skydda nätverksåtkomsten till en Azure SQL Database.