Cara melindungi zona dan data DNS

Catatan

Kami menyarankan agar Anda menggunakan modul Azure Az PowerShell untuk berinteraksi dengan Azure. Lihat Menginstal Azure PowerShell untuk memulai. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.

Zona dan data DNS adalah sumber daya penting. Menghapus zona DNS atau satu data DNS bisa mengakibatkan pemadaman layanan. Penting bahwa zona dan data DNS dilindungi dari perubahan yang tidak sah atau tidak disengaja.

Artikel ini menjelaskan bagaimana Azure DNS memungkinkan Anda melindungi zona dan data DNS privat terhadap perubahan semacam itu. Kami menerapkan dua fitur sekuritas canggih yang disediakan oleh Azure Resource Manager: Kontrol akses berbasis peran Azure (Azure RBAC) dan kunci sumber daya.

Kontrol akses berbasis peran Azure

Kontrol akses berbasis peran Azure (Azure RBAC) memungkinkan manajemen akses yang terperinci untuk pengguna, grup, dan sumber daya Azure. Dengan Azure RBAC, Anda dapat memberikan tingkat akses yang dibutuhkan pengguna. Untuk informasi selengkapnya tentang Azure RBAC, lihat Apa itu kontrol akses berbasis peran Azure (Azure RBAC).

Peran Kontributor Zona DNS Privat

Peran Kontributor Zona DNS adalah peran bawaan untuk mengelola sumber daya DNS privat. Peran ini diterapkan ke pengguna atau grup dan memungkinkannya mengelola sumber daya DNS.

Grup sumber daya myResourceGroup berisi lima zona untuk Contoso Corporation. Memberikan izin Kontributor Zona DNS administrator DNS ke grup sumber daya, memungkinkan kontrol penuh atas zona DNS tersebut. Ini menghindari pemberian izin yang tidak perlu. Administrator DNS tidak bisa membuat atau menghentikan komputer virtual.

Cara paling sederhana untuk menetapkan izin Azure RBAC adalah melalui portal Azure.

Buka Kontrol akses (IAM) untuk grup sumber daya, pilih Tambahkan, lalu pilih peran Kontributor Zona DNS. Pilih pengguna atau grup yang diperlukan untuk memberikan izin.

Cuplikan layar RBAC untuk grup sumber daya DNS pribadi.

Izin juga dapat diberikan menggunakan Azure PowerShell:

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

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

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

Perintah yang setara juga tersedia melalui Azure CLI:

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

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

Azure RBAC tingkat Zona Privat

Aturan Azure RBAC dapat diterapkan ke langganan, grup sumber daya, atau ke sumber daya individual. Sumber daya tersebut bisa berupa zona DNS individual atau rangkaian data individual.

Misalnya, grup sumber daya myPrivateDNS berisi zona private.contoso.com dan subzona customers.private.contoso.com. Data CNAME dibuat untuk setiap akun pelanggan. Akun administrator yang digunakan untuk mengelola data CNAME diberi izin untuk membuat data di zona customers.contoso.com. Akun tersebut hanya dapat mengelola customers.contoso.com.

Izin Azure RBAC tingkat zona dapat diberikan melalui portal Azure. Buka Kontrol akses (IAM) untuk grup sumber daya, pilih Tambahkan, lalu pilih peran Kontributor Zona DNS. Pilih pengguna atau grup yang diperlukan untuk memberikan izin.

Cuplikan layar RBAC untuk zona DNS pribadi.

Izin juga dapat diberikan menggunakan Azure PowerShell:

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

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

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

Perintah yang setara juga tersedia melalui Azure CLI:

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

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

Azure RBAC tingkat rangkaian data

Izin diterapkan di tingkat rangkaian data. Pengguna diberikan kontrol untuk entri yang mereka butuhkan dan tidak dapat membuat perubahan lain.

Izin Azure RBAC tingkat rangkaian data dapat dikonfigurasi melalui portal Azure, menggunakan tombol Access Control (IAM) di halaman rangkaian data:

Cuplikan layar RBAC untuk kumpulan catatan DNS pribadi.

Cuplikan layar penetapan peran untuk kumpulan catatan DNS pribadi.

Izin Azure RBAC tingkat rangkaian data juga dapat diberikan menggunakan Azure PowerShell:

# Grant permissions to a specific record set

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

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

Perintah yang setara juga tersedia melalui Azure CLI:

# Grant permissions to a specific record set

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

Peran kustom

Peran Kontributor Zona DNS bawaan memungkinkan kontrol penuh atas sumber daya DNS. Anda dapat membuat peran Azure kustom Anda sendiri untuk memberikan kontrol yang lebih baik.

Akun yang digunakan untuk mengelola CNAME diberi izin untuk mengelola data CNAME saja. Akun tidak dapat mengubah jenis data lain. Akun tidak dapat melakukan operasi tingkat zona seperti penghapusan zona.

Contoh berikut ini memperlihatkan definisi peran kustom untuk mengelola data CNAME saja:

{
    "Name": "Private DNS CNAME Contributor",
    "Id": "",
    "IsCustom": true,
    "Description": "Can manage DNS CNAME records only.",
    "Actions": [
        "Microsoft.Network/privateDnsZones/CNAME/*",
        "Microsoft.Network/privateDNSZones/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"
    ]
}

Properti Tindakan menentukan izin khusus DNS berikut ini:

  • Microsoft.Network/privateDnsZones/CNAME/* memberikan kontrol penuh atas data CNAME
  • Microsoft.Network/privateDNSZones/read memberikan izin untuk membaca zona privat DNS, tetapi tidak mengubahnya, memungkinkan Anda melihat zona di mana CNAME sedang dibuat.

Catatan

Menggunakan peran kustom Azure untuk mencegah penghapusan rangkaian data, tetapi tetap mengizinkannya diperbarui bukanlah kontrol yang efektif. Tindakan ini mencegah rangkaian data dihapus, tetapi tidak mencegahnya dimodifikasi. Modifikasi yang diizinkan termasuk menambahkan dan menghapus data dari rangkaian data, termasuk menghapus semua data untuk membiarkan rangkaian data kosong. Tindakan ini memiliki efek yang sama seperti menghapus rangkaian data dari sudut pandang resolusi DNS.

Definisi peran kustom saat ini tidak dapat didefinisikan melalui portal Azure. Peran kustom berdasarkan definisi peran ini dapat dibuat menggunakan Azure PowerShell:

# Create new role definition based on input file

New-AzRoleDefinition -InputFile <file path>

Definisi ini juga dapat dibuat melalui Azure CLI:

# Create new role definition based on input file

az role create -inputfile <file path>

Peran kemudian dapat ditetapkan dengan cara yang sama seperti peran bawaan, seperti yang dijelaskan sebelumnya dalam artikel ini.

Untuk informasi selengkapnya tentang cara membuat, mengelola, dan menetapkan peran kustom, lihat Peran kustom Azure.

Penguncian sumber daya

Azure Resource Manager mendukung jenis kontrol keamanan lainnya, yaitu kemampuan untuk mengunci sumber daya. Penguncian sumber daya diterapkan ke sumber daya dan efektif di semua pengguna dan peran. Untuk informasi selengkapnya, lihat Mengunci sumber daya dengan Azure Resource Manager.

Ada dua jenis kunci sumber daya: CanNotDelete dan ReadOnly. Jenis kunci ini dapat diterapkan baik ke zona DNS Privat, atau ke rangkaian data individual. Bagian berikut ini menjelaskan beberapa skenario umum serta cara mendukungnya menggunakan kunci sumber daya.

Melindungi dari semua perubahan

Untuk mencegah perubahan dilakukan, terapkan kunci ReadOnly ke zona tersebut. Kunci ini mencegah pembuatan rangkaian data baru serta modifikasi dan penghapusan rangkaian data yang sudah ada.

Kunci sumber daya tingkat zona dapat dibuat melalui portal Azure. Dari halaman Zona DNS, pilih Kunci, lalu pilih +Tambahkan:

Cuplikan layar kunci untuk zona DNS pribadi.

Kunci sumber daya tingkat zona juga dapat dibuat melalui Azure PowerShell:

# Lock a DNS zone

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

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

Perintah yang setara juga tersedia melalui Azure CLI:

# Lock a DNS zone

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

Melindungi data individual

Untuk mencegah rangkaian data DNS yang sudah ada dimodifikasi, terapkan kunci ReadOnly ke rangkaian data tersebut.

Catatan

Menerapkan kunci CanNotDelete ke rangkaian data bukanlah kontrol yang efektif. Tindakan ini mencegah rangkaian data dihapus, tetapi tidak mencegahnya dimodifikasi. Modifikasi yang diizinkan termasuk menambahkan dan menghapus data dari rangkaian data, termasuk menghapus semua data untuk membiarkan rangkaian data kosong. Tindakan ini memiliki efek yang sama seperti menghapus rangkaian data dari sudut pandang resolusi DNS.

Kunci sumber daya tingkat rangkaian data saat ini hanya dapat dikonfigurasi menggunakan Azure PowerShell. Kunci tersebut tidak didukung di portal Azure atau Azure CLI.

Azure PowerShell

# Lock a DNS record set

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

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

Melindungi terhadap penghapusan zona

Saat zona dihapus di Azure DNS, semua rangkaian data di zona tersebut akan dihapus. Tindakan ini tidak dapat dibatalkan. Secara tidak sengaja menghapus zona penting berpotensi memberikan dampak bisnis yang signifikan. Penting untuk melindungi dari penghapusan zona yang tidak disengaja.

Menerapkan kunci CanNotDelete ke zona mencegah zona dihapus. Kunci diwarisi oleh sumber daya anak. Kunci mencegah setiap rangkaian data di zona tersebut dihapus. Seperti yang dijelaskan dalam catatan di atas, hal tersebut tidak efektif karena data masih bisa dihapus dari rangkaian data yang sudah ada.

Sebagai alternatif, terapkan kunci CanNotDelete ke rangkaian data di zona tersebut, seperti rangkaian data SOA. Zona tidak dihapus tanpa menghapus rangkaian datanya juga. Kunci ini melindungi terhadap penghapusan zona, tetapi tetap mengizinkan rangkaian data di dalam zona dimodifikasi secara bebas. Jika upaya penghapusan zona dilakukan, Azure Resource Manager akan mendeteksi penghapusan ini. Penghapusan juga akan menghapus rangkaian data SOA, Azure Resource Manager akan memblokir panggilan karena SOA dikunci. Tidak ada rangkaian data yang dihapus.

Perintah PowerShell berikut membuat kunci CanNotDelete terhadap data SOA di zona tertentu:

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

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

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

Opsi lain untuk mencegah penghapusan zona yang tidak disengaja adalah dengan menggunakan peran kustom. Peran ini memastikan akun yang digunakan untuk mengelola zona Anda tidak memiliki izin penghapusan zona.

Saat perlu menghapus zona, Anda bisa menerapkan penghapusan dua langkah:

  • Pertama, beri izin penghapusan zona
  • Kedua, beri izin untuk menghapus zona.

Peran kustom berfungsi untuk semua zona yang diakses oleh akun tersebut. Akun dengan izin hapus zona, seperti pemilik langganan, masih bisa menghapus zona secara tidak sengaja.

Anda dapat menggunakan kedua pendekatan tersebut - kunci sumber daya dan peran kustom - pada saat yang sama, sebagai pendekatan pertahanan mendalam untuk perlindungan zona DNS.

Langkah berikutnya