كيفية حماية مناطق وسجلات DNS

إشعار

نوصي باستخدام الوحدة النمطية Azure Az PowerShell للتفاعل مع Azure. للبدء، راجع تثبيت Azure PowerShell. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.

مناطق DNS وسجلاته هي موارد مهمة. يمكن أن يؤدي حذف منطقة DNS أو سجل DNS واحد إلى انقطاع الخدمة. من المهم حماية مناطق وسجلات DNS من التغييرات غير المصرح بها أو العرضية.

توضح هذه المقالة كيف يتيح لك Azure DNS حماية مناطق DNS الخاصة بك والسجلات ضد مثل هذه التغييرات. نحن نطبق ميزتين قويتين للأوراق المالية يوفرهما Azure Resource Manager: التحكم في الوصول المستند إلى الدور Azure (Azure RBAC) و تأمين الموارد.

عنصر تحكم الوصول المستند إلى دور Azure

يتيح عنصر التحكم في الوصول المستند إلى الدور Azure (Azure RBAC) إدارة الوصول الدقيقة لمستخدمي Azure ومجموعاته وموارده. باستخدام Azure RBAC، يمكنك منح مستوى الوصول الذي يحتاجه المستخدمون. لمزيد من المعلومات حول كيفية مساعدة Azure RBAC في إدارة الوصول، انظر ما هو التحكم في الوصول المستند إلى دور Azure (Azure RBAC).

دور مساهم منطقة DNS

يعد دور مساهم منطقة DNS دوراً داخليّاً لإدارة موارد DNS الخاصة. هذا الدور المطبق على مستخدم أو مجموعة تمكنهم من إدارة موارد DNS.

تحتوي مجموعة الموارد myResourceGroup على خمس مناطق لشركة Contoso Corporation. يتيح منح أذونات مساهم منطقة DNS لمسؤول DNS لمجموعة الموارد هذه التحكم الكامل في مناطق DNS هذه. وهو يتجنب منح أذونات غير ضرورية. لا يمكن لمسؤول DNS إنشاء أو إيقاف الأجهزة الظاهرية.

أبسط طريقة لتعيين أذونات AZURE RBAC هي عبر بوابة Azure.

افتح التحكم في الوصول (IAM) لمجموعة الموارد، ثم حدد + إضافة، ثم حدد الدور مساهم منطقة DNS. حدد المستخدمين أو المجموعات المطلوبة لمنح الأذونات.

لقطة شاشة لصفحة التحكم في الوصول لمجموعة الموارد.

يمكن أيضاً منح الأذونات باستخدام Azure PowerShell:

# 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

الأمر المكافئ متاح أيضاً عبر Azure CLI:

# 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>"

مستوى المنطقة Azure RBAC

يمكن تطبيق قواعد Azure RBAC على اشتراك أو مجموعة موارد أو على مورد فردي. يمكن أن يكون هذا المورد منطقة DNS فردية أو مجموعة سجلات فردية.

على سبيل المثال، تحتوي مجموعة الموارد myResourceGroup على المنطقة contoso.com ومنطقة فرعية customers.contoso.com. يتم إنشاء سجلات CNAME لكل حساب عميل. يتم تعيين أذونات لحساب المسؤول المستخدم لإدارة سجلات CNAME لإنشاء السجلات في منطقة customers.contoso.com. يمكن للحساب إدارة customers.contoso.com فقط.

يمكن منح أذونات Azure RBAC على مستوى المنطقة عبر مدخل Azure. افتح Access control (IAM) للمنطقة، وحدد + Add، ثم حدد دور DNS Zone Contributor وحدد المستخدمين أو المجموعات المطلوبة لمنح الأذونات.

لقطة شاشة لصفحة التحكم في الوصول لمنطقة DNS.

يمكن أيضاً منح الأذونات باستخدام Azure PowerShell:

# 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

الأمر المكافئ متاح أيضاً عبر Azure CLI:

# 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>/"

مستوى مجموعة الأرقام القياسية Azure RBAC

يتم تطبيق الأذونات على مستوى مجموعة السجلات. يتم منح المستخدم التحكم في الإدخالات التي يحتاجها وغير قادر على إجراء أية تغييرات أخرى.

يمكن تكوين أذونات Azure RBAC على مستوى مجموعة السجلات عبر مدخل Microsoft Azure، باستخدام زر Users في صفحة مجموعة السجلات:

لقطة شاشة لزر المستخدم في مجموعة السجلات.

يمكن أيضاً منح أذونات Azure RBAC على مستوى قياسي باستخدام Azure PowerShell:

# 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

الأمر المكافئ متاح أيضاً عبر Azure CLI:

# 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>"

أدوار مخصصة

يتيح دور مساهم منطقة DNS المضمّن التحكم الكامل في مورد DNS. من الممكن إنشاء أدوار Azure المخصصة الخاصة بك لتوفير تحكم أفضل.

يتم منح الحساب المستخدم لإدارة CNAMEs الإذن لإدارة سجلات CNAME فقط. الحساب غير قادر على تعديل سجلات الأنواع الأخرى. الحساب غير قادر على القيام بعمليات على مستوى المنطقة مثل حذف المنطقة.

يظهر المثال التالي تعريف دور مخصص لإدارة سجلات CNAME فقط:

{
    "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 الأذونات الخاصة ب DNS التالية:

  • Microsoft.Network/dnsZones/CNAME/* منح السيطرة الكاملة على سجلات CNAME
  • Microsoft.Network/dnsZones/read يمنح الإذن لقراءة مناطق DNS، ولكن ليس لتعديلها، ما يتيح لك رؤية المنطقة التي يتم فيها إنشاء CNAME.

يتم نسخ الإجراءات المتبقية من الدور المضمن لمساهم منطقة DNS.

إشعار

استخدام دور مخصص Azure لمنع حذف مجموعات السجلات بينما لا يزال يسمح لهم تحديث ليس عنصر تحكم فعال. يمنع حذف مجموعات السجلات، ولكنه لا يمنع تعديلها. تتضمن التعديلات المسموح بها إضافة وإزالة سجلات من مجموعة السجلات، بما في ذلك إزالة كافة السجلات لترك مجموعة سجلات فارغة. هذا له نفس التأثير مثل حذف مجموعة السجلات من وجهة نظر دقة DNS.

لا يمكن تعريف تعريفات الأدوار المخصصة حالياً عبر مدخل Azure. يمكن إنشاء دور مخصص يستند إلى تعريف الدور هذا باستخدام Azure PowerShell:

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

ويمكن أيضاً إنشاؤه عن طريق Azure CLI:

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

يمكن تعيين الدور بنفس الطريقة التي يتم بها تعيين الأدوار المضمنة، كما هو موضح سابقاً في هذه المقالة.

لمزيد من المعلومات حول كيفية إنشاء وإدارة وتعيين أدوار مخصصة، راجع أدوار Azure المخصصة.

تأمين الموارد

يدعم إدارة موارد Azure نوع آخر من التحكم بالأمان، وهو القدرة على تأمين الموارد. يتم تطبيق تأمين الموارد على المورد، وهي فعالة عبر كافة المستخدمين والأدوار. لمزيد من المعلومات، راجع تأمين الموارد باستخدام Azure Resource Manager.

هناك نوعان من تأمين المورد: CanNotDelete و ReadOnly. يمكن تطبيق أنواع التأمين هذه إما على منطقة DNS خاصة أو على مجموعة سجلات فردية. تصف المقاطع التالية عدة سيناريوهات شائعة وكيفية دعمها باستخدام تأمين الموارد.

الحماية من جميع التغييرات

لمنع إجراء تغييرات، طبّق تأمين ReadOnly إلى المنطقة. يمنع هذا التأمين إنشاء مجموعات سجلات جديدة، كما يمنع تعديل مجموعات السجلات الموجودة أو حذفها.

يمكن إنشاء تأمين المورد على مستوى المنطقة عبر مدخل Azure. من صفحة منطقة نظام أسماء النطاقات، حدد Locks، ثم حدد + Add:

لقطة شاشة لأقفال مورد على مستوى المنطقة.

يمكن أيضاً إنشاء تأمين الموارد على مستوى المنطقة عبر Azure PowerShell:

# 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

الأمر المكافئ متاح أيضاً عبر 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 "DnsZones" \
--resource-group "<resource group name>"

حماية السجلات الفردية

لمنع تعيين سجل DNS موجود مقابل التعديل، قم بتطبيق تأمين ReadOnly على مجموعة السجلات.

إشعار

تطبيق تأمين CanNotDelete على مجموعة سجلات ليس عنصر تحكم فعال. يمنع مجموعة السجلات من الحذف، ولكنه لا يمنع تعديلها. تتضمن التعديلات المسموح بها إضافة وإزالة سجلات من مجموعة السجلات، بما في ذلك إزالة كافة السجلات لترك مجموعة سجلات فارغة. هذا له نفس التأثير مثل حذف مجموعة السجلات من وجهة نظر دقة DNS.

يمكن حالياً تكوين تأمين موارد مستوى مجموعة السجلات فقط باستخدام Azure PowerShell. وهي غير مدعومة في مدخل Azure أو Azure CLI.

# 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

الحماية من حذف المنطقة

عند حذف منطقة في Azure DNS، يتم حذف كافة مجموعات السجلات في المنطقة. لا يمكن التراجع عن هذه العملية. حذف منطقة حرجة عن طريق الخطأ لديه القدرة على أن يكون لها تأثير تجاري كبير. من المهم الحماية من الحذف العرضي للمنطقة.

تطبيق تأمين CanNotDelete على منطقة يمنع المنطقة من الحذف. يتم توارث الأقفال بواسطة الموارد التابعة. يمنع التأمين حذف أية مجموعات سجلات في المنطقة. كما هو موضح في الملاحظة أعلاه ، فإنه غير فعال لأنه لا يزال من الممكن إزالة السجلات من مجموعات السجلات الموجودة.

كبديل، تطبيق تأمين CanNotDelete على سجل تم تعيينه في المنطقة، مثل مجموعة الأرقام القياسية SOA. لا يتم حذف المنطقة دون حذف مجموعات السجلات أيضاً. يحمي هذا التأمين من حذف المنطقة، بينما لا يزال يسمح بتعديل مجموعات السجلات داخل المنطقة بحرية. إذا تم إجراء محاولة لحذف المنطقة، يكشف إدارة موارد Azure عن هذه الإزالة. ستحذف الإزالة أيضاً مجموعة السجلات SOA، إدارة الموارد Azure كتل المكالمة بسبب تأمين SOA. لا يتم حذف أية مجموعات سجلات.

الأمر PowerShell التالي بإنشاء تأمين CanNotDelete مقابل سجل SOA للمنطقة المحددة:

# 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

خيار آخر لمنع حذف المنطقة العرضية باستخدام دور مخصص. يضمن هذا الدور أن الحسابات المستخدمة لإدارة المناطق الخاصة بك لا تملك أذونات حذف المنطقة.

عندما تحتاج إلى حذف منطقة، يمكنك فرض حذف من خطوتين:

  • أولاً، منح أذونات حذف منطقة
  • ثانياً، منح أذونات لحذف المنطقة.

يعمل الدور المخصص لكافة المناطق التي تم الوصول إليها بواسطة هذه الحسابات. لا يزال بإمكان الحسابات التي لديها أذونات حذف المنطقة، مثل مالك الاشتراك، حذف منطقة ما بطريق الخطأ.

من الممكن استخدام كلا النهجين - تأمين الموارد والأدوار المخصصة - في نفس الوقت ، كنهج دفاعي متعمق لحماية منطقة DNS.

الخطوات التالية