PowerShell: Membuat titik akhir Layanan Virtual dan aturan VNet untuk Azure SQL Database
Berlaku untuk: Azure SQL Database
Aturan jaringan virtual adalah salah satu fitur keamanan firewall yang mengontrol apakah server SQL logis untuk database Azure SQL Database Anda, kumpulan elastis, atau database di Azure Synapse menerima komunikasi yang dikirim dari subnet tertentu di jaringan virtual.
Penting
Artikel ini berlaku untuk Azure SQL Database, termasuk Azure Synapse (sebelumnya SQL DW). Untuk mempermudah, istilah Azure SQL Database dalam artikel ini berlaku untuk database milik Azure SQL Database atau Azure Synapse. Artikel ini tidak berlaku untuk Azure SQL Managed Instance karena tidak memiliki titik akhir layanan yang terkait dengannya.
Artikel ini menunjukkan skrip PowerShell yang mengambil tindakan berikut:
- Membuat titik akhir Layanan Virtual Microsoft Azure di subnet Anda.
- Menambahkan titik akhir ke firewall server Anda untuk membuat aturan jaringan virtual.
Untuk latar belakang lainnya, lihat Titik akhir Layanan Virtual untuk Azure SQL Database.
Tip
Jika yang Anda butuhkan hanyalah menilai atau menambahkan nama jenis titik akhir Layanan Virtual untuk Azure SQL Database ke subnet Anda, Anda dapat langsung melanjutkan ke skrip PowerShell kami yang lebih langsung.
Catatan
Artikel ini menggunakan modul Azure Az PowerShell, yang merupakan modul PowerShell yang direkomendasikan untuk berinteraksi dengan Azure. Untuk mulai menggunakan modul Az PowerShell, lihat Menginstal Azure PowerShell. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.
Penting
Modul PowerShell Azure Resource Manager masih didukung oleh Azure SQL Database, tetapi semua pengembangan di masa depan adalah untuk modul Az.Sql
Cmdlets. Untuk modul yang lebih lama, lihat AzureRM.Sql. Argumen untuk perintah dalam modul Az dan dalam modul AzureRm secara substansial identik.
Cmdlet utama
Artikel ini berfokus pada cmdlet New-AzSqlServerVirtualNetworkRule yang menambahkan titik akhir subnet ke daftar kontrol akses (ACL) server Anda, sehingga membuat aturan.
Daftar berikut menunjukkan urutan cmdlet utama lainnya yang harus Anda jalankan untuk mempersiapkan panggilan ke New-AzSqlServerVirtualNetworkRule. Dalam artikel ini, panggilan ini terjadi dalam skrip 3 "Aturan jaringan virtual":
- New-AzVirtualNetworkSubnetConfig: Membuat objek subnet.
- New-AzVirtualNetwork: Membuat jaringan virtual Anda, memberikannya subnet.
- Set-AzVirtualNetworkSubnetConfig: Menetapkan titik akhir Layanan Virtual ke subnet Anda.
- Set-AzVirtualNetwork: Mempertahankan pembaruan yang dibuat ke jaringan virtual Anda.
- New-AzSqlServerVirtualNetworkRule: Setelah subnet menjadi titik akhir, tambahkan subnet sebagai aturan jaringan virtual ke dalam ACL server Anda.
- Cmdlet ini Menawarkan parameter -IgnoreMissingVNetServiceEndpoint, yang dimulai di Azure RM PowerShell Module versi 5.1.1.
Prasyarat untuk menjalankan PowerShell
- Anda sudah bisa masuk ke Azure, misalnya melalui portal Microsoft Azure.
- Anda sudah bisa menjalankan skrip PowerShell.
Catatan
Pastikan bahwa titik akhir layanan diaktifkan untuk VNet/Subnet yang ingin Anda tambahkan ke Server Anda. Jika tidak, pembuatan Aturan Firewall VNet akan gagal.
Satu skrip dibagi menjadi empat gugus
Skrip PowerShell demonstrasi kami dibagi menjadi urutan skrip yang lebih kecil. Pembagian ini memudahkan pembelajaran dan memberikan fleksibilitas. Skrip harus dijalankan dalam urutan yang ditunjukkan. Jika Anda tidak punya waktu sekarang untuk menjalankan skrip, output pengujian aktual kami ditampilkan setelah skrip 4.
Skrip 1: Variabel
Skrip PowerShell pertama ini menetapkan nilai ke variabel. Skrip berikutnya tergantung pada variabel ini.
Penting
Sebelum menjalankan skrip ini, jika ingin, Anda dapat mengedit nilai. Misalnya, jika sudah memiliki grup sumber daya, Anda mungkin ingin mengedit nama grup sumber daya sebagai nilai yang ditetapkan.
Nama langganan Anda harus diedit ke dalam skrip.
Kode sumber skrip 1 PowerShell
######### 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".'
Skrip 2: Prasyarat
Skrip ini bersiap untuk skrip berikutnya, tempat tindakan titik akhir berada. Skrip ini membuat item yang tercantum berikut ini untuk Anda, tetapi hanya jika belum ada. Anda dapat melewati skrip 2 jika Anda yakin item ini sudah ada:
- Grup sumber daya Azure
- Server SQL logis
Kode sumber skrip 2 PowerShell
######### 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".'
Skrip 3: Membuat titik akhir dan aturan
Skrip ini membuat jaringan virtual dengan subnet. Lalu skrip menetapkan jenis titik akhir Microsoft.Sql ke subnet Anda. Akhirnya skrip menambahkan subnet Anda ke daftar kontrol akses (ACL), sehingga membuat aturan.
Kode sumber skrip 3 PowerShell
######### 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".'
Skrip 4: Pembersihan
Skrip akhir ini menghapus sumber daya yang dibuat skrip sebelumnya untuk demonstrasi. Namun, skrip meminta konfirmasi sebelum menghapus hal berikut:
- Server SQL logis
- Grup sumber daya Azure
Anda dapat menjalankan skrip 4 kapan saja setelah skrip 1 selesai.
Kode sumber skrip 4 PowerShell
######### 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".'
Memverifikasi subnet sebagai titik akhir
Anda mungkin memiliki subnet yang sudah diberi nama jenis Microsoft.Sql, yang berarti sudah menjadi titik akhir Layanan Virtual. Anda dapat menggunakan portal Microsoft Azure untuk membuat aturan jaringan virtual dari titik akhir.
Selain itu, Anda mungkin tidak yakin apakah subnet Anda memiliki nama jenis Microsoft.Sql. Anda bisa menjalankan skrip PowerShell berikut ini untuk melakukan tindakan ini:
- Pastikan apakah subnet Anda memiliki nama jenis Microsoft.Sql.
- Secara opsional, tetapkan nama jenis jika belum ada.
- Skrip meminta Anda untuk mengonfirmasi, sebelum menerapkan nama jenis yang tidak ada.
Fase skrip
Berikut adalah fase skrip PowerShell:
- LOG ke akun Azure Anda, hanya perlu sekali per sesi PS. Menetapkan variabel.
- Cari jaringan virtual Anda, lalu subnet Anda.
- Apakah subnet Anda ditandai sebagai jenis server titik akhir Microsoft.Sql?
- Tambahkan titik akhir Layanan Virtual nama jenis Microsoft.Sql, pada subnet Anda.
Penting
Sebelum Anda menjalankan skrip ini, Anda harus mengedit nilai yang ditetapkan ke $-variabel, di dekat bagian atas skrip.
Kode sumber PowerShell langsung
Skrip PowerShell ini tidak memperbarui apa pun, kecuali Jika Anda memberikan respons "ya" saat dimintai konfirmasi. Skrip dapat menambahkan nama jenis Microsoft.Sql ke subnet Anda. Namun, skrip mencoba menambahkan hanya jika subnet Anda tidak memiliki nama jenis.
### 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.
}