خيارات بيانات الاعتماد في بيانات التكوين

ينطبق على: Windows PowerShell 5.0

كلمات مرور النص العادي ومستخدمي المجال

ستنشئ تكوينات DSC التي تحتوي على بيانات اعتماد بدون تشفير رسالة خطأ حول كلمات مرور النص العادي. أيضا، سيقوم DSC بإنشاء تحذير عند استخدام بيانات اعتماد المجال. لمنع رسائل الخطأ والتحذير هذه، استخدم الكلمات الأساسية لبيانات تكوين DSC:

  • PsDscAllowPlainTextPassword
  • PsDscAllowDomainUser

ملاحظة

تخزين/نقل كلمات مرور نص عادي غير مشفرة غير آمن بشكل عام. يوصى بتأمين بيانات الاعتماد باستخدام التقنيات التي تمت تغطيتها لاحقا في هذا الموضوع. تسمح لك خدمة Azure Automation DSC بإدارة بيانات الاعتماد مركزيا ليتم تجميعها في التكوينات وتخزينها بأمان. للحصول على معلومات، راجع: تجميع تكوينات DSC / أصول بيانات الاعتماد

معالجة بيانات الاعتماد في DSC

يتم تشغيل موارد تكوين DSC بشكل Local System افتراضي. ومع ذلك، تحتاج بعض الموارد إلى بيانات اعتماد، على سبيل المثال عندما Package يحتاج المورد إلى تثبيت برنامج ضمن حساب مستخدم معين.

استخدمت الموارد السابقة اسم خاصية مشفرة Credential مضمنة للتعامل مع هذا. أضاف WMF 5.0 خاصية تلقائية PsDscRunAsCredential لجميع الموارد. للحصول على معلومات حول استخدام PsDscRunAsCredential، راجع تشغيل DSC مع بيانات اعتماد المستخدم. يمكن للموارد الأحدث والموارد المخصصة استخدام هذه الخاصية التلقائية بدلا من إنشاء الخاصية الخاصة بها لبيانات الاعتماد.

ملاحظة

تصميم بعض الموارد هو استخدام بيانات اعتماد متعددة لسبب معين، وسيكون لها خصائص بيانات الاعتماد الخاصة بها.

للعثور على خصائص بيانات الاعتماد المتوفرة على مورد، استخدم إما Get-DscResource -Name ResourceName -Syntax أو Intellisense في ISE (CTRL+SPACE).

Get-DscResource -Name Group -Syntax
Group [String] #ResourceName
{
    GroupName = [string]
    [Credential = [PSCredential]]
    [DependsOn = [string[]]]
    [Description = [string]]
    [Ensure = [string]{ Absent | Present }]
    [Members = [string[]]]
    [MembersToExclude = [string[]]]
    [MembersToInclude = [string[]]]
    [PsDscRunAsCredential = [PSCredential]]
}

يستخدم هذا المثال مورد مجموعة من PSDesiredStateConfiguration وحدة مورد DSC المضمنة. يمكنه إنشاء مجموعات محلية وإضافة أعضاء أو إزالتهم. يقبل كلا من الخاصية Credential والخاصية التلقائية PsDscRunAsCredential . ومع ذلك، يستخدم المورد الخاصية Credential فقط.

لمزيد من المعلومات حول الخاصية PsDscRunAsCredential ، راجع تشغيل DSC باستخدام بيانات اعتماد المستخدم.

مثال: خاصية بيانات اعتماد مورد المجموعة

يتم تشغيل DSC ضمن Local System، لذلك لديه بالفعل أذونات لتغيير المستخدمين والمجموعات المحلية. إذا كان العضو الذي تمت إضافته حسابا محليا، فلن تكون هناك ضرورة لبيانات الاعتماد. Group إذا أضاف المورد حساب مجال إلى المجموعة المحلية، فمن الضروري وجود بيانات اعتماد.

الاستعلامات المجهولة إلى Active Directory غير مسموح بها. Credential خاصية Group المورد هي حساب المجال المستخدم للاستعلام عن Active Directory. بالنسبة لمعظم الأغراض، قد يكون هذا حساب مستخدم عام، لأنه بشكل افتراضي يمكن للمستخدمين قراءة معظم الكائنات في Active Directory.

مثال على التكوين

يستخدم مثال التعليمات البرمجية التالي DSC لملء مجموعة محلية بمستخدم مجال:

Configuration DomainCredentialExample
{
    param
    (
        [PSCredential] $DomainCredential
    )
    Import-DscResource -ModuleName PSDesiredStateConfiguration

    node localhost
    {
        Group DomainUserToLocalGroup
        {
            GroupName        = 'ApplicationAdmins'
            MembersToInclude = 'contoso\alice'
            Credential       = $DomainCredential
        }
    }
}

$cred = Get-Credential -UserName contoso\genericuser -Message "Password please"
DomainCredentialExample -DomainCredential $cred

تنشئ هذه التعليمة البرمجية رسالة خطأ وتحذير:

ConvertTo-MOFInstance : System.InvalidOperationException error processing property 'Credential' OF
TYPE 'Group': Converting and storing encrypted passwords as plain text is not recommended.
For more information on securing credentials in MOF file, please refer to MSDN blog:
https://go.microsoft.com/fwlink/?LinkId=393729

At line:11 char:9
+   Group
At line:341 char:16
+     $aliasId = ConvertTo-MOFInstance $keywordName $canonicalizedValue
+                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Write-Error], InvalidOperationException
    + FullyQualifiedErrorId : FailToProcessProperty,ConvertTo-MOFInstance
WARNING: It is not recommended to use domain credential for node 'localhost'. In order to suppress
the warning, you can add a property named 'PSDscAllowDomainUser' with a value of $true to your DSC
configuration data for node 'localhost'.

Compilation errors occurred while processing configuration
'DomainCredentialExample'. Please review the errors reported in error stream and modify your
configuration code appropriately.
At C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\PSDesiredStateConfiguration\PSDesiredStateConfiguration.psm1:3917 char:5
+     throw $ErrorRecord
+     ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (DomainCredentialExample:String) [], InvalidOperationException
    + FullyQualifiedErrorId : FailToProcessConfiguration

يحتوي هذا المثال على مسألتين:

  1. يوضح خطأ أنه لا يوصى باستخدام كلمات مرور النص العادي
  2. تحذير ينصح بعدم استخدام بيانات اعتماد المجال

تعمل العلامات PSDSCAllowPlainTextPasswordوPSDSCAllowDomainUser على منع الخطأ والتحذير لإعلام المستخدم بالمخاطر المعنية.

PSDSCAllowPlainTextPassword

تحتوي رسالة الخطأ الأولى على عنوان URL مع وثائق. يشرح هذا الارتباط كيفية تشفير كلمات المرور باستخدام بنية ConfigurationData وشهادة. لمزيد من المعلومات حول الشهادات وDSC اقرأ هذا المنشور.

لفرض كلمة مرور نص عادي، يتطلب PsDscAllowPlainTextPassword المورد الكلمة الأساسية في قسم بيانات التكوين كما يلي:

$password = "ThisIsAPlaintextPassword" | ConvertTo-SecureString -asPlainText -Force
$username = "contoso\Administrator"
[PSCredential] $credential = New-Object System.Management.Automation.PSCredential($username,$password)

Configuration DomainCredentialExample
{
    Import-DscResource -ModuleName PSDesiredStateConfiguration

    node localhost
    {
        Group DomainUserToLocalGroup
        {
            GroupName        = 'ApplicationAdmins'
            MembersToInclude = 'contoso\alice'
            Credential       = $credential
        }
    }
}

$cd = @{
    AllNodes = @(
        @{
            NodeName = 'localhost'
            PSDscAllowPlainTextPassword = $true
        }
    )
}

DomainCredentialExample -ConfigurationData $cd

localhost.mof

تتطلب علامة PSDSCAllowPlainTextPassword أن يقر المستخدم بخطر تخزين كلمات مرور النص العادي في ملف MOF. في ملف MOF الذي تم إنشاؤه، على الرغم من استخدام كائن PSCredential يحتوي على SecureString ، لا تزال كلمات المرور تظهر كنص عادي. هذه هي المرة الوحيدة التي يتم فيها الكشف عن بيانات الاعتماد. يمنح الوصول إلى ملف MOF هذا أي شخص حق الوصول إلى حساب المسؤول.

/*
@TargetNode='localhost'
@GeneratedBy=Administrator
@GenerationDate=01/31/2019 06:43:13
@GenerationHost=Server01
*/

instance of MSFT_Credential as $MSFT_Credential1ref
{
Password = "ThisIsAPlaintextPassword";
 UserName = "Administrator";

};

instance of MSFT_GroupResource as $MSFT_GroupResource1ref
{
ResourceID = "[Group]DomainUserToLocalGroup";
 MembersToInclude = {
    "contoso\\alice"
};
 Credential = $MSFT_Credential1ref;
 SourceInfo = "::11::9::Group";
 GroupName = "ApplicationAdmins";
 ModuleName = "PSDesiredStateConfiguration";

ModuleVersion = "1.0";

 ConfigurationName = "DomainCredentialExample";

};

بيانات الاعتماد أثناء النقل وفي حالة الثبات

  • تسمح علامة PSDscAllowPlainTextPassword بتجميع ملفات MOF التي تحتوي على كلمات مرور في نص واضح. اتخاذ الاحتياطات عند تخزين ملفات MOF التي تحتوي على كلمات مرور نصية واضحة.
  • عند تسليم ملف MOF إلى عقدة في وضع الدفع ، يقوم WinRM بتشفير الاتصال لحماية كلمة مرور النص الواضح ما لم تتجاوز الإعداد الافتراضي باستخدام المعلمة AllowUnencrypted .
    • يحمي تشفير MOF بشهادة ملف MOF في وضع الراحة قبل تطبيقه على عقدة.
  • في وضع السحب ، يمكنك تكوين خادم سحب Windows لاستخدام HTTPS لتشفير نسبة استخدام الشبكة باستخدام البروتوكول المحدد في خادم معلومات الإنترنت. لمزيد من المعلومات، راجع المقالات إعداد عميل سحب DSCوتأمين ملفات MOF باستخدام الشهادات.
  • في العقدة، يتم تشفير ملفات MOF في وضع الثبات بدءا من PowerShell 5.0.
    • في PowerShell 4.0 يتم فك تشفير ملفات MOF في حالة عدم التشغيل ما لم يتم تشفيرها بشهادة عند دفعها أو سحبها إلى العقدة.

تنصح Microsoft بتجنب كلمات مرور النص العادي بسبب المخاطر الأمنية الكبيرة.

بيانات اعتماد المجال

تشغيل مثال البرنامج النصي للتكوين مرة أخرى (مع التشفير أو بدونه)، لا يزال ينشئ تحذيرا بأنه لا يوصى باستخدام حساب مجال لبيانات الاعتماد. يؤدي استخدام حساب محلي إلى التخلص من التعرض المحتمل لبيانات اعتماد المجال التي يمكن استخدامها على خوادم أخرى.

عند استخدام بيانات الاعتماد مع موارد DSC، تفضل حسابا محليا على حساب مجال عندما يكون ذلك ممكنا.

إذا كان هناك '\' أو '@' في Username خاصية بيانات الاعتماد، فسيعاملها DSC كحساب مجال. هناك استثناء ل "localhost" و"127.0.0.1" و"::1" في جزء المجال من اسم المستخدم.

PSDscAllowDomainUser

في مثال مورد DSC Group أعلاه، يتطلب الاستعلام عن مجال Active Directory حساب مجال. في هذه الحالة، أضف الخاصية PSDscAllowDomainUser إلى ConfigurationData الكتلة كما يلي:

$password = "ThisIsAPlaintextPassword" | ConvertTo-SecureString -asPlainText -Force
$username = "contoso\Administrator"
[PSCredential] $credential = New-Object System.Management.Automation.PSCredential($username,$password)

Configuration DomainCredentialExample
{
    Import-DscResource -ModuleName PSDesiredStateConfiguration

    node localhost
    {
        Group DomainUserToLocalGroup
        {
            GroupName        = 'ApplicationAdmins'
            MembersToInclude = 'contoso\alice'
            Credential       = $credential
        }
    }
}

$cd = @{
    AllNodes = @(
        @{
            NodeName = 'localhost'
            PSDscAllowDomainUser = $true
            PSDscAllowPlainTextPassword = $true
        }
    )
}

DomainCredentialExample -ConfigurationData $cd

الآن سيقوم البرنامج النصي للتكوين بإنشاء ملف MOF بدون أخطاء أو تحذيرات.