Bagikan melalui


Opsi Kredensial dalam Data Konfigurasi

Berlaku Untuk: Windows PowerShell 5.0

Kata Sandi Teks Biasa dan Pengguna Domain

Konfigurasi DSC yang berisi kredensial tanpa enkripsi akan menghasilkan pesan kesalahan tentang kata sandi teks biasa. Selain itu, DSC akan menghasilkan peringatan saat menggunakan kredensial domain. Untuk menekan kesalahan dan pesan peringatan ini, gunakan kata kunci data konfigurasi DSC:

  • PsDscAllowPlainTextPassword
  • PsDscAllowDomainUser

Catatan

Menyimpan/mengirimkan kata sandi teks biasa yang tidak terenkripsi umumnya tidak aman. Mengamankan kredensial dengan menggunakan teknik yang dibahas nanti dalam topik ini direkomendasikan. Layanan DSC Azure Automation memungkinkan Anda mengelola kredensial secara terpusat untuk dikompilasi dalam konfigurasi dan disimpan dengan aman. Untuk informasi, lihat: Mengkompilasi Konfigurasi DSC / Aset Kredensial

Menangani Kredensial di DSC

Sumber daya konfigurasi DSC berjalan sebagai Local System secara default. Namun, beberapa sumber daya memerlukan kredensial, misalnya ketika Package sumber daya perlu menginstal perangkat lunak di bawah akun pengguna tertentu.

Sumber daya sebelumnya menggunakan nama properti yang dikodekan Credential secara permanen untuk menangani ini. WMF 5.0 menambahkan properti otomatis PsDscRunAsCredential untuk semua sumber daya. Untuk informasi tentang menggunakan PsDscRunAsCredential, lihat Menjalankan DSC dengan kredensial pengguna. Sumber daya dan sumber daya kustom yang lebih baru dapat menggunakan properti otomatis ini alih-alih membuat properti mereka sendiri untuk kredensial.

Catatan

Desain beberapa sumber daya adalah menggunakan beberapa kredensial karena alasan tertentu, dan mereka akan memiliki properti kredensial mereka sendiri.

Untuk menemukan properti kredensial yang tersedia pada penggunaan sumber daya baik Get-DscResource -Name ResourceName -Syntax atau Intellisense di 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]]
}

Contoh ini menggunakan sumber daya Grup dari modul sumber daya DSC bawaan PSDesiredStateConfiguration . Ini dapat membuat grup lokal dan menambahkan atau menghapus anggota. Ini menerima Credential properti dan properti otomatis PsDscRunAsCredential . Namun, sumber daya hanya menggunakan Credential properti .

Untuk informasi selengkapnya tentang PsDscRunAsCredential properti , lihat Menjalankan DSC dengan kredensial pengguna.

Contoh: Properti Kredensial sumber daya grup

DSC berjalan di bawah Local System, sehingga sudah memiliki izin untuk mengubah pengguna dan grup lokal. Jika anggota yang ditambahkan adalah akun lokal, maka tidak ada kredensial yang diperlukan. Group Jika sumber daya menambahkan akun domain ke grup lokal, kredensial diperlukan.

Kueri anonim ke Direktori Aktif tidak diizinkan. Properti Credential sumber daya adalah akun domain yang digunakan untuk mengkueri Group Direktori Aktif. Untuk sebagian besar tujuan, ini bisa menjadi akun pengguna generik, karena secara default pengguna dapat membaca sebagian besar objek di Direktori Aktif.

Contoh Konfigurasi

Contoh kode berikut menggunakan DSC untuk mengisi grup lokal dengan pengguna domain:

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

Kode ini menghasilkan pesan kesalahan dan peringatan:

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

Contoh ini memiliki dua masalah:

  1. Kesalahan menjelaskan bahwa kata sandi teks biasa tidak disarankan
  2. Peringatan menyarankan untuk tidak menggunakan kredensial domain

Bendera PSDSCAllowPlainTextPassword dan PSDSCAllowDomainUser menekan kesalahan dan peringatan yang memberi tahu pengguna tentang risiko yang terlibat.

PSDSCAllowPlainTextPassword

Pesan kesalahan pertama memiliki URL dengan dokumentasi. Tautan ini menjelaskan cara mengenkripsi kata sandi menggunakan struktur ConfigurationData dan sertifikat. Untuk informasi selengkapnya tentang sertifikat dan DSC baca posting ini.

Untuk memaksa kata sandi teks biasa, sumber daya memerlukan PsDscAllowPlainTextPassword kata kunci di bagian data konfigurasi sebagai berikut:

$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

Bendera PSDSCAllowPlainTextPassword mengharuskan pengguna mengakui risiko menyimpan kata sandi teks biasa dalam file MOF. Dalam file MOF yang dihasilkan, meskipun objek PSCredential yang berisi SecureString digunakan, kata sandi masih muncul sebagai teks biasa. Ini adalah satu-satunya waktu kredensial diekspos. Mendapatkan akses ke file MOF ini memberi siapa pun akses ke akun Administrator.

/*
@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";

};

Kredensial saat transit dan saat istirahat

  • Bendera PSDscAllowPlainTextPassword memungkinkan kompilasi file MOF yang berisi kata sandi dalam teks yang jelas. Berhati-hatilah saat menyimpan file MOF yang berisi kata sandi teks yang jelas.
  • Ketika file MOF dikirimkan ke Node dalam mode Push , WinRM mengenkripsi komunikasi untuk melindungi kata sandi teks yang jelas kecuali Anda mengambil alih default dengan parameter AllowUnencrypted .
    • Mengenkripsi MOF dengan sertifikat melindungi file MOF saat tidak aktif sebelum diterapkan ke simpul.
  • Dalam mode Penarikan , Anda dapat mengonfigurasi server penarikan Windows untuk menggunakan HTTPS untuk mengenkripsi lalu lintas menggunakan protokol yang ditentukan di Server Informasi Internet. Untuk informasi selengkapnya, lihat artikel Menyiapkan klien penarikan DSC dan Mengamankan file MOF dengan Sertifikat.
  • Pada Node, file MOF dienkripsi saat tidak aktif Dimulai di PowerShell 5.0.
    • Dalam file MOF PowerShell 4.0 tidak terenkripsi saat tidak aktif kecuali dienkripsi dengan sertifikat saat didorong atau ditarik ke Node.

Microsoft menyarankan untuk menghindari kata sandi teks biasa karena risiko keamanan yang signifikan.

Kredensial Domain

Menjalankan contoh skrip konfigurasi lagi (dengan atau tanpa enkripsi), masih menghasilkan peringatan bahwa menggunakan akun domain untuk kredensial tidak disarankan. Menggunakan akun lokal menghilangkan potensi paparan kredensial domain yang dapat digunakan di server lain.

Saat menggunakan kredensial dengan sumber daya DSC, pilih akun lokal daripada akun domain jika memungkinkan.

Jika ada '\' atau '@' di Username properti kredensial, maka DSC akan memperlakukannya sebagai akun domain. Ada pengecualian untuk "localhost", "127.0.0.1", dan "::1" di bagian domain nama pengguna.

PSDscAllowDomainUser

Dalam contoh sumber daya DSC Group di atas, mengkueri domain Direktori Aktif memerlukan akun domain. Dalam hal ini tambahkan PSDscAllowDomainUser properti ke ConfigurationData blok sebagai berikut:

$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

Sekarang skrip konfigurasi akan menghasilkan file MOF tanpa kesalahan atau peringatan.