Partilhar via


Opções de Credenciais nos Dados de Configuração

Aplica-se a: Windows PowerShell 5.0

Palavras-passe de Texto Simples e Utilizadores de Domínio

As configurações do DSC que contêm uma credencial sem encriptação irão gerar uma mensagem de erro sobre palavras-passe de texto simples. Além disso, o DSC irá gerar um aviso ao utilizar credenciais de domínio. Para suprimir estas mensagens de erro e aviso, utilize as palavras-chave de dados de configuração do DSC:

  • PsDscAllowPlainTextPassword
  • PsDscAllowDomainUser

Nota

Geralmente, o armazenamento/transmissão de palavras-passe de texto simples não encriptadas não é seguro. Recomenda-se proteger as credenciais com as técnicas abordadas mais adiante neste tópico. O serviço Automatização do Azure DSC permite-lhe gerir centralmente as credenciais para serem compiladas em configurações e armazenadas de forma segura. Para obter informações, veja Compiling DSC Configurations/Credential Assets (Compilar Configurações do DSC/Recursos de Credenciais)

Processar Credenciais no DSC

Os recursos de configuração do DSC são executados como Local System por predefinição. No entanto, alguns recursos precisam de uma credencial, por exemplo, quando o Package recurso precisa de instalar software numa conta de utilizador específica.

Os recursos anteriores utilizaram um nome de propriedade hard-coded Credential para lidar com isto. O WMF 5.0 adicionou uma propriedade automática PsDscRunAsCredential para todos os recursos. Para obter informações sobre como utilizar PsDscRunAsCredentialo , veja Executar o DSC com credenciais de utilizador. Os recursos mais recentes e os recursos personalizados podem utilizar esta propriedade automática em vez de criarem a sua própria propriedade para credenciais.

Nota

A estrutura de alguns recursos consiste em utilizar múltiplas credenciais por um motivo específico e terão as suas próprias propriedades de credenciais.

Para localizar as propriedades de credenciais disponíveis num recurso, utilize Get-DscResource -Name ResourceName -Syntax ou o Intellisense no 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]]
}

Este exemplo utiliza um recurso de Grupo do PSDesiredStateConfiguration módulo de recursos do DSC incorporado. Pode criar grupos locais e adicionar ou remover membros. Aceita a Credential propriedade e a propriedade automática PsDscRunAsCredential . No entanto, o recurso utiliza apenas a Credential propriedade .

Para obter mais informações sobre a PsDscRunAsCredential propriedade, veja Executar o DSC com credenciais de utilizador.

Exemplo: a propriedade Credencial do recurso de grupo

O DSC é executado Local Systemem , pelo que já tem permissões para alterar utilizadores e grupos locais. Se o membro adicionado for uma conta local, não é necessária nenhuma credencial. Se o Group recurso adicionar uma conta de domínio ao grupo local, é necessária uma credencial.

Não são permitidas consultas anónimas no Active Directory. A Credential propriedade do Group recurso é a conta de domínio utilizada para consultar o Active Directory. Para a maioria dos fins, esta pode ser uma conta de utilizador genérica, porque por predefinição os utilizadores podem ler a maioria dos objetos no Active Directory.

Configuração de Exemplo

O código de exemplo seguinte utiliza o DSC para preencher um grupo local com um utilizador de domínio:

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

Este código gera um erro e uma mensagem de aviso:

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

Este exemplo tem dois problemas:

  1. Um erro explica que as palavras-passe de texto simples não são recomendadas
  2. Um aviso aconselha a não utilizar uma credencial de domínio

Os sinalizadores PSDSCAllowPlainTextPassword e PSDSCAllowDomainUser suprimem o erro e avisam o utilizador sobre o risco envolvido.

PSDSCAllowPlainTextPassword

A primeira mensagem de erro tem um URL com documentação. Esta ligação explica como encriptar palavras-passe com uma estrutura ConfigurationData e um certificado. Para obter mais informações sobre certificados e DSC, leia esta mensagem.

Para forçar uma palavra-passe de texto simples, o recurso requer a PsDscAllowPlainTextPassword palavra-chave na secção de dados de configuração da seguinte forma:

$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

O sinalizador PSDSCAllowPlainTextPassword requer que o utilizador reconheça o risco de armazenar palavras-passe de texto simples num ficheiro MOF. No ficheiro MOF gerado, apesar de ter sido utilizado um objeto PSCredential que contém um SecureString , as palavras-passe continuam a aparecer como texto simples. Esta é a única altura em que as credenciais são expostas. Obter acesso a este ficheiro MOF dá a qualquer pessoa acesso à conta de Administrador.

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

};

Credenciais em trânsito e inativos

  • O sinalizador PSDscAllowPlainTextPassword permite a compilação de ficheiros MOF que contêm palavras-passe em texto não encriptado. Tome precauções ao armazenar ficheiros MOF que contenham palavras-passe de texto não encriptado.
  • Quando o ficheiro MOF é entregue num Nó no modo Push , o WinRM encripta a comunicação para proteger a palavra-passe de texto não encriptado, a menos que substitua a predefinição pelo parâmetro AllowUnencrypted .
    • Encriptar o MOF com um certificado protege o ficheiro MOF inativo antes de ser aplicado a um nó.
  • No modo Pull , pode configurar o servidor de extração do Windows para utilizar HTTPS para encriptar o tráfego através do protocolo especificado no Servidor de Informação Internet. Para obter mais informações, veja os artigos Configurar um cliente de solicitação DSC e Proteger ficheiros MOF com Certificados.
  • No Nó, os ficheiros MOF são encriptados inativos A partir do PowerShell 5.0.
    • No PowerShell 4.0, os ficheiros MOF não são encriptados inativos, a menos que sejam encriptados com um certificado quando são enviados ou solicitados para o Nó.

A Microsoft aconselha a evitar palavras-passe de texto simples devido ao risco significativo de segurança.

Credenciais de Domínio

Executar novamente o script de configuração de exemplo (com ou sem encriptação), continua a gerar o aviso de que a utilização de uma conta de domínio para uma credencial não é recomendada. A utilização de uma conta local elimina a potencial exposição das credenciais de domínio que podem ser utilizadas noutros servidores.

Quando utilizar credenciais com recursos do DSC, prefira uma conta local em vez de uma conta de domínio sempre que possível.

Se existir um '\' ou '@' na Username propriedade da credencial, o DSC irá tratá-la como uma conta de domínio. Existe uma exceção para "localhost", "127.0.0.1" e "::1" na parte do domínio do nome de utilizador.

PSDscAllowDomainUser

No exemplo de recurso do DSC Group acima, consultar um domínio do Active Directory requer uma conta de domínio. Neste caso, adicione a PSDscAllowDomainUser propriedade ao bloco da ConfigurationData seguinte forma:

$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

Agora, o script de configuração irá gerar o ficheiro MOF sem erros ou avisos.