DNS bölgelerini ve kayıtlarını koruma

Not

Azure ile etkileşime geçmek için Azure Az PowerShell modülünü kullanmanızı öneririz. Başlamak için bkz. Azure PowerShell'i yükleme. Az PowerShell modülüne nasıl geçeceğinizi öğrenmek için bkz. Azure PowerShell’i AzureRM’den Az’ye geçirme.

DNS bölgeleri ve kayıtları, kritik öneme sahip kaynaklardır. DNS bölgesinin veya tek bir DNS kaydının silinmesi hizmet kesintisine neden olabilir. DNS bölgelerinin ve kayıtlarının yetkisiz veya yanlışlıkla yapılan değişikliklere karşı korunması önemlidir.

Bu makalede, Azure DNS'nin özel DNS bölgelerinizi ve kayıtlarınızı bu tür değişikliklere karşı korumanıza nasıl olanak sağladığı açıklanmaktadır. Azure Resource Manager tarafından sağlanan iki güçlü güvenlik özelliği uyguluyoruz: Azure rol tabanlı erişim denetimi (Azure RBAC) ve kaynak kilitleri.

Azure rol tabanlı erişim denetimi

Azure rol tabanlı erişim denetimi (Azure RBAC), Azure kullanıcıları, grupları ve kaynakları için ayrıntılı erişim yönetimi sağlar. Azure RBAC ile kullanıcıların ihtiyaç duyduğu erişim düzeyini vekleyebilirsiniz. Azure RBAC'nin erişimi yönetmenize nasıl yardımcı olduğu hakkında daha fazla bilgi için bkz. Azure rol tabanlı erişim denetimi (Azure RBAC) nedir?

DNS Bölgesi Katkıda Bulunanı rolü

DNS Bölgesi Katılımcısı rolü, özel DNS kaynaklarını yönetmek için yerleşik bir roldür. Bir kullanıcı veya gruba uygulanan bu rol, DNS kaynaklarını yönetmesini sağlar.

myResourceGroup kaynak grubu Contoso Corporation için beş bölge içerir. DNS yöneticisine bu kaynak grubuna DNS Bölgesi Katkıda Bulunanı izinleri vermek, bu DNS bölgeleri üzerinde tam denetim sağlar. Gereksiz izinler verilmesini önler. DNS yöneticisi sanal makine oluşturamaz veya durduramaz.

Azure RBAC izinlerini atamanın en basit yolu Azure portal.

Kaynak grubu için Erişim denetimini (IAM) açın, + Ekle'yi ve ardından DNS Bölgesi Katkıda Bulunanı rolünü seçin. İzin vermek için gerekli kullanıcıları veya grupları seçin.

Kaynak grubu için erişim denetimi sayfasının ekran görüntüsü.

İzinler Azure PowerShell kullanılarak da verilebilir:

# Grant 'DNS Zone Contributor' permissions to all zones in a resource group

$usr = "<user email address>"
$rol = "DNS Zone Contributor"
$rsg = "<resource group name>"

New-AzRoleAssignment -SignInName $usr -RoleDefinitionName $rol -ResourceGroupName $rsg

Eşdeğer komut , Azure CLI aracılığıyla da kullanılabilir:

# Grant 'DNS Zone Contributor' permissions to all zones in a resource group

az role assignment create \
--assignee "<user email address>" \
--role "DNS Zone Contributor" \
--resource-group "<resource group name>"

Bölge düzeyi Azure RBAC

Azure RBAC kuralları bir aboneliğe, kaynak grubuna veya tek bir kaynağa uygulanabilir. Bu kaynak tek bir DNS bölgesi veya tek bir kayıt kümesi olabilir.

Örneğin , myResourceGroup kaynak grubu bölge contoso.com ve bir alt bölge customers.contoso.com içerir. Her müşteri hesabı için CNAME kayıtları oluşturulur. CNAME kayıtlarını yönetmek için kullanılan yönetici hesabına customers.contoso.com bölgesinde kayıt oluşturma izinleri atanır. Hesap yalnızca customers.contoso.com yönetebilir.

Bölge düzeyinde Azure RBAC izinleri Azure portal aracılığıyla verilebilir. Bölge için Erişim denetimini (IAM) açın, + Ekle'yi seçin, ardından DNS Bölgesi Katılımcısı rolünü seçin ve izin vermek için gerekli kullanıcıları veya grupları seçin.

DNS bölgesi için erişim denetimi sayfasının ekran görüntüsü.

İzinler Azure PowerShell kullanılarak da verilebilir:

# Grant 'DNS Zone Contributor' permissions to a specific zone

$usr = "<user email address>"
$rol = "DNS Zone Contributor"
$rsg = "<resource group name>"
$zon = "<zone name>"
$typ = "Microsoft.Network/DNSZones"

New-AzRoleAssignment -SignInName $usr -RoleDefinitionName $rol -ResourceGroupName $rsg -ResourceName $zon -ResourceType $typ

Eşdeğer komut , Azure CLI aracılığıyla da kullanılabilir:

# Grant 'DNS Zone Contributor' permissions to a specific zone

az role assignment create \
--assignee <user email address> \
--role "DNS Zone Contributor" \
--scope "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/DnsZones/<zone name>/"

Kayıt kümesi düzeyi Azure RBAC

İzinler kayıt kümesi düzeyinde uygulanır. Kullanıcıya ihtiyacı olan girdilere denetim verilir ve başka bir değişiklik yapamaz.

Kayıt kümesi düzeyinde Azure RBAC izinleri, kayıt kümesi sayfasındaki Kullanıcılar düğmesi kullanılarak Azure portal aracılığıyla yapılandırılabilir:

Kayıt kümesindeki kullanıcı düğmesinin ekran görüntüsü.

Kayıt kümesi düzeyi Azure RBAC izinleri de Azure PowerShell kullanılarak verilebilir:

# Grant permissions to a specific record set

$usr = "<user email address>"
$rol = "DNS Zone Contributor"
$sco = 
"/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/dnszones/<zone name>/<record type>/<record name>"

New-AzRoleAssignment -SignInName $usr -RoleDefinitionName $rol -Scope $sco

Eşdeğer komut , Azure CLI aracılığıyla da kullanılabilir:

# Grant permissions to a specific record set

az role assignment create \
--assignee "<user email address>" \
--role "DNS Zone Contributor" \
--scope "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/dnszones/<zone name>/<record type>/<record name>"

Özel roller

Yerleşik DNS Bölgesi Katılımcısı rolü, DNS kaynağı üzerinde tam denetim sağlar. Daha ayrıntılı denetim sağlamak için kendi özel Azure rollerinizi oluşturabilirsiniz.

CNAME'leri yönetmek için kullanılan hesaba yalnızca CNAME kayıtlarını yönetme izni verilir. Hesap diğer türlerdeki kayıtları değiştiremiyor. Hesap, bölge silme gibi bölge düzeyinde işlemler gerçekleştiremiyor.

Aşağıdaki örnekte yalnızca CNAME kayıtlarını yönetmek için özel bir rol tanımı gösterilmektedir:

{
    "Name": "DNS CNAME Contributor",
    "Id": "",
    "IsCustom": true,
    "Description": "Can manage DNS CNAME records only.",
    "Actions": [
        "Microsoft.Network/dnsZones/CNAME/*",
        "Microsoft.Network/dnsZones/read",
        "Microsoft.Authorization/*/read",
        "Microsoft.Insights/alertRules/*",
        "Microsoft.ResourceHealth/availabilityStatuses/read",
        "Microsoft.Resources/deployments/*",
        "Microsoft.Resources/subscriptions/resourceGroups/read",
        "Microsoft.Support/*"
    ],
    "NotActions": [
    ],
    "AssignableScopes": [
        "/subscriptions/c276fc76-9cd4-44c9-99a7-4fd71546436e"
    ]
}

Actions özelliği aşağıdaki DNS'ye özgü izinleri tanımlar:

  • Microsoft.Network/dnsZones/CNAME/* CNAME kayıtları üzerinde tam denetim verir
  • Microsoft.Network/dnsZones/read DNS bölgelerini okuma izni verir, ancak bunları değiştirme izni vermez ve CNAME'nin oluşturulduğu bölgeyi görmenize olanak tanır.

Kalan Eylemler DNS Bölgesi Katkıda Bulunanı yerleşik rolünden kopyalanır.

Not

Kayıt kümelerinin yine de güncelleştirilmesine izin verirken silinmesini önlemek için Azure özel rolü kullanmak etkili bir denetim değildir. Kayıt kümelerinin silinmesini engeller, ancak bunların değiştirilmesini engellemez. İzin verilen değişiklikler, boş bir kayıt kümesinden çıkmak için tüm kayıtları kaldırmak da dahil olmak üzere kayıt kümesine kayıt ekleme ve kaldırmayı içerir. Bu, kayıt kümesini BIR DNS çözümlemesi bakış noktasından silmekle aynı etkiye sahiptir.

Özel rol tanımları şu anda Azure portal aracılığıyla tanımlanamaz. Bu rol tanımına dayalı özel bir rol Azure PowerShell kullanılarak oluşturulabilir:

# Create new role definition based on input file
New-AzRoleDefinition -InputFile <file path>

Azure CLI aracılığıyla da oluşturulabilir:

# Create new role definition based on input file
az role definition create --role-definition <file path>

Daha sonra rol, bu makalenin önceki bölümlerinde açıklandığı gibi yerleşik rollerle aynı şekilde atanabilir.

Özel roller oluşturma, yönetme ve atama hakkında daha fazla bilgi için bkz. Azure özel rolleri.

Kaynak kilitleri

Azure Resource Manager, kaynakları kilitleme özelliği olan başka bir güvenlik denetimi türünü destekler. Kaynak kilitleri kaynağa uygulanır ve tüm kullanıcılar ve roller için geçerlidir. Daha fazla bilgi için bkz. Azure Resource Manager ile kaynakları kilitleme.

İki tür kaynak kilidi vardır: CanNotDelete ve ReadOnly. Bu kilit türleri bir Özel DNS bölgesine veya tek bir kayıt kümesine uygulanabilir. Aşağıdaki bölümlerde çeşitli yaygın senaryolar ve bunların kaynak kilitleri kullanılarak nasıl desteklenmeleri açıklanmaktadır.

Tüm değişikliklere karşı koruma

Değişikliklerin yapılmasını önlemek için bölgeye ReadOnly kilidi uygulayın. Bu kilit, yeni kayıt kümelerinin oluşturulmasını ve mevcut kayıt kümelerinin değiştirilmesini veya silinmesini engeller.

Bölge düzeyinde kaynak kilitleri Azure portal aracılığıyla oluşturulabilir. DNS bölgesi sayfasında Kilitler'i ve ardından + Ekle'yi seçin:

Bölge düzeyi kaynak kilitlerinin ekran görüntüsü.

Bölge düzeyinde kaynak kilitleri de Azure PowerShell aracılığıyla oluşturulabilir:

# Lock a DNS zone

$lvl = "<lock level>"
$lnm = "<lock name>"
$rsc = "<zone name>"
$rty = "Microsoft.Network/DNSZones"
$rsg = "<resource group name>"

New-AzResourceLock -LockLevel $lvl -LockName $lnm -ResourceName $rsc -ResourceType $rty -ResourceGroupName $rsg

Eşdeğer komut , Azure CLI aracılığıyla da kullanılabilir:

# Lock a DNS zone

az lock create \
--lock-type "<lock level>" \
--name "<lock name>" \
--resource-name "<zone name>" \
--namespace "Microsoft.Network" \
--resource-type "DnsZones" \
--resource-group "<resource group name>"

Tek tek kayıtları koruma

Var olan bir DNS kayıt kümesinin değiştirilmesini önlemek için kayıt kümesine ReadOnly kilidi uygulayın.

Not

Bir kayıt kümesine CanNotDelete kilidi uygulamak etkili bir denetim değildir. Kayıt kümesinin silinmesini engeller, ancak değiştirilmesini engellemez. İzin verilen değişiklikler, boş bir kayıt kümesinden çıkmak için tüm kayıtları kaldırmak da dahil olmak üzere kayıt kümesine kayıt ekleme ve kaldırmayı içerir. Bu, kayıt kümesini BIR DNS çözümlemesi bakış noktasından silmekle aynı etkiye sahiptir.

Kayıt kümesi düzeyinde kaynak kilitleri şu anda yalnızca Azure PowerShell kullanılarak yapılandırılabilir. Bunlar Azure portal veya Azure CLI'da desteklenmez.

# Lock a DNS record set

$lvl = "<lock level>"
$lnm = "<lock name>"
$rsc = "<zone name>/<record set name>"
$rty = "Microsoft.Network/DNSZones/<record type>"
$rsg = "<resource group name>"

New-AzResourceLock -LockLevel $lvl -LockName $lnm -ResourceName $rsc -ResourceType $rty -ResourceGroupName $rsg

Bölge silmeye karşı koruma

Azure DNS'de bir bölge silindiğinde, bölgedeki tüm kayıt kümeleri silinir. Bu işlem geri alınamaz. Kritik bir bölgeyi yanlışlıkla silmenin iş açısından önemli bir etkisi olabilir. Yanlışlıkla bölge silmeye karşı koruma sağlamak önemlidir.

Bölgeye CanNotDelete kilidi uygulanması, bölgenin silinmesini engeller. Kilitler alt kaynaklar tarafından devralınır. Kilit, bölgedeki tüm kayıt kümelerinin silinmesini engeller. Yukarıdaki notta açıklandığı gibi, kayıtlar mevcut kayıt kümelerinden kaldırılabildiği için etkisizdir.

Alternatif olarak, bölgedeki soA kayıt kümesi gibi bir kayıt kümesine CanNotDelete kilidi uygulayın. Bölge, kayıt kümeleri de silinmeden silinmez. Bu kilit bölge silmeye karşı koruma sağlarken, bölge içindeki kayıt kümelerinin serbestçe değiştirilmesine izin verir. Bölgeyi silme girişiminde bulunulması durumunda Azure Resource Manager bu kaldırma işlemini algılar. Kaldırma işlemi SOA kayıt kümesini de siler, SoA kilitli olduğundan Azure Resource Manager çağrıyı engeller. Hiçbir kayıt kümesi silinmez.

Aşağıdaki PowerShell komutu, verilen bölgenin SOA kaydına karşı bir CanNotDelete kilidi oluşturur:

# Protect against zone delete with CanNotDelete lock on the record set

$lvl = "CanNotDelete"
$lnm = "<lock name>"
$rsc = "<zone name>/@"
$rty = "Microsoft.Network/DNSZones/SOA"
$rsg = "<resource group name>"

New-AzResourceLock -LockLevel $lvl -LockName $lnm -ResourceName $rsc -ResourceType $rty -ResourceGroupName $rsg

Bölgenin yanlışlıkla silinmesini önlemeye yönelik bir diğer seçenek de özel bir rol kullanmaktır. Bu rol, bölgelerinizi yönetmek için kullanılan hesapların bölge silme izinlerine sahip olmamasını sağlar.

Bir bölgeyi silmeniz gerektiğinde, iki aşamalı silmeyi zorunlu kılabilirsiniz:

  • İlk olarak, bölge silme izinleri verin
  • İkincisi, bölgeyi silmek için izinler verin.

Özel rol, bu hesaplar tarafından erişilen tüm bölgelerde çalışır. Abonelik sahibi gibi bölge silme izinlerine sahip hesaplar, bir bölgeyi yanlışlıkla silmeye devam edebilir.

DNS bölgesi korumasına derinlemesine savunma yaklaşımı olarak hem kaynak kilitleri hem de özel roller gibi yaklaşımları aynı anda kullanmak mümkündür.

Sonraki adımlar