JEA 会话配置

JEA 终结点通过创建和注册 PowerShell 会话配置文件在系统上注册。 会话配置定义了谁可以使用 JEA 终结点,以及他们可以访问的角色。 他们还定义应用于 JEA 会话所有用户的全局设置。

创建会话配置文件

若要注册 JEA 终结点,必须指定该终结点的配置方式。 需要考虑许多选项。 最重要的选项包括:

  • 谁有权访问 JEA 终结点
  • 可以为其分配哪些角色
  • 哪些标识 JEA 在封面下使用
  • JEA 终结点的名称

** 这些选项在扩展名为 .pssc 的 PowerShell 会话配置文件的数据文件中定义。 可以使用任何文本编辑器编辑会话配置文件。

运行以下命令以创建空白模板配置文件。

New-PSSessionConfigurationFile -SessionType RestrictedRemoteServer -Path .\MyJEAEndpoint.pssc

小窍门

默认情况下,模板文件中仅包含最常见的配置选项。 使用 -Full 开关在生成的 PSSC 中包含所有适用的设置。

-SessionType RestrictedRemoteServer 字段指示 JEA 使用会话配置进行安全管理。 此类型的会话在 NoLanguage 模式下运行,并且只能访问以下默认命令(和别名):

  • Clear-Hostclsclear
  • Exit-PSSessionexsnexit
  • Get-Commandgcm
  • Get-FormatData
  • Get-Help
  • Measure-Objectmeasure
  • Out-Default
  • Select-Objectselect

没有可用的 PowerShell 提供程序,也没有任何外部程序(可执行文件或脚本)。

有关语言模式的详细信息,请参阅 about_Language_Modes

选择 JEA 标识

在后台,JEA 需要在运行连接的用户的命令时使用标识(帐户)。 您定义会话配置文件中 JEA 使用的身份。

本地虚拟帐户

当为 JEA 终结点定义的所有角色用于管理本地计算机并且本地管理员帐户足以成功运行命令时,本地虚拟帐户非常有用。 虚拟帐户是特定用户唯一的临时帐户,仅在其 PowerShell 会话期间持续。 在成员服务器或工作站上,虚拟帐户属于本地计算机的 管理员 组。 在 Active Directory 域控制器上,虚拟帐户属于域的 域管理员 组。

# Setting the session to use a virtual account
RunAsVirtualAccount = $true

如果会话配置定义的角色不需要完全管理权限,则可以指定虚拟帐户所属的安全组。 在成员服务器或工作站上,指定的安全组必须是本地组,而不是来自域的组。

指定一个或多个安全组时,虚拟帐户不会分配给本地或域管理员组。

# Setting the session to use a virtual account that only belongs to the NetworkOperator and NetworkAuditor local groups
RunAsVirtualAccount = $true
RunAsVirtualAccountGroups = 'NetworkOperator', 'NetworkAuditor'

注释

虚拟帐户在本地服务器安全策略中暂时被授予登录即服务权限。 如果已在策略中向其中一个指定的 VirtualAccountGroup 授予此权限,则不再从策略中添加和删除单个虚拟帐户。 在域控制器中,例如对域控制器安全策略的修订进行严格审计的情况,这可能非常有用。 在安装 2018 年 11 月或更高版本汇总的 Windows Server 2016 和安装 2019 年 1 月或更高版本汇总的 Windows Server 2019 中提供。

组管理服务账户

组托管服务帐户(GMSA)是在 JEA 用户需要访问文件共享和 Web 服务等网络资源时使用的相应标识。 GMSA 提供一个域标识,用于对域中任何计算机上的资源进行身份验证。 GMSA 提供的权限取决于要访问的资源。 除非计算机或服务管理员显式向 GMSA 授予了这些权限,否则你对任何计算机或服务没有管理员权限。

# Configure JEA sessions to use the GMSA in the local computer's ___domain
# with the sAMAccountName of 'MyJEAGMSA'
GroupManagedServiceAccount = 'Domain\MyJEAGMSA'

仅在必要时才应使用 GMSA:

  • 在使用 GMSA 时,很难将行为追溯到某个用户。 每个用户共享相同的运行方式标识。 必须查看 PowerShell 会话记录和日志,以关联单个用户与他们的操作。

  • GMSA 可能有权访问连接用户不需要访问的许多网络资源。 始终尝试限制 JEA 会话中的有效权限,以遵循最小特权原则。

注释

组托管服务帐户仅在使用 PowerShell 5.1 或更高版本的已加入域的计算机上可用。

有关保护 JEA 会话的详细信息,请参阅 安全注意事项 文章。

会话记录

建议您配置 JEA 端点以自动记录用户会话的日志。 PowerShell 会话脚本包含有关连接用户的信息、分配给用户的运行方式标识以及用户运行的命令。 对于需要了解谁对系统进行了特定更改的审核团队来说,它们非常有用。

若要在会话配置文件中设置自动转录,请提供一个文件夹的路径来存储转录记录。

TranscriptDirectory = 'C:\ProgramData\JEAConfiguration\Transcripts'

转录文件由 本地系统 帐户写入到文件夹,需对目录具有读写权限。 标准用户不应有权访问该文件夹。 限制有权审核脚本的安全管理员数。

用户驱动器

如果连接用户需要将文件复制到 JEA 终结点或从 JEA 终结点复制文件,则可以在会话配置文件中启用用户驱动器。 用户驱动器是一个 PSDrive,映射到每个连接用户的唯一文件夹。 此文件夹允许用户将文件复制到系统或从系统复制文件,而无需授予他们访问完整文件系统或公开 FileSystem 提供程序的权限。 用户驱动器内容在会话之间持续存在,以适应网络连接可能中断的情况。

MountUserDrive = $true

默认情况下,用户驱动器允许存储每个用户最多 50MB 的数据。 可以限制用户可在 UserDriveMaximumSize 字段中使用的数据量。

# Enables the user drive with a per-user limit of 500MB (524288000 bytes)
MountUserDrive = $true
UserDriveMaximumSize = 524288000

如果不希望用户驱动器中的数据持久化,则可以在系统上配置计划任务,以便每晚自动清理文件夹。

注释

用户驱动器仅在 PowerShell 5.1 或更高版本中可用。

有关 PSDrive 的详细信息,请参阅 管理 PowerShell 驱动器

角色定义

会话配置文件中的角色定义定义 用户角色的映射。 注册 JEA 终结点时,此字段中包括的每个用户或组都被授予对 JEA 终结点的权限。 每个用户或组只能作为键包含在哈希表中一次,但可以被分配多个角色。 角色功能的名称应为角色功能文件的名称,而不使用 .psrc 扩展名。

RoleDefinitions = @{
    'CONTOSO\JEA_DNS_ADMINS'    = @{ RoleCapabilities = 'DnsAdmin', 'DnsOperator', 'DnsAuditor' }
    'CONTOSO\JEA_DNS_OPERATORS' = @{ RoleCapabilities = 'DnsOperator', 'DnsAuditor' }
    'CONTOSO\JEA_DNS_AUDITORS'  = @{ RoleCapabilities = 'DnsAuditor' }
}

如果用户属于角色定义中的多个组,则他们可以访问每个组的角色。 当两个角色授予对同一 cmdlet 的访问权限时,将向用户授予最宽松的参数集。

在角色定义字段中指定本地用户或组时,请务必使用计算机名称,而不是 localhost 或通配符。 可以通过查看 $Env:COMPUTERNAME 变量来检查计算机名称。

RoleDefinitions = @{
    'MyComputerName\MyLocalGroup' = @{ RoleCapabilities = 'DnsAuditor' }
}

角色能力搜索顺序

如上例所示,角色功能由角色功能文件的基名称引用。 文件的基名称是没有扩展名的文件名。 如果系统上具有同名的多个角色功能,PowerShell 会使用其隐式搜索顺序来选择有效的角色功能文件。 JEA 授予对具有相同名称的所有角色功能文件的访问权限。

JEA 使用 $Env:PSModulePath 环境变量来确定扫描角色功能文件的路径。 在每个路径中,JEA 查找包含“RoleCapabilities”子文件夹的有效 PowerShell 模块。 与导入模块一样,JEA 更喜欢 Windows 附带的角色功能,而不是具有相同名称的自定义角色功能。

对于所有其他命名冲突,优先级取决于 Windows 枚举目录中文件的顺序。 顺序不保证按字母顺序排列。 找到与指定名称匹配的第一个角色功能配置文件用于连接用户。 由于角色功能搜索顺序不是确定性的,因此 强烈建议 角色功能具有唯一的文件名。

条件访问规则

RoleDefinitions 字段中包括的所有用户和组会自动授予对 JEA 终结点的访问权限。 条件访问规则允许你优化此访问权限,并要求用户属于不会影响他们分配到的角色的其他安全组。 如果要将实时特权访问管理解决方案、智能卡身份验证或其他多重身份验证解决方案与 JEA 集成,这非常有用。

条件访问规则在会话配置文件的 RequiredGroups 字段中定义。 在那里,可以提供使用“And”和“Or”键构造规则的哈希表(可选嵌套)。 下面是有关如何使用此字段的一些示例:

# Example 1: Connecting users must belong to a security group called "elevated-jea"
RequiredGroups = @{ And = 'elevated-jea' }

# Example 2: Connecting users must have signed on with 2 factor authentication or a smart card
# The 2 factor authentication group name is "2FA-logon" and the smart card group
# name is "smartcard-logon"
RequiredGroups = @{ Or = '2FA-logon', 'smartcard-logon' }

# Example 3: Connecting users must elevate into "elevated-jea" with their JIT system and
# have logged on with 2FA or a smart card
RequiredGroups = @{ And = 'elevated-jea', @{ Or = '2FA-logon', 'smartcard-logon' }}

注释

条件访问规则仅在 PowerShell 5.1 或更高版本中可用。

其他属性

会话配置文件还可以执行角色功能文件可以执行的所有作,只需无需授予连接用户对不同命令的访问权限。 如果要允许所有用户访问特定的 cmdlet、函数或提供程序,则可以在会话配置文件中执行此作。 有关会话配置文件中支持属性的完整列表,请运行 Get-Help New-PSSessionConfigurationFile -Full

测试会话配置文件

可以使用 Test-PSSessionConfigurationFile cmdlet 测试会话配置。 如果已手动编辑 .pssc 文件,建议测试会话配置文件。 测试可确保语法正确。 如果会话配置文件未通过此测试,则无法在系统上注册它。

示例会话配置文件

以下示例演示如何为 JEA 创建和验证会话配置。 角色定义创建并存储在变量中 $roles ,以便方便和可读。 这不是这样做的要求。

$roles = @{
    'CONTOSO\JEA_DNS_ADMINS'    = @{ RoleCapabilities = 'DnsAdmin', 'DnsOperator', 'DnsAuditor' }
    'CONTOSO\JEA_DNS_OPERATORS' = @{ RoleCapabilities = 'DnsOperator', 'DnsAuditor' }
    'CONTOSO\JEA_DNS_AUDITORS'  = @{ RoleCapabilities = 'DnsAuditor' }
}

$parameters = @{
    SessionType = 'RestrictedRemoteServer'
    Path = '.\JEAConfig.pssc'
    RunAsVirtualAccount = $true
    TranscriptDirectory = 'C:\ProgramData\JEAConfiguration\Transcripts'
    RoleDefinitions = $roles
    RequiredGroups = @{ Or = '2FA-logon', 'smartcard-logon' }
}
New-PSSessionConfigurationFile @parameters
Test-PSSessionConfigurationFile -Path .\JEAConfig.pssc # should yield True

更新会话配置文件

若要更改 JEA 会话配置的属性,包括用户到角色的映射,必须 取消注册。 然后,使用更新的会话配置文件 重新注册 JEA 会话配置。

后续步骤