كيفية حماية مناطق 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. حدد المستخدمين أو المجموعات المطلوبة لمنح الأذونات.

لقطة شاشة RBAC لمجموعة موارد DNS الخاصة.

يمكن أيضاً منح الأذونات باستخدام 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

الأمر المكافئ متاح أيضاً عبر 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

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

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

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

لقطة شاشة من RBAC لمنطقة DNS الخاصة.

يمكن أيضاً منح الأذونات باستخدام 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

الأمر المكافئ متاح أيضاً عبر 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

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

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

لقطة شاشة من RBAC لمجموعة سجلات DNS الخاصة.

لقطة شاشة لتعيين الدور لمجموعة سجلات DNS الخاصة.

يمكن أيضاً منح أذونات Azure RBAC على مستوى قياسي باستخدام 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

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

الأدوار المخصصة

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

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

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

{
    "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"
    ]
}

تعرف الخاصية Actions الأذونات الخاصة ب DNS التالية:

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

ملاحظة

استخدام دور مخصص 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 create -inputfile <file path>

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

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

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

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

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

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

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

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

لقطة شاشة لأقفال منطقة DNS الخاصة.

يمكن أيضاً إنشاء تأمين الموارد على مستوى المنطقة عبر 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

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

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

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

ملاحظة

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

يمكن حالياً تكوين تأمين موارد مستوى مجموعة السجلات فقط باستخدام Azure PowerShell. وهي غير مدعومة في مدخل Azure أو 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

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

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

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

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

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

# 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

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

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

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

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

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

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