率这篇文章

Active Directory (AD)只运行Windows Server 2012域控制器的好处之一是使用了“组托管服务帐户”(Group Managed Service Accounts, GMSAs)。
gmsas基本上可以执行类似于“服务帐户”运行的“Active Directory用户帐户”的应用程序和服务。gmsas使用Windows Server 2012 DCS上的密钥分发服务(kds)存储其120个字符长的密码,并定期刷新这些密码以获得额外的安全性(刷新时间为configuRable)
这基本上提供了以下好处:

  1. 无需管理员将静态服务帐户密码存储在“密码库”中
  2. 提高了安全性,因为密码会自动刷新,并且刷新间隔是可配置的(如果需要,您可以告诉它每天刷新密码。
  3. 即使管理员也不知道密码,因此攻击者也没有机会尝试劫持GMSA帐户并通过在其他Windows服务器或应用程序上以该帐户的身份登录来“隐藏其跟踪”
  4. 一个非常长的字符密码,需要大量的计算能力和时间来破解

与传统的广告用户帐户相比,使用GMSA仍有开销:

  1. 并不是所有的应用程序或服务都支持GMSA,所以如果应用程序没有证明它们的可支持性,然后你需要在实验室里测试它们的使用
  2. 与创建一个简单的广告用户帐户相比,增加前期配置的开销,使它们能够工作和测试
  3. GMSA漏洞(见附录)

最近我有一些时间在任务调度程序下开发和运行PowerShell脚本,但我想使用GMSA在一个服务帐户下运行作业,该帐户的密码不会被任何管理员知道,并且会自动刷新(大约30天一次)。
GMSA上有很多博客,包括这个优秀的PFE博客来自2012年的MS和官方之后就会在图书馆。
我的博客真的是GMSA的“初学者指南”,在一个简单的任务调度器场景中使用它。我第一次使用GMSA时学到了一些有趣的知识我认为这将证明是有用的,另外,其他博客中的一些示例命令不是100%准确的。
本博客将通过以下步骤运行:

  1. 创建GMSA并将其链接到两个Windows服务器
  2. 在Windows服务器上安装GMSA并进行测试
  3. 创建任务调度作业,并让它在GMSA下执行
  4. 执行GMSA刷新密码并验证任务调度作业仍将执行

最后的附录将简要讨论我在运行GMSA和Active Directory安全组(即使用AD组而不是直接向GMSA对象的服务器成员关系)。
GMSA本质上与Active Directory中的计算机帐户共享许多属性,但是它仍然作为一个独特的广告类对象工作。因此,它的使用仍然局限于少数Windows应用程序和服务。以下应用程序和服务似乎可以在GMSA下运行,但我首先检查和测试以确保您可以在GMSA下运行它:

  • 一个Windows服务
  • IIS应用程序池
  • SQL 2012
  • adfs3.0(尽管使用adfs3.0创建和使用GMSA是由向导驱动的,管理员是不可见的)
  • 任务调度器的工作

这个博客将手动创建一个GMSA,并允许两台Windows服务器检索该GMSA的密码,并使用它来操作两个任务调度作业,每个服务器一个。

步骤1:创建KDS根密钥和准备环境

与GMSA一起工作需要一个KDS根密钥。如果您在共享实验室中,这可能已经生成。您可以使用PowerShell命令进行检查(在具有域管理权限的“以管理员身份运行”下运行):
Get-KDSrootkey
如果得到类似于下面的输出,你可以跳过整个森林的这一步:
pic1.JPG
如果没有KDS根密钥存在(或已经过期),为整个AD forest(其中所有GMSA的密码都来自于此)创建KDS根密钥的命令如下:
添加kdsrootkey–立即生效
记录的“立即生效”开关可能需要等待10小时才能生效,以考虑到域控制器复制。然而,如果你在实验室里,你可以按照这个步骤来加速这个过程链接
接下来的几个步骤将假设您已经配置了以下配置:

  • 域管理员权限
  • PowerShell加载“以管理员身份运行”
  • 命令加载的activedirectory PowerShell模块:
    • import-module activedirectory

步骤2:创建一个GMSA并将其链接到两个(或更多)Windows服务器

这一步在AD中创建GMSA对象,并链接两个Windows服务器,以便能够检索(并因此登录)这些服务器上的GMSA,以执行任务调度任务。
以下命令将:
$ server1 = Get-ADComputer
$ server2 = Get-ADComputer
新adserviceaccount-name gmsa pwdexpiry-dnshostname gmsa-pwdexpiry.domain.lab-principalsallowedtoretrievemanagedpassword$server1,$server2
Get-ADServiceAccount -Identity gmsa- pwdexpires -属性PrincipalsAllowedToRetrieveManagedPassword
你应该得到一个类似的输出如下:
pic3
重要的验证步骤是确保“principal alsal…”值包含到希望使用GMSA(指定为变量的路径)的Windows服务器的所有LDAP路径。
默认情况下,GMSA对象将添加到域根目录中的“托管服务帐户”容器对象中(除非指定“-path”开关,告诉它将其安装到自定义OU)。
pic4.JPG
注:

  1. 再次重申,许多博客指出,您可以使用这个开关:“PrincipalsAllowedToRetrieveManagedPassword”(几乎是我遇到过的最长的开关名!)来指定一个“广告组名称”.我在使用该开关指定和使用广告组时遇到问题,而不是直接使用GMSA的计算机帐户成员身份。我在附录中介绍了这些问题。
  2. 很多博客只是声明您可以为“主体”开关指定服务器的netbios名称,不过,我发现您需要首先使用“get adcomputeraccount”命令检索广告对象。
  3. 我没有指定服务主体名称(SPN),因为我的任务调度程序作业不需要这样的名称,但是,如果您正在执行一个需要它的应用程序或服务,那么一定要这样做
  4. 我接受了30天的默认密码刷新间隔,但没有指定自定义密码刷新间隔(可在属性值“msds-managedPasswordInterval”中查看)。自定义刷新间隔只能在GMSA创建过程中根据我读到的内容指定(未来博客的主题!).
  5. 请确保在两个计算机帐户变量之间指定一个“逗号”,但没有空格

可选步骤2A:向GMSA添加或删除计算机

如果您创建了GMSA,但忘记添加服务器帐户,然后修改了一个GMSA的服务器账号会员资格,我发现MS的指导有点混乱。在我的测试中,我发现如果不重新将每台计算机添加到成员列表中,就不能将单个计算机添加或删除到GMSA中。
您可以使用此命令更新现有的GMSA,但是您仍然需要指定每台能够检索GMSA密码的计算机。
例如,如果我想添加第三个服务器来使用GMSA,我仍然需要使用“set adserviceaccount”命令重新添加所有现有服务器:
$ server1 = Get-ADComputer
$ server2 = Get-ADComputer
$ server3 = Get-ADComputer
Set-ADServiceAccount -Identity gmsa- pwdexpires -PrincipalsAllowedToRetrieveManagedPassword $server1,$server2,$server3
(另一个原因是我想与一个广告小组合作,而不是使用!)

步骤3:'安装'服务帐户

据微软之后就会在,“Install-ADServiceAccount”“在本地进行必要的更改,计算机可以定期重置服务帐户密码”。
我不能100%肯定这些变化是本地的Windows服务器,但运行命令之后,Windows服务器将有权将密码重置为GMSA。
你在Windows服务器上运行这个命令(它应该已经在GMSA中存储的“principal alsal…”计算机列表中):
Install-ADServiceAccount gsma-pwdexpiry
PIC5
运行此命令后,检查“principal alsal…”开关和“Install”命令是否已为该Windows服务器正确配置:
测试AdServiceAccount GSMA PwdExpiry
pic6.JPG
的值“真正的”对于test命令,意味着该服务器现在可以使用gmsa执行任务调度程序。值为“假”这意味着要么Windows服务器没有添加到“主体”列表中(使用“New-ADServiceAccount”或“Set-ADServiceAccount”),要么“Install-ADServiceAccount”命令没有正确执行。
最后,为了执行任务调度程序作业,还要确保将GSMA添加到本地安全策略(或GPO)中,以便分配正确的权限:“以批作业身份登录”:
pic7.JPG
PIC8JPG
没有这最后一步,GMSA帐户将正确登录到Windows服务器,但任务计划程序作业将不会执行,因为GMSA没有权限这样做。如果Windows服务器是域控制器,然后,您将需要使用一个GPO(“默认域控制器”GPO或一个新的GPO)。

步骤4:创建要在GMSA下运行的任务调度作业

Windows任务计划程序(至少在Windows Server 2012上)不允许您使用GUI指定GMSA。您必须使用PowerShell创建任务计划作业。使用GUI创建作业时的密码提示将要求您在保存时指定密码(您永远不会有密码!)
下面四个命令将创建Task Schedule作业来执行一个示例PowerShell脚本,并指定要运行的GMSA对象(使用$principal对象):
$action = New-ScheduledTaskAction powershell.exe -参数"-file c:\Scripts\Script.ps1"-WorkingDirectory“C: \ WINDOWS \ system32系统\ WindowsPowerShell \ v1.0”
$trigger=new scheduledtasktrigger-每天12:00
$principal=new scheduledtaskprincipal-userid domain.lab\gmsa pwdexpiry$-logontype password-runlevel highest
注册表- scheduledtask myAdminTask -Action $action -Trigger $trigger -Principal $principal
PIC9
pic2
注:

  1. 请确保将“domain.lab”替换为域的fqdn以及脚本路径和名称等其他变量
  2. 可以选择使用开关:“-runlevel highest”。这只会将作业设置为“以最高权限运行”。
  3. 请确保在“-userid”的GMSA名称后面指定“$”符号。我还必须为域名指定fqdn而不是netbios。

第五步:踢轮胎!(又名测试测试测试)

是的,当你使用GMSA时,你需要有信心,即使密码过期,你也会留下一些有用的东西。
一些常见的任务,我喜欢执行,以验证GMSA正在运行包括:

强制GMSA更改密码:

您可以通过运行以下命令强制GMSA重置密码:
Reset-ADServiceAccountPassword gmsa-pwdexpiry
然后,您可以通过运行以下命令来验证上次设置密码的时间日期:
get adserviceaccount-identity gmsa pwdexpiry-properties密码lastset
值将在“PasswordLastSet”字段旁边:
PIC10
强制重置密码后,我将启动一个任务调度任务执行,并确保它在没有失败的情况下运行。

验证上次登录时间

您还可以通过检查“上次登录值”来验证GMSA是否正确登录到服务器:
Get-ADServiceAccount -Identity gmsa- pwdexpires -Properties LastLogonDate

查看所有属性

最后,如果你想知道这个对象还存储了什么,那么这就是对GMSA所有值进行检查的最佳方法:
Get-ADServiceAccount -Identity gmsa-pwdexpiry -Properties *
我不建议使用adsiedit查看大多数GMSA属性,因为我发现GUI在显示这些对象的正确值方面受到限制,如。这是使用ADSIEdit(调用)查看' principal…'值时发生的情况msDS-GroupMSAMembershipADSI):
pic11.JPG

附录:为什么我不能使用一个广告组与开关:PrincipalsAllowedTo . .

简单的:你可以!只是一句警告。我在实验室使用广告组时遇到了间歇性问题。我决定将我的博客完全建立在直接向GMSA提供计算机帐户成员资格的基础上,因为我对这种方法没有任何问题。
如果发现使用组成员身份时,命令'install adserviceaccount'和'test adserviceaccount'有时会失败。但是请随时尝试,可能是因为我实验室的问题在准备这个实验室时,我无法提供这些问题的截图,因为它们在一夜之间就神秘地自行解决了(最糟糕的一种bug,一个间断的!)
您可以轻松地运行该命令来创建具有安全组成员的GMSA(例如,)作为唯一的“主要发黄……”
pic12.JPG
然后在其计算机帐户是该组成员的Windows服务器上运行“install adserviceaccount”和“test adserviceaccount”。
好运!
迈克尔







类别:
身份和访问管理, 安全

3.
留下一个回复

留下一个回复

订阅
最新的 最古老的 多数投票
通知
Geophica
客人
Geophica

Reset-ADServiceAccountPassword对gMSA帐户无效。
https://technet.microsoft.com/en-us/library/hh852255 (v = wps.630)ASPX

瑞安
客人
瑞安

您与组之间出现的间歇性问题是由于服务器不知道它是该组的成员。如果重新启动服务器,Install-ADServiceAccount命令将立即生效。非常类似于用户需要注销/登录才能访问刚添加到该组时由组保护的共享。

lulu800
客人
跟着我们!

Kloud解决方案博客-关注我们!