Azure Service Fabric - SecurityAccessPolicy,用于访问特定服务的证书

时间:2016-11-15 03:13:45

标签: azure-service-fabric

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

Application1
 - ServiceA -> Deployed to NodeType1
 - ServiceB -> Deployed to NodeType2
 - ServiceC -> Deployed to NodeType2
 - ServiceD -> Deployed to NodeType2

ServiceA 是一种侦听TCP端口的前端服务,具有一些特定的安全要求。因此,它部署在 NodeType1

服务B,C& D 是后端服务,并部署到 NodeType2

ServiceA 要求NetworkServiceAccount可以访问仅在 NodeType1 中安装的证书。因为这不是端点证书,我正在尝试为此证书资源定义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时,它失败并出现“服务结构错误:应用程序所需的ACL文件夹或证书失败。错误:FABRIC_E_CERTIFICATE_NOT_FOUND”。这是因为“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中的ResouceRef'TLS证书'无效。相应的ServiceManifest中没有匹配的资源。”

虽然ServiceManifestImport部分中的SecurityAccessPolicy接受ResourceType作为证书,但ServiceManifest不支持将证书定义为资源。仅支持EndPoint。

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

请建议我替代处理此要求。

0 个答案:

没有答案
相关问题