Azure service fabric Azure服务结构-用于访问特定服务的证书的SecurityAccessPolicy

Azure service fabric Azure服务结构-用于访问特定服务的证书的SecurityAccessPolicy,azure-service-fabric,Azure Service Fabric,我有一个具有以下结构的SF应用程序 Application1 - ServiceA -> Deployed to NodeType1 - ServiceB -> Deployed to NodeType2 - ServiceC -> Deployed to NodeType2 - ServiceD -> Deployed to NodeType2 ServiceA是侦听TCP端口的前端服务,有一些特定的安全要求。因此,它部署在节点pe1上 服务B、C&D是后端服

我有一个具有以下结构的SF应用程序

Application1
 - ServiceA -> Deployed to NodeType1
 - ServiceB -> Deployed to NodeType2
 - ServiceC -> Deployed to NodeType2
 - ServiceD -> Deployed to NodeType2
ServiceA是侦听TCP端口的前端服务,有一些特定的安全要求。因此,它部署在节点pe1

服务B、C&D是后端服务,部署到节点PE2

服务a要求NetworkServiceAccount能够访问仅安装在节点PE1中的证书。因为这不是端点证书,所以我正在尝试为此证书资源定义SecurityAccessPolicy。最初,我尝试在AppManifest.xml中定义以下内容

<Principals>
  <Users>
    <User Name="SfServiceUser" AccountType="NetworkService" />
  </Users>
</Principals>
<Policies>
  <SecurityAccessPolicies>
    <SecurityAccessPolicy ResourceRef="TLS Certificate" PrincipalRef="SfServiceUser" ResourceType="Certificate" />
  </SecurityAccessPolicies>
</Policies>
<Certificates>
  <SecretsCertificate X509FindValue="[TlsCertificateThumbprint]" Name="TLS Certificate" />
</Certificates>

注册ApplicationType时,由于“服务结构错误:未能访问应用程序所需的文件夹或证书。错误:未找到结构证书”。这是因为“TLS证书”仅安装在NodeType1中,但SF也在NodeType2中查找此证书

作为一种解决方法,我尝试在AppManifest.xml的ServiceManifestImport部分中定义SecurityAccessPolicy,如下所示

  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="ProtocolGateway.Host.Fabric.FrontEndPkg" ServiceManifestVersion="1.0.0" />
    <Policies>
      <RunAsPolicy CodePackageRef="Code" UserRef="SetupAdminUser" EntryPointType="Setup" />
      <RunAsPolicy CodePackageRef="Code" UserRef="SfServiceUser" />
      <SecurityAccessPolicy ResourceRef="TLS Certificate" PrincipalRef="SfServiceUser" ResourceType="Certificate" />
    </Policies>
  </ServiceManifestImport>

但此操作也失败,并出现错误-“SecurityAccessPolicy中的“TLS证书”资源无效。相应的ServiceManifest中没有匹配的资源。”

尽管ServiceManifestImport部分中的SecurityAccessPolicy接受ResourceType作为证书,但ServiceManifestment不支持将证书定义为资源。仅支持端点

虽然我可以在一个ApplicationType中定义ServiceA,在另一个ApplicationType中定义其他服务,但我不打算这样做,因为这些是相关的服务,我希望使用SF版本控制来管理升级和回滚


请建议我处理此要求的备选方案。

我可以想到的一个解决方法是:使用和PS脚本(例如)手动ACL证书。您可以通过环境变量覆盖(
ServiceManifestImport
EnvironmentOverrides
EnvironmentVariable
)从应用程序清单传递指纹。