在 Azure Stack Hub 中使用高权限终结点

作为 Azure Stack Hub 操作员,应将管理员门户、PowerShell 或 Azure 资源管理器 API 用于大多数日常管理任务。 但是,对于非常规操作,必须使用特权终结点 (PEP)。 PEP 是预配置的远程 PowerShell 控制台,可提供足够的功能来帮助完成所需的任务。 终端使用 PowerShell JEA(Just Enough Administration) 仅公开一组有限的命令行程序。 若要访问 PEP 并调用受限的 cmdlet 集,请使用低特权帐户。 不需要管理员帐户。 为提高安全性,不允许编写脚本。

可以使用 PEP 执行以下任务:

  • 低级别任务,例如 收集诊断日志
  • 集成系统的许多部署后数据中心集成任务,例如在部署后添加域名系统(DNS)转发器、设置 Microsoft Graph 集成、Active Directory 联合身份验证服务(AD FS)集成、证书轮换等。
  • 与支持人员合作,获取临时性的高级访问权限,以便对集成系统进行深入的故障排除。

PEP 记录在 PowerShell 会话中执行的每个操作(及其相应的输出)。 这提供了对操作的完整透明度和完整的审核。 可以保留这些日志文件以供将来进行审核。

注意

在 Azure Stack 开发工具包(ASDK)中,可以直接从开发工具包主机上的 PowerShell 会话运行 PEP 中提供的一些命令。 但是,你可能想要使用 PEP(例如日志收集)测试某些操作,因为这是在集成系统环境中执行某些操作的唯一方法。

注意

还可以使用操作员访问工作站 (OAW) 访问特权终结点 (PEP)、支持方案的管理员门户和 Azure Stack Hub GitHub 工具。 有关详细信息,请参阅 Azure Stack Hub 操作员访问工作站

访问特权端点

可以通过托管 PEP 的虚拟机(VM)上的远程 PowerShell 会话访问 PEP。 在 ASDK 中,此 VM 命名 AzS-ERCS01。 如果您使用集成系统,PEP 有三个实例,每个实例都运行在不同主机的虚拟机(VM)中(前缀-ERCS01、前缀-ERCS02 或 前缀-ERCS03),以确保高可用性。

在为集成系统开始此过程之前,请确保可以通过 IP 地址或通过 DNS 访问 PEP。 在 Azure Stack Hub 的初始部署后,只能通过 IP 地址访问 PEP,因为尚未设置 DNS 集成。 OEM 硬件供应商提供一个名为 azureStackStampDeploymentInfo 的 JSON 文件,其中包含 PEP IP 地址。

还可以在 Azure Stack Hub 管理员门户中找到 IP 地址。 打开门户;例如 https://adminportal.local.azurestack.external。 选择 区域管理>属性

运行特权终结点时,必须将当前区域性设置为 en-US,否则诸如 Test-AzureStackGet-AzureStackLog 之类的 cmdlet 将无法如预期般正常运行。

注意

出于安全原因,我们要求只从硬件生命周期主机上运行的强化 VM 或者从专用的安全计算机(例如特权访问工作站)连接到 PEP。 硬件生命周期主机的原始配置不得从其原始配置(包括安装新软件)修改,也不能用于连接到 PEP。

  1. 建立信任。

    • 在集成系统中,从权限提升的 Windows PowerShell 会话运行以下命令,将 PEP 添加为硬件生命周期主机或特权访问工作站上运行的强化 VM 的受信任主机:

      Set-Item WSMan:\localhost\Client\TrustedHosts -Value '<IP Address of Privileged Endpoint>' -Concatenate
      
    • 如果运行 ASDK,请登录到开发工具包主机。

  2. 在硬件生命周期主机或特权访问工作站上运行的强化 VM 上,打开 Windows PowerShell 会话。 运行以下命令,在托管 PEP 的 VM 上建立远程会话:

    • 在集成系统上:

      $cred = Get-Credential
      
      $pep = New-PSSession -ComputerName <IP_address_of_ERCS> -ConfigurationName PrivilegedEndpoint -Credential $cred -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
      Enter-PSSession $pep
      

      ComputerName 参数可以是托管 PEP 的某个 VM 的 IP 地址或 DNS 名称。

      注意

      验证 PEP 凭据时,Azure Stack Hub 不会进行远程调用。 它依赖于本地存储的 RSA 公钥来执行此操作。

    • 如果运行 ASDK:

      $cred = Get-Credential
      
      $pep = New-PSSession -ComputerName azs-ercs01 -ConfigurationName PrivilegedEndpoint -Credential $cred -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
      Enter-PSSession $pep
      

    出现提示时,请使用以下凭据:

    • 用户名:请按照格式 <Azure Stack Hub 域>\cloudadmin指定 CloudAdmin 帐户。
    • 密码:输入在安装 AzureStackAdmin 域管理员帐户期间提供的相同密码。

    注意

    如果无法连接到 ERCS 终结点,请使用另一个 ERCS VM IP 地址重试步骤 1 和 2。

    警告

    默认情况下,Azure Stack Hub 部署环境仅配置了一个 "CloudAdmin" 帐户。 如果帐户凭据丢失、泄露或锁定,则没有恢复选项。 你将失去对特权终结点和其他资源的访问权限。

    强烈建议创建其他 CloudAdmin 帐户,以免自费重新部署标记。 请确保根据公司的准则记录这些凭据。

  3. 连接后,提示将更改为 [IP 地址或 ERCS VM 名称]:PS>[azs-ercs01]:PS>,具体取决于环境。 在此处运行 Get-Command 以查看可用 cmdlet 的列表。

    可以在 Azure Stack Hub 特权终结点参考中找到 cmdlet 的参考

    其中许多 cmdlet 仅适用于集成系统环境(例如与数据中心集成相关的 cmdlet)。 在 ASDK 中,已验证以下 cmdlet:

    • Clear-Host
    • Close-PrivilegedEndpoint
    • Exit-PSSession
    • Get-AzureStackLog
    • Get-AzureStackStampInformation
    • Get-Command
    • Get-FormatData
    • Get-Help
    • Get-ThirdPartyNotices
    • Measure-Object
    • New-CloudAdminUser
    • Out-Default
    • Remove-CloudAdminUser
    • Select-Object
    • Set-CloudAdminUserPassword
    • Test-AzureStack
    • Stop-AzureStack
    • Get-ClusterLog

如何使用特权终结点

如前所述,PEP 是一个 PowerShell JEA 终结点。 尽管 JEA 终结点提供强大的安全层,但也缩减了部分 PowerShell 基本功能,例如脚本编写或 Tab 键补全。 如果尝试任何类型的脚本操作,操作将失败,并显示错误代码“脚本操作不允许”。 此失败是预期行为。

例如,若要获取给定 cmdlet 的参数列表,请运行以下命令:

    Get-Command <cmdlet_name> -Syntax

或者,可以使用 Import-PSSession cmdlet 将所有 PEP cmdlet 导入到本地计算机上的当前会话中。 PEP 的 cmdlet 和函数,以及 Tab 键补全和更常用的脚本功能现在都可在本地计算机上使用。 还可以运行 Get-Help 模块来查看 cmdlet 说明。

若要在本地计算机上导入 PEP 会话,请执行以下步骤:

  1. 建立信任。

    • 在集成系统中,从权限提升的 Windows PowerShell 会话运行以下命令,将 PEP 添加为硬件生命周期主机或特权访问工作站上运行的强化 VM 的受信任主机。

      winrm s winrm/config/client '@{TrustedHosts="<IP Address of Privileged Endpoint>"}'
      
    • 如果运行的是 ASDK,请登录到开发工具包主机。

  2. 在硬件生命周期主机或特权访问工作站上运行的强化 VM 上,打开 Windows PowerShell 会话。 运行以下命令,在托管 PEP 的虚拟机上建立远程会话:

    • 在集成系统上:

      $cred = Get-Credential
      
      $session = New-PSSession -ComputerName <IP_address_of_ERCS> `
         -ConfigurationName PrivilegedEndpoint -Credential $cred `
         -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
      

      ComputerName 参数可以是托管 PEP 的某个 VM 的 IP 地址或 DNS 名称。

    • 如果运行的是 ASDK:

      $cred = Get-Credential
      
      $session = New-PSSession -ComputerName azs-ercs01 `
         -ConfigurationName PrivilegedEndpoint -Credential $cred `
         -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
      

    出现提示时,请使用以下凭据:

    • 用户名:请按照以下格式指定 CloudAdmin 帐户:<Azure Stack Hub 域>\cloudadmin。 (对于 ASDK,用户名 azurestack\cloudadmin。)

    • 密码:输入在安装 AzureStackAdmin 域管理员帐户期间提供的相同密码。

  3. 将 PEP 会话导入本地计算机:

    Import-PSSession $session
    
  4. 现在,可以在本地 PowerShell 会话中,配合 PEP 的所有函数和 cmdlet 如常使用 Tab 键补全和执行脚本操作,而无需降低 Azure Stack Hub 的安全级别。 好好享受吧!

关闭特权终结点会话

如前所述,PEP 记录在 PowerShell 会话中执行的每个操作(及其相应的输出)。 必须使用 Close-PrivilegedEndpoint cmdlet 关闭会话。 此 cmdlet 正确关闭终结点,并将日志文件传输到外部文件共享以供保留。

若要关闭终结点会话,请执行以下操作:

  1. 创建可供 PEP 访问的外部文件共享。 在开发工具包环境中,只需在开发工具包主机上创建文件共享。

  2. 运行以下 cmdlet:

    Close-PrivilegedEndpoint -TranscriptsPathDestination "\\fileshareIP\SharedFolder" -Credential Get-Credential
    

    该 cmdlet 使用下表中的参数:

    参数 描述 类型 必须
    TranscriptsPathDestination 外部文件共享的路径定义为“fileshareIP\sharefoldername” 字符串 是的
    凭据 用于访问文件共享的凭据 SecureString 是的

成功将脚本日志文件传输到文件共享后,它们会自动从 PEP 中删除。

注意

如果使用 cmdlet Exit-PSSessionExit关闭 PEP 会话,或者你只是关闭 PowerShell 控制台,脚本日志不会传输到文件共享。 他们留在 PEP 中。 下次运行 Close-PrivilegedEndpoint 并包含文件共享时,来自上一个会话的脚本日志也将传输。 请勿使用 Exit-PSSessionExit 关闭 PEP 会话;请改用 Close-PrivilegedEndpoint

为支持场景解锁特权终结点

在支持场景中,Microsoft 支持工程师可能需要提升 PowerShell 会话的特权级别,以访问 Azure Stack Hub 基础结构的内部。 此过程有时称为“打破玻璃”或“解锁 PEP”。 PEP 会话提升过程是一个两步、两人、两个组织的身份验证过程。 解锁过程由 Azure Stack Hub 操作员启动,该操作员始终控制其环境。 操作员访问 PEP 并执行以下 cmdlet:

     Get-SupportSessionToken

cmdlet 返回支持会话请求令牌,这是一个非常长的字母数字字符串。 然后,操作员通过所选媒体(例如聊天、电子邮件)将请求令牌传递给Microsoft支持工程师。 Microsoft支持工程师使用请求令牌生成支持会话授权令牌(如果有效)并将其发送回 Azure Stack Hub 操作员。 在同一 PEP PowerShell 会话中,操作员然后将授权令牌作为输入传递给此 cmdlet:

      unlock-supportsession
      cmdlet Unlock-SupportSession at command pipeline position 1
      Supply values for the following parameters:
      ResponseToken:

如果授权令牌有效,则通过向基础结构提供完整的管理功能和完全可访问性来提升 PEP PowerShell 会话。

注意

在提升的 PEP 会话中执行的所有操作和 cmdlet 必须在 Microsoft 支持工程师的严格监督下执行。 否则可能会导致严重的停机时间、数据丢失,并可能需要完全重新部署 Azure Stack Hub 环境。

一旦支持会话终止,请务必按照前一部分所述使用 Close-PrivilegedEndpoint cmdlet 重新关闭提升的 PEP 会话。 一旦 PEP 会话终止,解锁令牌不再有效,不能重复使用以再次解锁 PEP 会话。 提升的 PEP 会话的有效期为 8 小时,之后(如果未终止),提升的 PEP 会话将自动锁定回常规 PEP 会话。

特权终结点令牌的内容

PEP 支持会话请求和授权令牌利用加密来保护访问,并确保只有授权令牌才能解锁 PEP 会话。 这些令牌旨在以加密方式保证响应令牌只能接受生成请求令牌的 PEP 会话。 PEP 令牌不包含任何可以唯一标识 Azure Stack Hub 环境或客户的信息。 它们是完全匿名的。 下面提供了每个令牌内容的详细信息。

支持会话请求令牌

PEP 支持会话请求令牌由三个对象组成:

  • 随机生成的会话 ID。
  • 为具有一次性公钥/私钥对而生成的自签名证书。 证书不包含有关环境的任何信息。
  • 指示请求令牌到期时间的时间戳。

然后,使用 Azure Stack Hub 环境注册到的 Azure 云的公钥对请求令牌进行加密。

支持会话授权响应令牌

PEP 支持授权响应令牌由两个对象组成:

  • 从请求令牌中提取的随机生成的会话 ID。
  • 指示响应令牌到期时间的时间戳。

然后,使用请求令牌中包含的自签名证书对响应令牌进行加密。 使用与 Azure Stack Hub 环境注册的 Azure 云相关联的私钥来解密自签名证书。

后续步骤