【问题标题】:Azure Automation DSC - Using PSCredential in DSC ConfigurationAzure 自动化 DSC - 在 DSC 配置中使用 PSCredential
【发布时间】:2017-09-16 10:26:30
【问题描述】:

我正在尝试将 pscredentials 传递给旨在通过 Azure 自动化 DSC 进行部署的 dsc 配置,但我似乎无法使用记录在案的两种方法使其正常工作。

1) 第一种方法表明可以将 PSCredential 添加到与用于 dsc 的自动化帐户关联的凭据存储中。我能找到的所有文档都是指 azure classic 门户,并指示您选择凭证“类型”。但是,经典门户中不再提供 Azure 自动化管理,并且新门户没有新凭据的“类型”下拉菜单,类型为“Microsoft.Azure.Commands.Automation.Model.CredentialInfo” -- 它不包含 pscredential 类型具有的 getnetworkcredential() 方法(需要从 dsc 配置中获取纯文本密码以设置新用户 [用户 dsc 资源])。我是在这里遗漏了什么,还是 Azure 处于一种奇怪的状态,因为它已经从经典门户切换到了自动化功能的新门户。我还尝试使用 Get-AutomationPSCredential 读取我添加到新门户的凭据,以查看它是否隐式进行类型转换,但这也不起作用(没有找到该名称下的任何对象)。

2) 文档还指出,添加一个 param() 块,并将 pscredentials 指定为参数将在编译期间动态填充这些非常相同的参数,因此在通过门户编译时可以填写值......尽管这没有发生,并且编译作业无法识别“参数”,引发终止异常并停止。

代码看起来像这样:

$configdata = @{
    AllNodes = @(
        @{
            NodeName = "samplenode"
            PSDSCAllowPlainTextCredential = $true
}
)
}

configuration testconfig {
   Import-DSCResource -ModuleName PSDesiredStateConfiguration

    param (
        [pscredential]$cred
    )

    Node $AllNodes.NodeName {
        User testuser {
        "blah blah blah"
}
}
}

任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: powershell azure azure-powershell dsc azure-automation


    【解决方案1】:

    我最终向 MS 提出了一个案例,因为 github 上的文档要么具有误导性,要么完全错误,他们提供了非常详细的回复和有用的指导……见下文:

    1. 对于命令行,如果您还没有看过这些文章,这些文章是最好的: https://msdn.microsoft.com/en-us/powershell/dsc/configData https://msdn.microsoft.com/en-us/powershell/dsc/configdatacredentials https://docs.microsoft.com/en-us/azure/automation/automation-dsc-compile#credential-assets

    2. 检索凭据资产时使用的正确 PowerShell 命令是:Get-AutomationPSCredential 我怀疑这是某些 额外的解释可能会有所帮助。

    一个关键的区别是: • Get-AutomationPSCredential 返回一个 [PSCredential] 类型的值 • Get-AzureAutomationCredential 返回一个 [CredentialInfo] 类型的值 • Get-AzureRMAutomationCredential 返回 [CredentialInfo] 类型的值 • [CredentialInfo] 不能 用于代替 [PSCredential]

    另一个区别是: • Get-AutomationPSCredential 检索 编译时的凭证,而不是运行时的凭证。 • 凭证是 编入财政部 • 因此要求 PSDscAllowPlainTextPassword = $true • mof 编译器不知道 Azure 自动化对 mof 进行加密

    另一个主要区别是: • Get-AzureAutomationCredential 和 Get-AzureRMAutomationCredential 在运行时执行。 • 因此, 脚本必须先登录到 Azure,然后才能使用。 • 真的有 没有理由在 DSC 配置中使用这些 cmdlet。 • 我试过了 一次只是为了看看它是否会起作用并且它确实起作用(但只有在 Azure 登录成功)

    话虽如此,我确实注意到 Get-AzureRMAutomationCredential 用于 您引用的 Microsoft 文章。 https://github.com/Microsoft/azure-docs/blob/master/articles/automation/automation-dsc-compile.md#credential-assets

    这篇文章不正确,配置不会按原样工作 有两个原因 • Credential 需要 [PSCredential] 类型的值(a [CredentialInfo] 类型的值将不起作用) • DSC 配置 在文章中没有登录到 Azure 等 获取 AzureRMAutomationCredential 将失败

    我可以理解三个不同的 PowerShell 命令 检索自动化凭证资产可能会令人困惑。让我 添加进一步的说明: • Get-AzureAutomationCredential 使用 Azure 服务管理 API (ASM) • Get-AzureRMAutomationCredential 使用 Azure 资源 管理 API (ARM) • ASM 对应于旧的 Azure 门户 ARM 对应于新的 Azure 门户 (Ibiza) • ASM 早于 ARM 并继续支持向后兼容。 • 这 Get-AutomationPSCredential 是为自动化运行手册创建的 • 它 适用于 Azure 自动化 DSC(但不适用于 Windows PowerShell DSC) • 所有 Orchestrator.AssetManagement.Cmdlet 也 在 Azure 自动化 DSC 中 • 您可以通过以下方式在 Azure 门户中找到它们 在左窗格中编辑 Runbook 并展开 cmdlet • 以下文章还描述了这些 cmdlet,尽管是在上下文中 的运行手册。 https://azure.microsoft.com/en-us/blog/getting-started-with-azure-automation-automation-assets-2/

    要记住的重要一点是 Orchestrator.AssetManagement.Cmdlet 用于 • 仅在自动化环境中(例如,Runbook 或 DSC 配置) • 不能在其他任何地方使用,也不能在 交互式 PowerShell 会话。 • 在 DSC 配置中,它们是 在编译时而不是在运行时评估 • DSC 配置是 编译成静态定义 (MOF),而不是可执行代码 • 唯一的 例外是脚本资源,它确实在 运行时https://msdn.microsoft.com/en-us/PowerShell/DSC/scriptResource

    【讨论】:

      【解决方案2】:

      转到 Azure 自动化凭据并创建凭据对象。上传 DSC 配置:

      Import-AzureRmAutomationDscConfiguration -SourcePath 'somepath'  `
      -ResourceGroupName $ResourceGroupName -AutomationAccountName $AutomationAccountName -Published -Force
      

      准备配置数据和参数:

      $ConfigurationData = @{ 
          AllNodes = @(
              @{
                  NodeName = $nodeName
                  PSDscAllowPlainTextPassword = $true
              }
          )
      }
      
      $Parameters = @{
          "nodeName" = $nodeName
          "cred" = 'Azure Automation Credentials Name'
      }
      

      并编译它:

      Start-AzureRmAutomationDscCompilationJob -ResourceGroupName $ResourceGroupName -AutomationAccountName $AutomationAccountName `
      -ConfigurationName 'anything' -Parameters $Parameters -ConfigurationData $ConfigurationData 
      

      【讨论】:

        猜你喜欢
        • 2021-05-30
        • 2020-12-07
        • 2020-09-01
        • 2018-11-06
        • 2016-06-12
        • 1970-01-01
        • 2017-12-29
        • 1970-01-01
        • 2022-01-14
        相关资源
        最近更新 更多