Alıştırma - Ağ güvenlik gruplarını oluşturma ve yönetme

Tamamlandı

Üretim şirketinin çözüm mimarı olarak, şimdi ERP uygulamasını ve veritabanı sunucularını Azure’a taşımaya başlamak istiyorsunuz. İlk adım olarak, iki sunucunuzu kullanarak ağ güvenlik planınızı test edeceksiniz.

Bu ünitede belirli sunuculara yönelik ağ trafiğini kısıtlamak için bir ağ güvenlik grubu ve güvenlik kuralları yapılandıracaksınız. Uygulama sunucunuzun HTTP üzerinden veritabanı sunucunuza bağlanabilmesini istiyorsunuz. Veritabanı sunucusunun HTTP kullanarak uygulama sunucusuna bağlanabilmesini istemiyorsunuz.

Diagram of exercise scenario network security groups.

Sanal ağ ve ağ güvenlik grubu oluşturma

İlk olarak sunucu kaynaklarınız için sanal ağı ve alt ağları oluşturacaksınız. Ardından bir ağ güvenlik grubu oluşturacaksınız.

  1. Azure Cloud Shell'de aşağıdaki komutu çalıştırarak korumalı alan kaynak grubunu değişkenine rgatayın:

    rg="<rgn>[sandbox resource group name]</rgn>"
    
  2. ERP sunucuları sanal ağını ve Uygulamalar alt ağını oluşturmak için Cloud Shell'de aşağıdaki komutu çalıştırın:

    az network vnet create \
        --resource-group $rg \
        --name ERP-servers \
        --address-prefixes 10.0.0.0/16 \
        --subnet-name Applications \
        --subnet-prefixes 10.0.0.0/24
    
  3. Veritabanları alt akını oluşturmak için Cloud Shell'de aşağıdaki komutu çalıştırın:

    az network vnet subnet create \
        --resource-group $rg \
        --vnet-name ERP-servers \
        --address-prefixes 10.0.1.0/24 \
        --name Databases
    
  4. ERP-SERVERS-NSG ağ güvenlik grubunu oluşturmak için Cloud Shell'de aşağıdaki komutu çalıştırın:

    az network nsg create \
        --resource-group $rg \
        --name ERP-SERVERS-NSG
    

Ubuntu çalıştıran sanal makineler oluşturma

Ardından AppServer ve DataServer adlı iki sanal makine oluşturacaksınız. AppServer sanal makinesini Applications alt ağına ve DataServer sanal makinesini Databases alt ağına dağıtırsınız. Sanal makine ağ arabirimlerini ERP-SERVERS-NSG ağ güvenlik grubuna ekleyeceksiniz. Sonra da bu sanal makineleri kullanarak ağ güvenlik grubunuzu test edeceksiniz.

  1. AppServer VM'sini oluşturmak için Cloud Shell'de aşağıdaki komutu çalıştırın. Yönetici hesabı için değerini karmaşık bir parolayla değiştirin <password> .

    wget -N https://raw.githubusercontent.com/MicrosoftDocs/mslearn-secure-and-isolate-with-nsg-and-service-endpoints/master/cloud-init.yml && \
    az vm create \
        --resource-group $rg \
        --name AppServer \
        --vnet-name ERP-servers \
        --subnet Applications \
        --nsg ERP-SERVERS-NSG \
        --image Ubuntu2204 \
        --size Standard_DS1_v2 \
         --generate-ssh-keys \
        --admin-username azureuser \
        --custom-data cloud-init.yml \
        --no-wait \
        --admin-password <password>
    
  2. DataServer VM'sini oluşturmak için Cloud Shell'de aşağıdaki komutu çalıştırın. Yönetici hesabı için değerini karmaşık bir parolayla değiştirin <password> .

    az vm create \
        --resource-group $rg \
        --name DataServer \
        --vnet-name ERP-servers \
        --subnet Databases \
        --nsg ERP-SERVERS-NSG \
        --size Standard_DS1_v2 \
        --image Ubuntu2204 \
        --generate-ssh-keys \
        --admin-username azureuser \
        --custom-data cloud-init.yml \
         --no-wait \
        --admin-password <password>
    
  3. Sanal makinelerin çalışır duruma gelmesi birkaç dakika sürebilir. VM'lerin çalıştığını onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:

    az vm list \
        --resource-group $rg \
        --show-details \
        --query "[*].{Name:name, Provisioned:provisioningState, Power:powerState}" \
        --output table
    

    VM oluşturma işleminiz tamamlandığında aşağıdaki çıkışı görmeniz gerekir:

    Name        Provisioned    Power
    ----------  -------------  ----------
    AppServer   Succeeded      VM running
    DataServer  Succeeded      VM running
    

Varsayılan bağlantıyı denetleme

Şimdi sanal makinelerinizin her birinde Secure Shell (SSH) oturumu açmayı deneyeceksiniz. Unutmayın, şimdiye kadar varsayılan ayarlarla bir ağ güvenlik grubu dağıttınız.

  1. Sanal makinelerinize bağlanmak için doğrudan Cloud Shell’den SSH’yi kullanın. Bunu yapmak için sanal makinelerinize atanmış olan genel IP adreslerine ihtiyacınız vardır. VM'lere bağlanmak için kullanacağınız IP adreslerini listelemek için Cloud Shell'de aşağıdaki komutu çalıştırın:

    az vm list \
        --resource-group $rg \
        --show-details \
        --query "[*].{Name:name, PrivateIP:privateIps, PublicIP:publicIps}" \
        --output table
    
  2. Bu alıştırmanın kalan bölümünde sanal makinelerinize bağlanmayı kolaylaştırmak için genel IP adreslerini değişkenlere atayın. AppServer ve DataServer'ın genel IP adresini bir değişkene kaydetmek için Cloud Shell'de aşağıdaki komutu çalıştırın:

    APPSERVERIP="$(az vm list-ip-addresses \
                     --resource-group $rg \
                     --name AppServer \
                     --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
                     --output tsv)"
    
    DATASERVERIP="$(az vm list-ip-addresses \
                     --resource-group $rg \
                     --name DataServer \
                     --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
                     --output tsv)"
    
  3. AppServer VM'nize bağlanıp bağlanamayacağınızı denetlemek için Cloud Shell'de aşağıdaki komutu çalıştırın:

    ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
    

    Connection timed out iletisi alırsınız.

  4. DataServer VM'nize bağlanıp bağlanamayacağınızı denetlemek için Cloud Shell'de aşağıdaki komutu çalıştırın:

    ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
    

    Aynı bağlantı hatası iletisini alırsınız.

Varsayılan kuralların bir sanal ağa yönelik tüm gelen trafiği, aynı sanal ağdan gelmediği sürece reddettiğini anımsayın. Tüm Genel Trafiği Reddet kuralı az önce denediğiniz gelen SSH bağlantılarını engellemiştir.

Gelen

Adı Öncelik Kaynak IP Hedef IP Erişim
Sanal Ağ Gelen Trafiğine İzin Ver 65000 VIRTUAL_NETWORK VIRTUAL_NETWORK İzin ver
Tüm Gelen Trafiği Reddet 65500 * * Reddet

SSH için güvenlik kuralı oluşturma

Şimdi deneyimlediğiniz gibi ERP-SERVERS-NSG ağ güvenlik grubunuzdaki varsayılan kurallar Tüm Gelen Trafiği Reddet kuralını içeriyor. Şimdi AppServer ve DataServer sanal makinesine SSH kullanarak bağlanabilmeniz için bir kural ekleyeceksiniz.

  1. SSH erişimini etkinleştirmek üzere yeni bir gelen güvenlik kuralı oluşturmak için Cloud Shell'de aşağıdaki komutu çalıştırın:

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name AllowSSHRule \
        --direction Inbound \
        --priority 100 \
        --source-address-prefixes '*' \
        --source-port-ranges '*' \
        --destination-address-prefixes '*' \
        --destination-port-ranges 22 \
        --access Allow \
        --protocol Tcp \
        --description "Allow inbound SSH"
    
  2. Şimdi AppServer VM'nize bağlanıp bağlanamayacağınızı denetlemek için Cloud Shell'de aşağıdaki komutu çalıştırın:

    ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
    

    Ağ güvenlik kuralının geçerlilik kazanması bir veya iki dakika sürebilir. Bağlantı hatası iletisi alırsanız, biraz bekleyin ve yeniden deneyin.

  3. Artık bağlanabiliyor olmalısınız. Are you sure you want to continue connecting (yes/no)? iletisinden sonra yes yazın.

  4. VM'yi oluştururken tanımladığınız parolayı girin.

  5. AppServer oturumunu kapatmak için girinexit.

  6. Artık DataServer VM'nize bağlanıp bağlanamayacağınızı denetlemek için Cloud Shell'de aşağıdaki komutu çalıştırın:

    ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
    
  7. Artık bağlanabiliyor olmalısınız. Are you sure you want to continue connecting (yes/no)? iletisinden sonra yes yazın.

  8. VM'yi oluştururken tanımladığınız parolayı girin.

  9. DataServer oturumunu kapatmak için exit yazın.

Web erişimini engellemek için güvenlik kuralı oluşturma

AppServer sanal makinesinin HTTP üzerinden DataServer ile iletişim kurabilmesi ama DataServer sanal makinesinin HTTP üzerinden AppServer ile iletişim kuramaması için bir kural ekleyin. Aşağıda bu sunucuların iç IP adresleri verilmiştir:

Sunucu adı IP Adresi
AppServer 10.0.0.4
DataServer 10.0.1.4
  1. 80 numaralı bağlantı noktası üzerinden HTTP erişimini reddedecek yeni bir gelen güvenlik kuralı oluşturmak için Cloud Shell'de aşağıdaki komutu çalıştırın:

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name httpRule \
        --direction Inbound \
        --priority 150 \
        --source-address-prefixes 10.0.1.4 \
        --source-port-ranges '*' \
        --destination-address-prefixes 10.0.0.4 \
        --destination-port-ranges 80 \
        --access Deny \
        --protocol Tcp \
        --description "Deny from DataServer to AppServer on port 80"
    

Sanal makineler arasındaki HTTP bağlantısını test etme

Burada yeni kuralınızın çalışıp çalışmadığını denetleyeceksiniz. AppServer sanal makinesinin HTTP üzerinden DataServer ile iletişim kurabilmesi gerekir. DataServer sanal makinesinin HTTP üzerinden AppServer ile iletişim kuramaması gerekir.

  1. AppServer VM'nize bağlanmak için Cloud Shell'de aşağıdaki komutu çalıştırın. AppServer sanal makinesinin HTTP üzerinden DataServer ile iletişim kurup kuramadığını denetleyin.

    ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
    
  2. VM'yi oluştururken tanımladığınız parolayı girin.

  3. Yanıt 200 OK iletisini içermelidir.

  4. DataServer VM'nize bağlanmak için Cloud Shell'de aşağıdaki komutu çalıştırın. DataServer sanal makinesinin HTTP üzerinden AppServer ile iletişim kurup kuramadığını denetleyin.

    ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
    
  5. VM'yi oluştururken tanımladığınız parolayı girin.

  6. Bu başarısız olmalıdır çünkü 80 numaralı bağlantı noktası üzerinden erişimi engellediniz. Birkaç dakika sonra Connection timed out iletisini almalısınız. Zaman aşımından önce komutu durdurmak için Ctrl+C tuşlarına basın.

Uygulama güvenlik grubunu dağıtma

Ardından, bu gruptaki tüm sunuculara aynı ayarların atanabilmesi için veritabanı sunucuları için bir uygulama güvenlik grubu oluşturun. Daha fazla veritabanı sunucusu dağıtmayı planlıyorsunuz ve bu sunucuların HTTP üzerinden uygulama sunucularına erişmesini engellemek istiyorsunuz. Uygulama kaynak grubuna kaynakları atadığınızda, ağ güvenlik grubunda IP adresleri listesini el ile tutmanız gerekmez. Bunun yerine, yönetmek istediğiniz sanal makinelerin ağ arabirimlerini uygulama güvenlik grubuna atayacaksınız.

Diagram of exercise scenario app security groups.

  1. ERP-DB-SERVERS-ASG adlı yeni bir uygulama güvenlik grubu oluşturmak için Cloud Shell'de aşağıdaki komutu çalıştırın:

    az network asg create \
        --resource-group $rg \
        --name ERP-DB-SERVERS-ASG
    
  2. DataServer'ı uygulama güvenlik grubuyla ilişkilendirmek için Cloud Shell'de aşağıdaki komutu çalıştırın:

    az network nic ip-config update \
        --resource-group $rg \
        --application-security-groups ERP-DB-SERVERS-ASG \
        --name ipconfigDataServer \
        --nic-name DataServerVMNic \
        --vnet-name ERP-servers \
        --subnet Databases
    
  3. ERP-SERVERS-NSG ağ güvenlik grubundaki HTTP kuralını güncelleştirmek için Cloud Shell'de aşağıdaki komutu çalıştırın. ERP-DB-Servers uygulama güvenlik grubuna başvurması gerekir.

    az network nsg rule update \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name httpRule \
        --direction Inbound \
        --priority 150 \
        --source-address-prefixes "" \
        --source-port-ranges '*' \
        --source-asgs ERP-DB-SERVERS-ASG \
        --destination-address-prefixes 10.0.0.4 \
        --destination-port-ranges 80 \
        --access Deny \
        --protocol Tcp \
        --description "Deny from DataServer to AppServer on port 80 using application security group"
    

Güncelleştirilmiş HTTP güvenlik kuralını test etme

  1. AppServer VM'nize bağlanmak için Cloud Shell'de aşağıdaki komutu çalıştırın. AppServer sanal makinesinin HTTP üzerinden DataServer ile iletişim kurup kuramadığını denetleyin.

    ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
    
  2. VM'yi oluştururken tanımladığınız parolayı girin.

  3. Daha önce olduğu gibi yanıt 200 OK iletisini içermelidir. Uygulama güvenlik grubu ayarlarının geçerlilik kazanması bir dakika sürebilir. Başlangıçta 200 OK iletisini almadıysanız bir dakika bekleyin ve yeniden deneyin.

  4. DataServer'ınıza bağlanmak için Cloud Shell'de aşağıdaki komutu çalıştırın. DataServer sanal makinesinin HTTP üzerinden AppServer ile iletişim kurup kuramadığını denetleyin.

    ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
    
  5. VM'yi oluştururken tanımladığınız parolayı girin.

  6. Daha önceki gibi bu da başarısız olmalıdır çünkü 80 numaralı bağlantı noktası üzerinden erişimi engellediniz. Birkaç dakika sonra Connection timed out iletisini almalısınız. Zaman aşımından önce komutu durdurmak için Ctrl+C tuşlarına basın.

Artık ağ güvenlik grubu kuralınızın bir uygulama güvenlik grubu kullanarak kaynak IP adresi kullandığınızla aynı şekilde çalıştığını doğruladınız. Ek veri sunucuları ekleseydik, yeni sunucuları ERP-DB-SERVERS-ASG'ye ekleyerek uygun ağ güvenliğine sahip olduklarından kolayca emin olabilirdik.