Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:Azure SQL Database
Regler för virtuellt nätverk är en brandväggssäkerhetsfunktion som styr om den logiska SQL-servern för din Azure SQL Database databaser, elastiska pooler eller databaser i Azure Synapse acceptera kommunikation som skickas från vissa undernät i virtuella nätverk.
Viktig
Den här artikeln gäller för Azure SQL Database, inklusive Azure Synapse (tidigare SQL DW). För enkelhetens skull gäller termen Azure SQL Database i den här artikeln för databaser som tillhör antingen Azure SQL Database eller Azure Synapse. Den här artikeln inte gäller för Azure SQL Managed Instance eftersom den inte har någon associerad tjänstslutpunkt.
Den här artikeln visar ett PowerShell-skript som utför följande åtgärder:
- Skapar en Microsoft Azure Virtual Service-slutpunkt i undernätet.
- Lägger till slutpunkten i din servers brandvägg för att skapa en virtuell nätverksregel .
Mer bakgrund finns i Virtual Service-slutpunkter för Azure SQL Database.
Tips
Om allt du behöver är att utvärdera eller lägga till den virtuella tjänstslutpunkten
Anteckning
Den här artikeln använder Azure Az PowerShell-modulen, som är den rekommenderade PowerShell-modulen för interaktion med Azure. Information om hur du kommer igång med Az PowerShell-modulen finns i Installera Azure PowerShell. Information om hur du migrerar till Az PowerShell-modulen finns i Migrera Azure PowerShell från AzureRM till Az.
Viktig
PowerShell-modulen Azure Resource Manager (AzureRM) blev föråldrad den 29 februari 2024. All framtida utveckling bör använda Az.Sql-modulen. Användare rekommenderas att migrera från AzureRM till Az PowerShell-modulen för att säkerställa fortsatt support och uppdateringar. AzureRM-modulen underhålls inte längre eller stöds inte längre. Argumenten för kommandona i Az PowerShell-modulen och i AzureRM-modulerna är i stort sätt identiska. Mer information om deras kompatibilitet finns i Introduktion till den nya Az PowerShell-modulen.
Större cmdletar
I den här artikeln betonas New-AzSqlServerVirtualNetworkRule cmdlet som lägger till undernätsslutpunkten i åtkomstkontrollistan (ACL) på servern, vilket skapar en regel.
I följande lista visas sekvensen med andra huvudsakliga cmdlets som du måste köra för att förbereda ditt anrop till New-AzSqlServerVirtualNetworkRule
. I den här artikeln sker dessa anrop i skript 3 "Regel för virtuellt nätverk":
- New-AzVirtualNetworkSubnetConfig: Skapar ett undernätsobjekt.
- New-AzVirtualNetwork: Skapar ditt virtuella nätverk, vilket ger det undernätet.
- Set-AzVirtualNetworkSubnetConfig: Tilldelar en virtuell tjänstslutpunkt till undernätet.
- Set-AzVirtualNetwork: Bevarar uppdateringar som gjorts i det virtuella nätverket.
-
New-AzSqlServerVirtualNetworkRule: När ditt undernät är en slutpunkt lägger du till undernätet som en regel för virtuellt nätverk i serverns ACL.
- Den här cmdleten Erbjuder parametern
-IgnoreMissingVNetServiceEndpoint
.
- Den här cmdleten Erbjuder parametern
Förutsättningar för att köra PowerShell
- Du kan redan logga in på Azure, till exempel via Azure-portalen.
- Du kan redan köra PowerShell-skript.
Anteckning
Kontrollera att tjänstslutpunkterna är aktiverade för det virtuella nätverk/undernät som du vill lägga till på servern, annars misslyckas skapande av brandväggsregeln för virtuella nätverk.
Ett skript indelat i fyra segment
Vårt PowerShell-demonstrationsskript är indelat i en sekvens med mindre skript. Divisionen underlättar inlärningen och ger flexibilitet. Skripten måste köras i sin angivna sekvens. Om du inte har tid att köra skripten nu visas våra faktiska testutdata efter skript 4.
Skript 1: Variabler
Det första PowerShell-skriptet tilldelar värden till variabler. De efterföljande skripten beror på dessa variabler.
Viktig
Innan du kör det här skriptet kan du redigera värdena om du vill. Om du till exempel redan har en resursgrupp kanske du vill redigera resursgruppens namn som det tilldelade värdet.
Ditt prenumerationsnamn ska redigeras i skriptet.
PowerShell-skript 1-källkod
######### Script 1 ########################################
## LOG into to your Azure account. ##
## (Needed only one time per powershell.exe session.) ##
###########################################################
$yesno = Read-Host 'Do you need to log into Azure (only one time per powershell.exe session)? [yes/no]'
if ('yes' -eq $yesno) { Connect-AzAccount }
###########################################################
## Assignments to variables used by the later scripts. ##
###########################################################
# You can edit these values, if necessary.
$SubscriptionName = 'yourSubscriptionName'
Select-AzSubscription -SubscriptionName $SubscriptionName
$ResourceGroupName = 'RG-YourNameHere'
$Region = 'westcentralus'
$VNetName = 'myVNet'
$SubnetName = 'mySubnet'
$VNetAddressPrefix = '10.1.0.0/16'
$SubnetAddressPrefix = '10.1.1.0/24'
$VNetRuleName = 'myFirstVNetRule-ForAcl'
$SqlDbServerName = 'mysqldbserver-forvnet'
$SqlDbAdminLoginName = 'ServerAdmin'
$SqlDbAdminLoginPassword = 'ChangeYourAdminPassword1'
$ServiceEndpointTypeName_SqlDb = 'Microsoft.Sql' # Official type name.
Write-Host 'Completed script 1, the "Variables".'
Skript 2: Förutsättningar
Det här skriptet förbereder för nästa skript, där slutpunktsåtgärden utförs. Det här skriptet skapar följande objekt i listan, men bara om de inte redan finns. Du kan hoppa över skript 2 om du är säker på att dessa objekt redan finns:
- Azure-resursgrupp
- Logisk SQL-server
PowerShell-skript 2-källkod
######### Script 2 ########################################
## Ensure your Resource Group already exists. ##
###########################################################
Write-Host "Check whether your Resource Group already exists."
$gottenResourceGroup = $null
$gottenResourceGroup = Get-AzResourceGroup -Name $ResourceGroupName -ErrorAction SilentlyContinue
if ($null -eq $gottenResourceGroup) {
Write-Host "Creating your missing Resource Group - $ResourceGroupName."
New-AzResourceGroup -Name $ResourceGroupName -Location $Region
} else {
Write-Host "Good, your Resource Group already exists - $ResourceGroupName."
}
$gottenResourceGroup = $null
###########################################################
## Ensure your server already exists. ##
###########################################################
Write-Host "Check whether your server already exists."
$sqlDbServer = $null
$azSqlParams = @{
ResourceGroupName = $ResourceGroupName
ServerName = $SqlDbServerName
ErrorAction = 'SilentlyContinue'
}
$sqlDbServer = Get-AzSqlServer @azSqlParams
if ($null -eq $sqlDbServer) {
Write-Host "Creating the missing server - $SqlDbServerName."
Write-Host "Gather the credentials necessary to next create a server."
$sqlAdministratorCredentials = [pscredential]::new($SqlDbAdminLoginName,(ConvertTo-SecureString -String $SqlDbAdminLoginPassword -AsPlainText -Force))
if ($null -eq $sqlAdministratorCredentials) {
Write-Host "ERROR, unable to create SQL administrator credentials. Now ending."
return
}
Write-Host "Create your server."
$sqlSrvParams = @{
ResourceGroupName = $ResourceGroupName
ServerName = $SqlDbServerName
Location = $Region
SqlAdministratorCredentials = $sqlAdministratorCredentials
}
New-AzSqlServer @sqlSrvParams
} else {
Write-Host "Good, your server already exists - $SqlDbServerName."
}
$sqlAdministratorCredentials = $null
$sqlDbServer = $null
Write-Host 'Completed script 2, the "Prerequisites".'
Skript 3: Skapa en slutpunkt och en regel
Det här skriptet skapar ett virtuellt nätverk med ett undernät. Sedan tilldelar skriptet Microsoft.Sql
slutpunktstyp till undernätet. Slutligen lägger skriptet till ditt undernät i åtkomstkontrollistan (ACL) och skapar därmed en regel.
PowerShell-skript 3-källkod
######### Script 3 ########################################
## Create your virtual network, and give it a subnet. ##
###########################################################
Write-Host "Define a subnet '$SubnetName', to be given soon to a virtual network."
$subnetParams = @{
Name = $SubnetName
AddressPrefix = $SubnetAddressPrefix
ServiceEndpoint = $ServiceEndpointTypeName_SqlDb
}
$subnet = New-AzVirtualNetworkSubnetConfig @subnetParams
Write-Host "Create a virtual network '$VNetName'.`nGive the subnet to the virtual network that we created."
$vnetParams = @{
Name = $VNetName
AddressPrefix = $VNetAddressPrefix
Subnet = $subnet
ResourceGroupName = $ResourceGroupName
Location = $Region
}
$vnet = New-AzVirtualNetwork @vnetParams
###########################################################
## Create a Virtual Service endpoint on the subnet. ##
###########################################################
Write-Host "Assign a Virtual Service endpoint 'Microsoft.Sql' to the subnet."
$vnetSubParams = @{
Name = $SubnetName
AddressPrefix = $SubnetAddressPrefix
VirtualNetwork = $vnet
ServiceEndpoint = $ServiceEndpointTypeName_SqlDb
}
$vnet = Set-AzVirtualNetworkSubnetConfig @vnetSubParams
Write-Host "Persist the updates made to the virtual network > subnet."
$vnet = Set-AzVirtualNetwork -VirtualNetwork $vnet
$vnet.Subnets[0].ServiceEndpoints # Display the first endpoint.
###########################################################
## Add the Virtual Service endpoint Id as a rule, ##
## into SQL Database ACLs. ##
###########################################################
Write-Host "Get the subnet object."
$vnet = Get-AzVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VNetName
$subnet = Get-AzVirtualNetworkSubnetConfig -Name $SubnetName -VirtualNetwork $vnet
Write-Host "Add the subnet .Id as a rule, into the ACLs for your server."
$ruleParams = @{
ResourceGroupName = $ResourceGroupName
ServerName = $SqlDbServerName
VirtualNetworkRuleName = $VNetRuleName
VirtualNetworkSubnetId = $subnet.Id
}
New-AzSqlServerVirtualNetworkRule @ruleParams
Write-Host "Verify that the rule is in the SQL Database ACL."
$rule2Params = @{
ResourceGroupName = $ResourceGroupName
ServerName = $SqlDbServerName
VirtualNetworkRuleName = $VNetRuleName
}
Get-AzSqlServerVirtualNetworkRule @rule2Params
Write-Host 'Completed script 3, the "Virtual-Network-Rule".'
Skript 4: Rensa
Det här sista skriptet tar bort de resurser som tidigare skript skapade för demonstrationen. Skriptet ber dock om bekräftelse innan det tar bort följande:
- Azure SQL-logisk server
- Azure-resursgrupp
Du kan köra skript 4 när som helst när skript 1 har slutförts.
PowerShell-skript 4-källkod
######### Script 4 ########################################
## Clean-up phase A: Unconditional deletes. ##
## ##
## 1. The test rule is deleted from SQL Database ACL. ##
## 2. The test endpoint is deleted from the subnet. ##
## 3. The test virtual network is deleted. ##
###########################################################
Write-Host "Delete the rule from the SQL Database ACL."
$removeParams = @{
ResourceGroupName = $ResourceGroupName
ServerName = $SqlDbServerName
VirtualNetworkRuleName = $VNetRuleName
ErrorAction = 'SilentlyContinue'
}
Remove-AzSqlServerVirtualNetworkRule @removeParams
Write-Host "Delete the endpoint from the subnet."
$vnet = Get-AzVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VNetName
Remove-AzVirtualNetworkSubnetConfig -Name $SubnetName -VirtualNetwork $vnet
Write-Host "Delete the virtual network (thus also deletes the subnet)."
$removeParams = @{
Name = $VNetName
ResourceGroupName = $ResourceGroupName
ErrorAction = 'SilentlyContinue'
}
Remove-AzVirtualNetwork @removeParams
###########################################################
## Clean-up phase B: Conditional deletes. ##
## ##
## These might have already existed, so user might ##
## want to keep. ##
## ##
## 1. Logical SQL server ##
## 2. Azure resource group ##
###########################################################
$yesno = Read-Host 'CAUTION !: Do you want to DELETE your server AND your resource group? [yes/no]'
if ('yes' -eq $yesno) {
Write-Host "Remove the server."
$removeParams = @{
ServerName = $SqlDbServerName
ResourceGroupName = $ResourceGroupName
ErrorAction = 'SilentlyContinue'
}
Remove-AzSqlServer @removeParams
Write-Host "Remove the Azure Resource Group."
Remove-AzResourceGroup -Name $ResourceGroupName -ErrorAction SilentlyContinue
} else {
Write-Host "Skipped over the DELETE of SQL Database and resource group."
}
Write-Host 'Completed script 4, the "Clean-Up".'
Kontrollera att ditt undernät är en slutpunkt
Du kan ha ett undernät som redan har tilldelats Microsoft.Sql
typnamn, vilket innebär att det redan är en virtuell tjänstslutpunkt. Du kan använda Azure-portalen för att skapa en regel för virtuellt nätverk från slutpunkten.
Eller så kan du vara osäker på om ditt undernät har Microsoft.Sql
typnamn. Du kan köra följande PowerShell-skript för att utföra dessa åtgärder:
- Kontrollera om ditt undernät har typenamnet
Microsoft.Sql
. - Du kan välja att tilldela typnamnet om det saknas.
- Skriptet ber dig att bekräftainnan det använder det saknade typnamnet.
Faser i skriptet
Här är faserna i PowerShell-skriptet:
- Logga in på ditt Azure-konto, som bara behövs en gång per PowerShell-session. Tilldela variabler.
- Sök efter ditt virtuella nätverk och leta sedan efter ditt undernät.
- Är ditt undernät taggat som
Microsoft.Sql
slutpunktsservertyp? - Lägg till en virtuell tjänstslutpunkt med typnamnet
Microsoft.Sql
i undernätet.
Viktig
Innan du kör det här skriptet måste du redigera de värden som tilldelats till $-variablerna, längst upp i skriptet.
Direct PowerShell-källkod
Det här PowerShell-skriptet uppdaterar ingenting, såvida du inte svarar ja om du uppmanas att bekräfta det. Skriptet kan lägga till typnamnet Microsoft.Sql
i undernätet. Men skriptet försöker bara lägga till om undernätet saknar typnamnet.
### 1. LOG into to your Azure account, needed only once per PS session. Assign variables.
$yesno = Read-Host 'Do you need to log into Azure (only one time per powershell.exe session)? [yes/no]'
if ('yes' -eq $yesno) { Connect-AzAccount }
# Assignments to variables used by the later scripts.
# You can EDIT these values, if necessary.
$SubscriptionName = 'yourSubscriptionName'
Select-AzSubscription -SubscriptionName "$SubscriptionName"
$ResourceGroupName = 'yourRGName'
$VNetName = 'yourVNetName'
$SubnetName = 'yourSubnetName'
$SubnetAddressPrefix = 'Obtain this value from the Azure portal.' # Looks roughly like: '10.0.0.0/24'
$ServiceEndpointTypeName_SqlDb = 'Microsoft.Sql' # Do NOT edit. Is official value.
### 2. Search for your virtual network, and then for your subnet.
# Search for the virtual network.
$vnet = $null
$vnet = Get-AzVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VNetName
if ($vnet -eq $null) {
Write-Host "Caution: No virtual network found by the name '$VNetName'."
return
}
$subnet = $null
for ($nn = 0; $nn -lt $vnet.Subnets.Count; $nn++) {
$subnet = $vnet.Subnets[$nn]
if ($subnet.Name -eq $SubnetName) { break }
$subnet = $null
}
if ($null -eq $subnet) {
Write-Host "Caution: No subnet found by the name '$SubnetName'"
Return
}
### 3. Is your subnet tagged as 'Microsoft.Sql' endpoint server type?
$endpointMsSql = $null
for ($nn = 0; $nn -lt $subnet.ServiceEndpoints.Count; $nn++) {
$endpointMsSql = $subnet.ServiceEndpoints[$nn]
if ($endpointMsSql.Service -eq $ServiceEndpointTypeName_SqlDb) {
$endpointMsSql
break
}
$endpointMsSql = $null
}
if ($null -eq $endpointMsSql) {
Write-Host "Good: Subnet found, and is already tagged as an endpoint of type '$ServiceEndpointTypeName_SqlDb'."
return
} else {
Write-Host "Caution: Subnet found, but not yet tagged as an endpoint of type '$ServiceEndpointTypeName_SqlDb'."
# Ask the user for confirmation.
$yesno = Read-Host 'Do you want the PS script to apply the endpoint type name to your subnet? [yes/no]'
if ('no' -eq $yesno) { return }
}
### 4. Add a Virtual Service endpoint of type name 'Microsoft.Sql', on your subnet.
$setParams = @{
Name = $SubnetName
AddressPrefix = $SubnetAddressPrefix
VirtualNetwork = $vnet
ServiceEndpoint = $ServiceEndpointTypeName_SqlDb
}
$vnet = Set-AzVirtualNetworkSubnetConfig @setParams
# Persist the subnet update.
$vnet = Set-AzVirtualNetwork -VirtualNetwork $vnet
for ($nn = 0; $nn -lt $vnet.Subnets.Count; $nn++) {
$vnet.Subnets[0].ServiceEndpoints # Display.
}