以组托管服务帐户身份运行服务

在 Windows Server 独立群集上,可以使用 RunAs 策略以组托管服务帐户 (gMSA) 的身份来运行服务。 默认情况下,Service Fabric 应用程序在运行 Fabric.exe 进程的帐户之下运行。 即使在共享托管环境中以不同帐户身份运行应用程序,也可确保运行的应用程序彼此更安全。 注意:这是域中的本地 Active Directory,不是 Azure Active Directory (Azure AD)。 使用 gMSA 时,没有密码或加密的密码存储在应用程序清单中。 还可以采用 Active Directory 用户或组身份运行服务。

以下示例演示如何创建一个名为 svc-Test$ 的 gMSA 帐户;如何将该托管服务帐户部署到群集节点;以及如何配置用户主体。

先决条件:

  • 域需要 KDS 根密钥。
  • 域必须位于 Windows Server 2012 或更高功能级别上。
  1. 让 Active Directory 域管理员使用 New-ADServiceAccount commandlet 创建组托管服务帐户,并确保 PrincipalsAllowedToRetrieveManagedPassword 包括所有 service fabric 群集节点。 AccountNameDnsHostNameServicePrincipalName 必须是唯一的。

    New-ADServiceAccount -name svc-Test$ -DnsHostName svc-test.contoso.com  -ServicePrincipalNames http/svc-test.contoso.com -PrincipalsAllowedToRetrieveManagedPassword SfNode0$,SfNode1$,SfNode2$,SfNode3$,SfNode4$
    
  2. 在每个 Service Fabric 群集节点(例如,SfNode0$,SfNode1$,SfNode2$,SfNode3$,SfNode4$)上,安装并测试 gMSA。

    Add-WindowsFeature RSAT-AD-PowerShell
    Install-AdServiceAccount svc-Test$
    Test-AdServiceAccount svc-Test$
    
  3. 配置用户主体,并配置 RunAsPolicy 以引用用户。

    <?xml version="1.0" encoding="utf-8"?>
    <ApplicationManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="MyApplicationType" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
        <ServiceManifestImport>
          <ServiceManifestRef ServiceManifestName="MyServiceTypePkg" ServiceManifestVersion="1.0.0" />
          <ConfigOverrides />
          <Policies>
              <RunAsPolicy CodePackageRef="Code" UserRef="DomaingMSA"/>
          </Policies>
        </ServiceManifestImport>
      <Principals>
        <Users>
          <User Name="DomaingMSA" AccountType="ManagedServiceAccount" AccountName="domain\svc-Test$"/>
        </Users>
      </Principals>
    </ApplicationManifest>
    

Note

如果将 RunAs 策略应用到服务,且服务清单使用 HTTP 协议声明终结点资源,则必须指定 SecurityAccessPolicy。 有关详细信息,请参阅为 HTTP 和 HTTPS 终结点分配安全访问策略

有关后续步骤,请阅读以下文章: