Azure sanal ağındaki Azure kaynaklarına gelen ve giden ağ trafiğini filtrelemek için bir ağ güvenlik grubu kullanabilirsiniz.
Ağ güvenlik grupları, ağ trafiğini IP adresi, bağlantı noktası ve protokole göre filtreleyen güvenlik kuralları içerir. Bir ağ güvenlik grubu bir alt ağ ile ilişkilendirildiğinde, bu alt ağda dağıtılan kaynaklara güvenlik kuralları uygulanır.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Ağ güvenlik grubu ve güvenlik kuralları oluşturma
- Uygulama güvenlik grupları oluşturma
- Bir sanal ağ oluşturma ve ağ güvenlik grubunu alt ağ ile ilişkilendirme
- Sanal makineleri dağıtma ve ağ arabirimlerini uygulama güvenlik gruplarıyla ilişkilendirme
Önkoşullar
- Etkin aboneliği olan bir Azure hesabı.
Ücretsiz bir hesap oluşturabilirsiniz.
- Etkin aboneliği olan bir Azure hesabı.
Ücretsiz bir hesap oluşturabilirsiniz.
Azure Cloud Shell
Azure, tarayıcınız aracılığıyla kullanabileceğiniz etkileşimli bir kabuk ortamı olan Azure Cloud Shell'i barındırıyor. Azure hizmetleriyle çalışmak için Cloud Shell ile Bash veya PowerShell kullanabilirsiniz. Yerel ortamınıza herhangi bir şey yüklemek zorunda kalmadan bu makaledeki kodu çalıştırmak için Cloud Shell önceden yüklenmiş komutlarını kullanabilirsiniz.
Azure Cloud Shell'i başlatmak için:
| Seçenek |
Örnek/Bağlantı |
| Kodun veya komut bloğunun sağ üst köşesindeki Deneyin'i seçin.
Deneyin seçildiğinde kod veya komut otomatik olarak Cloud Shell'e kopyalanmaz. |
|
|
https://shell.azure.comadresine gidin veya Cloud Shell'i tarayıcınızda açmak için Cloud Shell'i Başlat düğmesini seçin. |
|
| Azure portalının sağ üst kısmındaki menü çubuğunda Cloud Shell düğmesini seçin. |
|
Azure Cloud Shell'i kullanmak için:
Cloud Shell'i başlatın.
Kodu veya komutu kopyalamak için kod bloğundaki (veya komut bloğundaki) Kopyala düğmesini seçin.
Windows ve Linux'ta Ctrlveya macOS üzerinde Cmd+ seçerek kodu veya komutu Cloud Shell oturumuna yapıştırın.
Kodu veya komutu çalıştırmak için Enter'ı seçin.
PowerShell'i yerel olarak yükleyip kullanmayı seçerseniz, bu makale Için Azure PowerShell modülünün 1.0.0 veya sonraki bir sürümü gerekir. Yüklü sürümü bulmak için Get-Module -ListAvailable Az komutunu çalıştırın. Yükseltmeniz gerekirse, bkz. Azure PowerShell modülünü yükleme. PowerShell'i yerel olarak çalıştırıyorsanız Azure ile bağlantı oluşturmak için de komutunu çalıştırmanız Connect-AzAccount gerekir.
Azure hesabınız yoksa, başlamadan önce ücretsiz hesap oluşturun.
- Bu makale, Azure CLI'nın 2.0.28 veya sonraki bir sürümünü gerektirir. Azure Cloud Shell kullanılıyorsa en son sürüm zaten yüklüdür.
Aşağıdaki yordam, bir kaynak alt ağına sahip bir sanal ağ oluşturur.
Portalda Sanal ağlar'ı arayın ve seçin.
Sanal ağlar sayfasında + Oluştur'u seçin.
Sanal ağ oluştur'un Temel Bilgiler sekmesinde aşağıdaki bilgileri girin veya seçin:
| Ayar |
Değer |
|
Proje ayrıntıları |
|
| Abonelik |
Aboneliğinizi seçin. |
| Kaynak grubu |
Yeni oluştur’u seçin.
Ad alanına test-rg girin.
Tamam'ı seçin. |
|
Örnek ayrıntıları |
|
| Veri Akışı Adı |
vnet-1 girin. |
| Bölge |
Doğu ABD 2’yi seçin. |
Güvenlik sekmesine gitmek için İleri'yi seçin.
IP adresleri sekmesine gitmek için İleri'yi seçin.
Alt ağlar altındaki adres alanı kutusunda varsayılan alt ağı seçin.
Alt ağı düzenle bölmesinde aşağıdaki bilgileri girin veya seçin:
| Ayar |
Değer |
|
Alt ağ ayrıntıları |
|
| Alt ağ şablonu |
Varsayılan değeri Varsayılan olarak bırakın. |
| Veri Akışı Adı |
subnet-1 girin. |
| Başlangıç adresi |
Varsayılan değeri 10.0.0.0 olarak bırakın. |
| Alt ağ boyutu |
Varsayılan /24(256 adres) olarak bırakın. |
Kaydet'i seçin.
Ekranın alt kısmındaki Gözden geçir ve oluştur'u seçin. Doğrulama başarılı olduktan sonra Oluştur'u seçin.
İlk olarak New-AzResourceGroup ile bu makalede oluşturulan tüm kaynaklar için bir kaynak grubu oluşturun. Aşağıdaki örnek westus2 konumunda bir kaynak grubu oluşturur:
$rg = @{
ResourceGroupName = "test-rg"
Location = "westus2"
}
New-AzResourceGroup @rg
New-AzVirtualNetwork ile bir sanal ağ oluşturun. Aşağıdaki örnek vnet-1 adlı bir sanal oluşturur:
$vnet = @{
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "vnet-1"
AddressPrefix = "10.0.0.0/16"
}
$virtualNetwork = New-AzVirtualNetwork @vnet
New-AzVirtualNetworkSubnetConfig ile bir alt ağ yapılandırması oluşturun ve ardından Alt ağ yapılandırmasını Set-AzVirtualNetwork ile sanal ağa yazın. Aşağıdaki örnek sanal ağa subnet-1 adlı bir alt ağ ekler ve nsg-1 ağ güvenlik grubunu bu ağ ile ilişkilendirir:
$subnet = @{
Name = "subnet-1"
VirtualNetwork = $virtualNetwork
AddressPrefix = "10.0.0.0/24"
}
Add-AzVirtualNetworkSubnetConfig @subnet
$virtualNetwork | Set-AzVirtualNetwork
İlk olarak az group create ile bu makalede oluşturulan tüm kaynaklar için bir kaynak grubu oluşturun. Aşağıdaki örnek westus2 konumunda bir kaynak grubu oluşturur:
az group create \
--name test-rg \
--location westus2
az network vnet create komutu ile bir sanal ağ oluşturun. Aşağıdaki örnek vnet-1 adlı bir sanal oluşturur:
az network vnet create \
--name vnet-1 \
--resource-group test-rg \
--address-prefixes 10.0.0.0/16
az network vnet subnet create ile bir sanal ağa alt ağ ekleyin. Aşağıdaki örnek sanal ağa subnet-1 adlı bir alt ağ ekler ve nsg-1 ağ güvenlik grubunu bu ağ ile ilişkilendirir:
az network vnet subnet create \
--vnet-name vnet-1 \
--resource-group test-rg \
--name subnet-1 \
--address-prefix 10.0.0.0/24
Uygulama güvenlik grupları oluşturma
Uygulama güvenlik grubu (ASG' ler), web sunucuları gibi benzer işlevlere sahip sunucuları gruplandırmanıza olanak tanır.
Portalın üst kısmındaki arama kutusuna Uygulama güvenlik grubu yazın. Arama sonuçlarında Uygulama güvenlik grupları'nı seçin.
+Oluştur'u seçin.
Uygulama güvenlik grubu oluştur'un Temel Bilgiler sekmesinde şu bilgileri girin veya seçin:
| Ayar |
Değer |
|
Proje ayrıntıları |
|
| Abonelik |
Aboneliğinizi seçin. |
| Kaynak grubu |
test-rg öğesini seçin. |
|
Örnek ayrıntıları |
|
| Veri Akışı Adı |
asg-web girin. |
| Bölge |
Batı ABD 2'yi seçin. |
Gözden geçir ve oluştur’u seçin.
+Oluştur'u seçin.
Aşağıdaki değerleri belirterek önceki adımları yineleyin:
| Ayar |
Değer |
|
Proje ayrıntıları |
|
| Abonelik |
Aboneliğinizi seçin. |
| Kaynak grubu |
test-rg öğesini seçin. |
|
Örnek ayrıntıları |
|
| Veri Akışı Adı |
asg-mgmt girin. |
| Bölge |
Batı ABD 2'yi seçin. |
Gözden geçir ve oluştur’u seçin.
Oluştur'u belirleyin.
New-AzApplicationSecurityGroup ile bir uygulama güvenlik grubu oluşturun. Uygulama güvenlik grubu, benzer bağlantı noktası filtreleme gereksinimlerine sahip sunucuları gruplandırmanızı sağlar. Aşağıdaki örnek iki uygulama güvenlik grubu oluşturur.
$web = @{
ResourceGroupName = "test-rg"
Name = "asg-web"
Location = "westus2"
}
$webAsg = New-AzApplicationSecurityGroup @web
$mgmt = @{
ResourceGroupName = "test-rg"
Name = "asg-mgmt"
Location = "westus2"
}
$mgmtAsg = New-AzApplicationSecurityGroup @mgmt
az network asg create ile bir uygulama güvenlik grubu oluşturun. Uygulama güvenlik grubu, benzer bağlantı noktası filtreleme gereksinimlerine sahip sunucuları gruplandırmanızı sağlar. Aşağıdaki örnek iki uygulama güvenlik grubu oluşturur.
az network asg create \
--resource-group test-rg \
--name asg-web \
--location westus2
az network asg create \
--resource-group test-rg \
--name asg-mgmt \
--location westus2
Ağ güvenlik grubu oluşturma
Ağ güvenlik grubu (NSG), sanal ağınızdaki ağ trafiğinin güvenliğini sağlar.
Portalın üst kısmındaki arama kutusuna Ağ güvenlik grubu yazın. Arama sonuçlarında Ağ güvenlik grupları'nı seçin.
Not
Ağ güvenlik gruplarının arama sonuçlarında Ağ güvenlik grupları (klasik) görebilirsiniz. Ağ güvenlik grupları'ı seçin.
+Oluştur'u seçin.
Ağ güvenlik grubu oluştur'un Temel Bilgiler sekmesinde şu bilgileri girin veya seçin:
| Ayar |
Değer |
|
Proje ayrıntıları |
|
| Abonelik |
Aboneliğinizi seçin. |
| Kaynak grubu |
test-rg öğesini seçin. |
|
Örnek ayrıntıları |
|
| Veri Akışı Adı |
nsg-1 girin. |
| Konum |
Batı ABD 2'yi seçin. |
Gözden geçir ve oluştur’u seçin.
Oluştur'u belirleyin.
New-AzNetworkSecurityGroup ile bir ağ güvenlik grubu oluşturun. Aşağıdaki örnek nsg-1 adlı bir ağ güvenlik grubu oluşturur:
$nsgParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "nsg-1"
}
$nsg = New-AzNetworkSecurityGroup @nsgParams
az network nsg create ile bir ağ güvenlik grubu oluşturun. Aşağıdaki örnek nsg-1 adlı bir ağ güvenlik grubu oluşturur:
# Create a network security group
az network nsg create \
--resource-group test-rg \
--name nsg-1
Ağ güvenlik grubunu alt ağ ile ilişkilendirme
Bu bölümde, ağ güvenlik grubunu daha önce oluşturduğunuz sanal ağın alt ağıyla ilişkilendirirsiniz.
Portalın üst kısmındaki arama kutusuna Ağ güvenlik grubu yazın. Arama sonuçlarında Ağ güvenlik grupları'nı seçin.
nsg-1'i seçin.
nsg-1'in Ayarlar bölümünde Alt ağlar'ı seçin.
Alt ağlar sayfasında + İlişkili'yi seçin:
Alt ağı ilişkilendir'in altında Sanal ağ için vnet-1 (test-rg) öğesini seçin.
Alt ağ için subnet-1'i ve ardından Tamam'ı seçin.
Get-AzVirtualNetwork komutunu kullanarak sanal ağ nesnesini alın ve ardından ağ güvenlik grubunu alt ağ ile ilişkilendirmek için Set-AzVirtualNetworkSubnetConfig komutunu kullanın. Aşağıdaki örnek sanal ağ nesnesini alır ve ağ güvenlik grubunu ilişkilendirmek için alt ağ yapılandırmasını güncelleştirir:
# Retrieve the virtual network
$vnet = Get-AzVirtualNetwork -Name "vnet-1" -ResourceGroupName "test-rg"
# Update the subnet configuration to associate the network security group
$subnetConfigParams = @{
VirtualNetwork = $vnet
Name = "subnet-1"
AddressPrefix = $vnet.Subnets[0].AddressPrefix
NetworkSecurityGroup = Get-AzNetworkSecurityGroup -Name "nsg-1" -ResourceGroupName "test-rg"
}
Set-AzVirtualNetworkSubnetConfig @subnetConfigParams
# Update the virtual network with the new subnet configuration
$vnet | Set-AzVirtualNetwork
Ağ güvenlik grubunu alt ağ ile ilişkilendirmek için az network vnet subnet update komutunu kullanın. Aşağıdaki örnek nsg-1 ağ güvenlik grubunu subnet-1 alt ağıyla ilişkilendirir:
az network vnet subnet update \
--resource-group test-rg \
--vnet-name vnet-1 \
--name subnet-1 \
--network-security-group nsg-1
Güvenlik kuralları oluşturma
nsg-1'in Ayarlar bölümünden Gelen güvenlik kuralları'nı seçin.
Gelen güvenlik kuralları sayfasında + Ekle'yi seçin.
Asg-web uygulaması güvenlik grubuna 80 numaralı bağlantı noktasına izin veren bir güvenlik kuralı oluşturun.
Gelen güvenlik kuralı ekle sayfasında aşağıdaki bilgileri girin veya seçin:
| Ayar |
Değer |
| Kaynak |
Varsayılan değeri Any olarak bırakın. |
| Kaynak bağlantı noktası aralıkları |
Varsayılan olarak (*) bırakın. |
| Hedef |
Uygulama güvenlik grubu'nun seçin. |
| Hedef uygulama güvenlik grupları |
asg-web'i seçin. |
| Hizmet |
Varsayılan Özel seçeneğini değiştirmeyin. |
| Hedef bağlantı noktası aralıkları |
80 girin. |
| Protokol |
TCP’yi seçin. |
| Eylem |
Varsayılan olarak İzin Ver'i bırakın. |
| Öncelik |
Varsayılan değeri 100 olarak bırakın. |
| Veri Akışı Adı |
allow-http-web girin. |
Ekle'yi seçin.
Önceki adımları aşağıdaki bilgilerle tamamlayın:
| Ayar |
Değer |
| Kaynak |
Varsayılan değeri Any olarak bırakın. |
| Kaynak bağlantı noktası aralıkları |
Varsayılan olarak (*) bırakın. |
| Hedef |
Uygulama güvenlik grubu'nun seçin. |
| Hedef uygulama güvenlik grubu |
asg-mgmt öğesini seçin. |
| Hizmet |
Varsayılan Özel seçeneğini değiştirmeyin. |
| Hedef bağlantı noktası aralıkları |
8080 girin. |
| Protokol |
TCP’yi seçin. |
| Eylem |
Varsayılan olarak İzin Ver'i bırakın. |
| Öncelik |
Varsayılan değeri 110 olarak bırakın. |
| Veri Akışı Adı |
allow-8080-mgmt girin. |
Ekle'yi seçin.
New-AzNetworkSecurityRuleConfig ile bir güvenlik kuralı oluşturun. Aşağıdaki örnek, 80 numaralı bağlantı noktası üzerinden internetten asg-web uygulaması güvenlik grubuna gelen trafiğe izin veren bir kural oluşturur:
$webAsgParams = @{
Name = "asg-web"
ResourceGroupName = "test-rg"
}
$webAsg = Get-AzApplicationSecurityGroup @webAsgParams
$webRuleParams = @{
Name = "Allow-HTTP-Web"
Access = "Allow"
Protocol = "Tcp"
Direction = "Inbound"
Priority = 100
SourceAddressPrefix = "Internet"
SourcePortRange = "*"
DestinationApplicationSecurityGroupId = $webAsg.id
DestinationPortRange = 80
}
$webRule = New-AzNetworkSecurityRuleConfig @webRuleParams
Aşağıdaki örnek, 8080 numaralı bağlantı noktası üzerinden internetten asg-mgmt uygulama güvenlik grubuna gelen trafiğe izin veren bir kural oluşturur:
$mgmtAsgParams = @{
Name = "asg-mgmt"
ResourceGroupName = "test-rg"
}
$mgmtAsg = Get-AzApplicationSecurityGroup @mgmtAsgParams
$mgmtRuleParams = @{
Name = "Allow-8080-Mgmt"
Access = "Allow"
Protocol = "Tcp"
Direction = "Inbound"
Priority = 110
SourceAddressPrefix = "Internet"
SourcePortRange = "*"
DestinationApplicationSecurityGroupId = $mgmtAsg.id
DestinationPortRange = 8080
}
$mgmtRule = New-AzNetworkSecurityRuleConfig @mgmtRuleParams
Mevcut ağ güvenlik grubunu almak için Get-AzNetworkSecurityGroup kullanın ve ardından işleciyle += yeni kuralları ekleyin. Son olarak, ağ güvenlik grubunu Set-AzNetworkSecurityGroup ile güncelleştirin:
# Retrieve the existing network security group
$nsg = Get-AzNetworkSecurityGroup -Name "nsg-1" -ResourceGroupName "test-rg"
# Add the new rules to the security group
$nsg.SecurityRules += $webRule
$nsg.SecurityRules += $mgmtRule
# Update the network security group with the new rules
Set-AzNetworkSecurityGroup -NetworkSecurityGroup $nsg
az network nsg rule create ile bir güvenlik kuralı oluşturun. Aşağıdaki örnek, 80 numaralı bağlantı noktası üzerinden internetten asg-web uygulaması güvenlik grubuna gelen trafiğe izin veren bir kural oluşturur:
az network nsg rule create \
--resource-group test-rg \
--nsg-name nsg-1 \
--name Allow-HTTP-Web \
--access Allow \
--protocol Tcp \
--direction Inbound \
--priority 100 \
--source-address-prefix Internet \
--source-port-range "*" \
--destination-asgs "asg-web" \
--destination-port-range 80
Aşağıdaki örnek, 8080 numaralı bağlantı noktası üzerinden İnternet'ten asg-mgmt uygulama güvenlik grubuna gelen trafiğe izin veren bir kural oluşturur:
az network nsg rule create \
--resource-group test-rg \
--nsg-name nsg-1 \
--name Allow-8080-Mgmt \
--access Allow \
--protocol Tcp \
--direction Inbound \
--priority 110 \
--source-address-prefix Internet \
--source-port-range "*" \
--destination-asgs "asg-mgmt" \
--destination-port-range 8080
Sanal makineleri oluşturma
Sanal ağda iki sanal makine (VM) oluşturun.
Portalda Sanal makineler'i arayın ve seçin.
Sanal makineler'de+ Oluştur'u ve ardından Sanal makine'yi seçin.
Sanal makine oluştur bölümünde, Temel Bilgiler sekmesinde bu bilgileri girin veya seçin:
| Ayar |
Değer |
|
Proje ayrıntıları |
|
| Abonelik |
Aboneliğinizi seçin. |
| Kaynak grubu |
test-rg öğesini seçin. |
|
Örnek ayrıntıları |
|
| Sanal makine ismi |
vm-web girin. |
| Bölge |
(ABD) Batı ABD 2’yi seçin. |
| Kullanılabilirlik seçenekleri |
Altyapı yedekliliği gerekli değil varsayılanını değiştirmeyin. |
| Güvenlik türü |
Standart'ı seçin. |
| Görsel |
Ubuntu Server 24.04 LTS - x64 Gen2'yi seçin. |
| Azure Spot örneği |
Varsayılan olarak işaretlenmemiş olarak bırakın. |
| Boyut |
Bir boyut seçin. |
|
Yönetici hesabı |
|
| Doğrulama türü |
SSH ortak anahtarı'ni seçin. |
| Kullanıcı adı |
azureuser yazın. |
| SSH ortak anahtar kaynağı |
Yeni anahtar çifti oluştur'a tıklayın. |
| Anahtar çifti adı |
vm-web-key girin. |
|
Gelen bağlantı noktası kuralları |
|
| Gelen bağlantı noktalarını seçin |
Hiçbiri seçeneğini belirtin. |
İleri: Diskler'i ve ardından İleri: Ağ'ı seçin.
Ağ sekmesinde aşağıdaki bilgileri girin veya seçin:
| Ayar |
Değer |
|
Ağ arabirimi |
|
| Sanal ağ |
vnet-1'i seçin. |
| Alt ağ |
subnet-1 (10.0.0.0/24) öğesini seçin. |
| Genel IP |
Yeni bir genel IP'nin varsayılanını değiştirmeyin. |
| NIC ağ güvenlik grubu |
Hiçbiri seçeneğini belirtin. |
Gözden Geçir + oluştur sekmesini seçin veya sayfanın en altındaki mavi Gözden Geçir + oluştur düğmesini seçin.
Oluştur'u belirleyin.
Yeni anahtar çifti oluştur sorulduğunda Özel anahtarı indir'i seçin ve kaynak oluşturun. Özel anahtar yerel bilgisayarınıza indirilir. VM'nin dağıtılması birkaç dakika sürebilir.
Vm-mgmt-key anahtar çifti adıyla vm-mgmt adlı ikinci bir sanal makine oluşturmak için önceki adımları yineleyin.
VM'leri oluşturmadan önce Get-AzVirtualNetwork alt ağıyla sanal ağ nesnesini alın:
$virtualNetworkParams = @{
Name = "vnet-1"
ResourceGroupName = "test-rg"
}
$virtualNetwork = Get-AzVirtualNetwork @virtualNetworkParams
New-AzPublicIpAddress ile her VM için bir genel IP adresi oluşturun:
$publicIpWebParams = @{
AllocationMethod = "Static"
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "public-ip-vm-web"
}
$publicIpWeb = New-AzPublicIpAddress @publicIpWebParams
$publicIpMgmtParams = @{
AllocationMethod = "Static"
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "public-ip-vm-mgmt"
}
$publicIpMgmt = New-AzPublicIpAddress @publicIpMgmtParams
New-AzNetworkInterface ile iki ağ arabirimi oluşturun ve ağ arabirimine bir genel IP adresi atayın. Aşağıdaki örnek bir ağ arabirimi oluşturur ve public-ip-vm-web genel IP adresini bu arabirimle ilişkilendirir.
$webNicParams = @{
Location = "westus2"
Name = "vm-web-nic"
ResourceGroupName = "test-rg"
SubnetId = $virtualNetwork.Subnets[0].Id
PublicIpAddressId = $publicIpWeb.Id
}
$webNic = New-AzNetworkInterface @webNicParams
Aşağıdaki örnek bir ağ arabirimi oluşturur ve public-ip-vm-mgmt genel IP adresini bu arabirimle ilişkilendirir.
$mgmtNicParams = @{
Location = "westus2"
Name = "vm-mgmt-nic"
ResourceGroupName = "test-rg"
SubnetId = $virtualNetwork.Subnets[0].Id
PublicIpAddressId = $publicIpMgmt.Id
}
$mgmtNic = New-AzNetworkInterface @mgmtNicParams
Daha sonraki bir adımda trafik filtrelemesini doğrulayabilmek için sanal ağda iki VM oluşturun.
New-AzSshKey ile Azure'da SSH anahtarları oluşturun. Aşağıdaki örnek, her VM için SSH anahtar kaynakları oluşturur:
# Create SSH key for vm-web
$webSshKeyParams = @{
ResourceGroupName = "test-rg"
Name = "vm-web-key"
}
New-AzSshKey @webSshKeyParams
# Create SSH key for vm-mgmt
$mgmtSshKeyParams = @{
ResourceGroupName = "test-rg"
Name = "vm-mgmt-key"
}
New-AzSshKey @mgmtSshKeyParams
New-AzVMConfig ile bir VM yapılandırması oluşturun ve ardından New-AzVM ile VM'yi oluşturun. Aşağıdaki örnek, web sunucusu olarak hizmet veren bir VM oluşturur.
-AsJob seçeneği, sonraki adıma devam edebilmeniz için arka planda sanal makineyi oluşturur:
# Get the SSH public key
$sshKey = Get-AzSshKey -Name "vm-web-key" -ResourceGroupName "test-rg"
$webVmConfigParams = @{
VMName = "vm-web"
VMSize = "Standard_DS1_V2"
}
$vmImageParams = @{
PublisherName = "Canonical"
Offer = "ubuntu-24_04-lts"
Skus = "server"
Version = "latest"
}
$webVmConfig = New-AzVMConfig @webVmConfigParams | `
Set-AzVMOperatingSystem -Linux -ComputerName "vm-web" -Credential (New-Object System.Management.Automation.PSCredential("azureuser", (ConvertTo-SecureString "DummyP@ssw0rd" -AsPlainText -Force))) -DisablePasswordAuthentication | `
Set-AzVMSourceImage @vmImageParams | `
Add-AzVMNetworkInterface -Id $webNic.Id | `
Set-AzVMOSDisk -CreateOption FromImage | `
Set-AzVMBootDiagnostic -Disable | `
Add-AzVMSshPublicKey -KeyData $sshKey.publicKey -Path "/home/azureuser/.ssh/authorized_keys"
$webVmParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
VM = $webVmConfig
}
New-AzVM @webVmParams -AsJob
Yönetim sunucusu olarak görev yapacak bir VM oluşturun:
# Get the SSH public key
$sshKey = Get-AzSshKey -Name "vm-mgmt-key" -ResourceGroupName "test-rg"
$mgmtVmConfigParams = @{
VMName = "vm-mgmt"
VMSize = "Standard_DS1_V2"
}
$vmImageParams = @{
PublisherName = "Canonical"
Offer = "ubuntu-24_04-lts"
Skus = "server"
Version = "latest"
}
$mgmtVmConfig = New-AzVMConfig @mgmtVmConfigParams | `
Set-AzVMOperatingSystem -Linux -ComputerName "vm-mgmt" -Credential (New-Object System.Management.Automation.PSCredential("azureuser", (ConvertTo-SecureString "DummyP@ssw0rd" -AsPlainText -Force))) -DisablePasswordAuthentication | `
Set-AzVMSourceImage @vmImageParams | `
Add-AzVMNetworkInterface -Id $mgmtNic.Id | `
Set-AzVMOSDisk -CreateOption FromImage | `
Set-AzVMBootDiagnostic -Disable | `
Add-AzVMSshPublicKey -KeyData $sshKey.publicKey -Path "/home/azureuser/.ssh/authorized_keys"
$mgmtVmParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
VM = $mgmtVmConfig
}
New-AzVM @mgmtVmParams
Sanal makinenin oluşturulması birkaç dakika sürer. Azure VM oluşturma işlemini tamamlayana kadar sonraki adıma geçmeyin.
Daha sonraki bir adımda trafik filtrelemesini doğrulayabilmek için sanal ağda iki VM oluşturun.
az vm create ile bir VM oluşturun. Aşağıdaki örnek, web sunucusu olarak hizmet veren bir VM oluşturur. Azure'ın --nsg "" VM'yi oluşturduğunda Azure'ın oluşturduğu ağ arabirimi için varsayılan bir ağ güvenlik grubu oluşturmasını önlemek için seçeneği belirtilir. parametresi, --generate-ssh-keys CLI'nın içinde ~/.sshkullanılabilir bir ssh anahtarı aramasına neden olur. Bir anahtar bulunursa, bu anahtar kullanılır. Eğer durum böyle değilse, bir tane oluşturulur ve ~/.ssh içinde depolanır.
az vm create \
--resource-group test-rg \
--name vm-web \
--image Ubuntu2404 \
--vnet-name vnet-1 \
--subnet subnet-1 \
--nsg "" \
--admin-username azureuser \
--generate-ssh-keys
Sanal makinenin oluşturulması birkaç dakika sürer. VM oluşturulduktan sonra aşağıdaki örneğe benzer bir çıkış döndürülür:
{
"fqdns": "",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test-rg/providers/Microsoft.Compute/virtualMachines/vm-web",
"location": "westus2",
"macAddress": "00-0D-3A-23-9A-49",
"powerState": "VM running",
"privateIpAddress": "10.0.0.4",
"publicIpAddress": "203.0.113.24",
"resourceGroup": "test-rg"
}
az vm create ile bir VM oluşturun. Aşağıdaki örnek, yönetim sunucusu olarak hizmet veren bir VM oluşturur:
az vm create \
--resource-group test-rg \
--name vm-mgmt \
--image Ubuntu2404 \
--vnet-name vnet-1 \
--subnet subnet-1 \
--nsg "" \
--admin-username azureuser \
--generate-ssh-keys
Sanal makinenin oluşturulması birkaç dakika sürer. Azure VM oluşturma işlemini tamamlayana kadar sonraki adıma geçmeyin.
Ağ arabirimlerini ASG ile ilişkilendirme
VM'leri oluşturduğunuzda, Azure her VM için bir ağ arabirimi oluşturmuş ve vm'ye eklemiş.
Her vm'nin ağ arabirimini daha önce oluşturduğunuz uygulama güvenlik gruplarından birine ekleyin:
Portalın üst kısmındaki arama kutusuna Sanal makine yazın.
Arama sonuçlarında Sanal makineler'i ve ardından vm-web'i seçin.
vm-web'in Ağ bölümünden Uygulama güvenlik grupları'nı seçin.
Uygulama güvenlik grupları ekle'yi seçin, ardından Uygulama güvenlik grupları ekle sekmesinde asg-web'i seçin. Son olarak Ekle'yi seçin.
Uygulama güvenlik grupları ekle sekmesinde asg-mgmt'yi seçerek vm-mgmtiçin önceki adımları yineleyin.
Sanal makinenin ağ arabirimini almak için Get-AzNetworkInterface kullanın ve ardından uygulama güvenlik grubunu almak için Get-AzApplicationSecurityGroup kullanın. Son olarak, uygulama güvenlik grubunu ağ arabirimiyle ilişkilendirmek için Set-AzNetworkInterface komutunu kullanın. Aşağıdaki örnek, asg-web uygulaması güvenlik grubunu vm-web-nic ağ arabirimiyle ilişkilendirir:
$params1 = @{
Name = "vm-web-nic"
ResourceGroupName = "test-rg"
}
$nic = Get-AzNetworkInterface @params1
$params2 = @{
Name = "asg-web"
ResourceGroupName = "test-rg"
}
$asg = Get-AzApplicationSecurityGroup @params2
$nic.IpConfigurations[0].ApplicationSecurityGroups = @($asg)
$params3 = @{
NetworkInterface = $nic
}
Set-AzNetworkInterface @params3
asg-mgmt uygulama güvenlik grubunu vm-mgmt-nic ağ arabirimiyle ilişkilendirmek için komutunu yineleyin.
$params1 = @{
Name = "vm-mgmt-nic"
ResourceGroupName = "test-rg"
}
$nic = Get-AzNetworkInterface @params1
$params2 = @{
Name = "asg-mgmt"
ResourceGroupName = "test-rg"
}
$asg = Get-AzApplicationSecurityGroup @params2
$nic.IpConfigurations[0].ApplicationSecurityGroups = @($asg)
$params3 = @{
NetworkInterface = $nic
}
Set-AzNetworkInterface @params3
Ağ arabirimini uygulama güvenlik grubuyla ilişkilendirmek için az network nic update komutunu kullanın. Aşağıdaki örnek, asg-web uygulaması güvenlik grubunu vm-web-nic ağ arabirimiyle ilişkilendirir:
# Retrieve the network interface name associated with the virtual machine
nic_name=$(az vm show --resource-group test-rg --name vm-web --query 'networkProfile.networkInterfaces[0].id' -o tsv | xargs basename)
# Associate the application security group with the network interface
az network nic ip-config update \
--name ipconfigvm-web \
--nic-name $nic_name \
--resource-group test-rg \
--application-security-groups asg-web
asg-mgmt uygulama güvenlik grubunu vm-mgmt-nic ağ arabirimiyle ilişkilendirmek için komutunu yineleyin.
# Retrieve the network interface name associated with the virtual machine
nic_name=$(az vm show --resource-group test-rg --name vm-mgmt --query 'networkProfile.networkInterfaces[0].id' -o tsv | xargs basename)
# Associate the application security group with the network interface
az network nic ip-config update \
--name ipconfigvm-mgmt \
--nic-name $nic_name \
--resource-group test-rg \
--application-security-groups asg-mgmt
Trafik filtrelerini test etme
Portalın üst kısmındaki arama kutusuna Sanal makine yazın. Arama sonuçlarında Sanal makineler'i seçin.
vm-web'i seçin.
İşlemler bölümünde Çalıştır komutunu seçin.
RunShellScript'i seçin.
Komut Betiğini Çalıştır bölmesine aşağıdaki komutları girin:
sudo apt-get update -y
sudo apt-get install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
Çalıştır'ı seçin. Scriptin başarıyla tamamlanmasını bekleyin.
vm-web'in Genel Bakış sayfasında VM'nizin Genel IP adresini not edin.
vm-web web sunucusuna 80 numaralı bağlantı noktasından İnternet'ten erişebildiğinizden emin olmak için, bilgisayarınızda bir internet tarayıcısı açın ve adresine http://<public-ip-address-from-previous-step>gidin.
İnternet'ten asg-web uygulaması güvenlik grubuna gelen trafiğe 80 numaralı bağlantı noktası üzerinden izin verildiğinden nginx varsayılan sayfasını görürsünüz.
vm-web için eklenen ağ arabirimi asg-web uygulaması güvenlik grubuyla ilişkilendirilir ve bağlantıya izin verir.
Tarayıcınızda https://<public-ip-address-vm-web> adresine giderek 443 numaralı bağlantı noktasında vm-web'e erişmeyi deneyin.
Asg-web güvenlik kuralı İnternet'ten gelen 443 numaralı bağlantı noktasına izin vermediğinden bağlantı başarısız oluyor veya zaman aşımına uğradı.
Şimdi 8080 numaralı bağlantı noktasında nginx ile vm-mgmt'yi yapılandırın.
Sanal makinelersayfasından vm-mgmt öğesini seçin.
İşlemler bölümünde Çalıştır komutunu seçin.
RunShellScript'i seçin.
Komut Betiğini Çalıştır bölmesinde, 8080 numaralı bağlantı noktasına nginx yüklemek için aşağıdaki komutları girin:
sudo apt-get update -y
sudo apt-get install -y nginx
# Configure nginx to listen on port 8080
sudo tee /etc/nginx/sites-available/default > /dev/null <<EOF
server {
listen 8080 default_server;
listen [::]:8080 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files \$uri \$uri/ =404;
}
}
EOF
sudo systemctl restart nginx
Çalıştır'ı seçin. Scriptin başarıyla tamamlanmasını bekleyin.
vm-mgmt'ninGenel Bakış sayfasında VM'nizin Genel IP adresini not edin.
vm-mgmt web sunucusuna 8080 numaralı bağlantı noktasından İnternet'ten erişebildiğinizden emin olmak içinhttp://<public-ip-address-vm-mgmt>:8080, bilgisayarınızda bir internet tarayıcısı açın ve adresine gidin.
İnternet'ten asg-mgmt uygulama güvenlik grubuna gelen trafiğe 8080 numaralı bağlantı noktası üzerinden izin verildiğinden nginx varsayılan sayfasını görürsünüz.
Tarayıcınızda http://<public-ip-address-vm-mgmt> adresine giderek 80 numaralı bağlantı noktasında vm-mgmt'ye erişmeyi deneyin.
Asg-mgmt uygulama güvenlik grubuna gelen 80 numaralı porta hiçbir güvenlik kuralı izin vermediğinden bağlantı başarısız oluyor veya zaman aşımına uğruyor.
vm-web için eklenen ağ arabirimi asg-web uygulaması güvenlik grubuyla ilişkilendirilir ve bağlantıya izin verir.
Invoke-AzVMRunCommand komutunu kullanarak vm-web'e nginx yükleyin:
$webInstallParams = @{
ResourceGroupName = "test-rg"
VMName = "vm-web"
CommandId = "RunShellScript"
ScriptString = @"
sudo apt-get update -y
sudo apt-get install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
"@
}
Invoke-AzVMRunCommand @webInstallParams
Komutun tamamlanması birkaç dakika sürebilir. Tamamlandıktan sonra vm-web üzerinde web erişimini test edin.
vm-web'in genel IP adresini alın:
$webIPParams = @{
Name = "public-ip-vm-web"
ResourceGroupName = "test-rg"
}
$webIP = Get-AzPublicIpAddress @webIPParams
Write-Host "vm-web IP: $($webIP.IpAddress)"
vm-web web sunucusuna 80 numaralı bağlantı noktasından İnternet'ten erişebildiğinizden emin olmak için, bilgisayarınızda bir internet tarayıcısı açın ve adresine http://<vm-web-ip-address>gidin.
İnternet'ten asg-web uygulaması güvenlik grubuna gelen trafiğe 80 numaralı bağlantı noktası üzerinden izin verildiğinden nginx varsayılan sayfasını görürsünüz. vm-web VM'sine eklenen ağ arabirimi bu gruptadır.
Tarayıcınızda https://<vm-web-ip-address> adresine giderek 443 numaralı bağlantı noktasında vm-web'e erişmeyi deneyin.
Asg-web güvenlik kuralı İnternet'ten gelen 443 numaralı bağlantı noktasına izin vermediğinden bağlantı başarısız oluyor veya zaman aşımına uğradı.
Şimdi vm-mgmt üzerinde 8080 numaralı bağlantı noktasına nginx yükleyin:
$mgmtInstallParams = @{
ResourceGroupName = "test-rg"
VMName = "vm-mgmt"
CommandId = "RunShellScript"
ScriptString = @"
sudo apt-get update -y
sudo apt-get install -y nginx
# Configure nginx to listen on port 8080
sudo tee /etc/nginx/sites-available/default > /dev/null <<'EOF'
server {
listen 8080 default_server;
listen [::]:8080 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files \$uri \$uri/ =404;
}
}
EOF
sudo systemctl restart nginx
"@
}
Invoke-AzVMRunCommand @mgmtInstallParams
vm-mgmt genel IP adresini alın:
$mgmtIPParams = @{
Name = "public-ip-vm-mgmt"
ResourceGroupName = "test-rg"
}
$mgmtIP = Get-AzPublicIpAddress @mgmtIPParams
Write-Host "vm-mgmt IP: $($mgmtIP.IpAddress)"
vm-mgmt web sunucusuna 8080 numaralı bağlantı noktasından İnternet'ten erişebildiğinizden emin olmak içinhttp://<vm-mgmt-ip-address>:8080, bilgisayarınızda bir internet tarayıcısı açın ve adresine gidin.
İnternet'ten asg-mgmt uygulama güvenlik grubuna gelen trafiğe 8080 numaralı bağlantı noktası üzerinden izin verildiğinden nginx varsayılan sayfasını görürsünüz.
Tarayıcınızdan http://<vm-mgmt-ip-address> adresine giderek 80 numaralı bağlantı noktasında vm-mgmt'ye erişmeyi deneyin.
asg-mgmt uygulama güvenlik grubuna gelen 80 numaralı bağlantı noktasına herhangi bir güvenlik kuralı izin vermediği için bağlantı başarısız oluyor veya zaman aşımına uğruyor.
az vm run-command invoke komutunu kullanarak nginx'i vm-web'e yükleyin:
az vm run-command invoke \
--resource-group test-rg \
--name vm-web \
--command-id RunShellScript \
--scripts "sudo apt-get update -y && sudo apt-get install -y nginx && sudo systemctl enable nginx && sudo systemctl start nginx"
vm-web'in genel IP adresini alın:
webIP=$(az vm show --show-details --resource-group test-rg --name vm-web --query publicIps --output tsv)
echo "vm-web IP: $webIP"
vm-web web sunucusuna 80 numaralı bağlantı noktasından İnternet'ten erişebildiğinizden emin olmak için curl kullanın:
curl http://$webIP
Vm-web VM'sine bağlı ağ arabiriminin bulunduğu asg-web uygulaması güvenlik grubu İnternet'ten gelen 80 numaralı bağlantı noktasına izin verdiğinden bağlantı başarılı olur.
443 numaralı bağlantı noktasında vm-web'e erişmeyi deneyin:
curl -k https://$webIP
Asg-web güvenlik kuralı İnternet'ten gelen 443 numaralı bağlantı noktasına izin vermediğinden bağlantı başarısız oluyor veya zaman aşımına uğradı.
Şimdi vm-mgmt üzerinde 8080 numaralı bağlantı noktasına nginx yükleyin:
az vm run-command invoke \
--resource-group test-rg \
--name vm-mgmt \
--command-id RunShellScript \
--scripts "sudo apt-get update -y && \
sudo apt-get install -y nginx && \
sudo bash -c 'cat > /etc/nginx/sites-available/default <<EOF
server {
listen 8080 default_server;
listen [::]:8080 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files \\\$uri \\\$uri/ =404;
}
}
EOF' && \
sudo systemctl restart nginx"
vm-mgmt genel IP adresini alın:
mgmtIP=$(az vm show --show-details --resource-group test-rg --name vm-mgmt --query publicIps --output tsv)
echo "vm-mgmt IP: $mgmtIP"
vm-mgmt web sunucusuna 8080 numaralı bağlantı noktasından İnternet'ten erişebildiğinizden emin olmak için curl kullanın:
curl http://$mgmtIP:8080
İnternet'ten asg-mgmt uygulama güvenlik grubuna gelen trafiğe bağlantı noktası 8080 üzerinden izin verildiğinden bağlantı başarılı olur.
80 numaralı bağlantı noktasında vm-mgmt'ye erişmeyi deneyin:
curl http://$mgmtIP
asg-mgmt uygulama güvenlik grubuna gelen 80 numaralı bağlantı noktasına herhangi bir güvenlik kuralı izin vermediği için bağlantı başarısız oluyor veya zaman aşımına uğruyor.
Oluşturduğunuz kaynakları kullanmayı bitirdiğinizde, kaynak grubunu ve tüm kaynaklarını silebilirsiniz.
Azure portalında Kaynak grupları'nı arayın ve seçin.
Kaynak grupları sayfasında test-rg kaynak grubunu seçin.
test-rg sayfasında Kaynak grubunu sil'i seçin.
Silme işlemini onaylamak için Kaynak grubu adını girin alanına test-rg yazın ve ardından Sil'i seçin.
Artık gerekli olmadığında az group delete komutunu kullanarak kaynak grubunu ve içerdiği tüm kaynakları kaldırın.
az group delete \
--name test-rg \
--yes \
--no-wait
Sonraki adımlar
Bu öğreticide şunları yaptınız:
- Bir ağ güvenlik grubu oluşturup bunu bir sanal ağ alt ağıyla ilişkilendirdi.
- Web ve yönetim trafiği için uygulama güvenlik grupları oluşturuldu.
- SSH anahtarı kimlik doğrulaması ile iki Linux sanal makinesi oluşturdunuz ve ağ arabirimlerini uygulama güvenlik gruplarıyla ilişkilendirdi.
- Farklı bağlantı noktası yapılandırmalarına sahip her iki VM'ye de nginx web sunucuları yüklendi.
- Uygulama güvenlik grubu ağ filtrelemesi, vm-web'in port 80'e (HTTP) izin verip port 443'ü reddettiği, vm-mgmt'in ise port 8080'e izin verip port 80'i (HTTP) reddettiği gösterilerek test edildi.
Ağ güvenlik grupları hakkında daha fazla bilgi edinmek bkz. Ağ güvenlik grubuna genel bakış ve Ağ güvenlik grubunu yönetme.
Azure, varsayılan olarak trafiği alt ağlar arasında yönlendirir. Bunun yerine, örneğin güvenlik duvarı olarak hizmet veren bir VM aracılığıyla alt ağlar arasındaki trafiği yönlendirmeyi seçebilirsiniz.
Yönlendirme tablosu oluşturma hakkında bilgi edinmek için sonraki öğreticiye geçin.