gpt4 book ai didi

security - 如何运行具有不同安全权限的Service Fabric应用程序?

转载 作者:行者123 更新时间:2023-12-04 04:20:56 27 4
gpt4 key购买 nike

服务结构运行方式功能

默认情况下,Service Fabric应用程序将与网络服务帐户一起运行。 Microsoft有(部分)文档说明如何使用其他权限运行它:RunAs: Run a Service Fabric application with different security permissions

基于此,这是我要尝试执行的操作:

  • 我的Service Fabric应用程序调用一个正在其他存储库中开发的库。
  • 在云中部署后,这些服务将从存储中下载该库的二进制文件,将其解压缩到Service Fabric群集的工作目录中,然后从那里进行加载。
  • 在开发时,当我在本地集群中测试或调试应用程序时,我希望从我刚刚编译它们的本地硬盘驱动器上的某个文件夹中加载该库的二进制文件,该文件位于该文件的旁边。源代码。

  • 棘手的部分是,我公司的安全策略要求仅授权用户才能访问该库的源代码,这会将其转换为包含 protected 代码的文件夹。结果,作为网络服务运行的Service Fabric应用程序无法访问我的二进制文件。不能更改安全策略,也不能授予网络服务访问该文件夹的权限。

    如何配置应用程序,使其以具有正确访问权限的用户身份运行?

    这是我已经尝试过的:

    使用域用户

    最简单的解决方案是能够使用我自己的登录名运行Service Fabric应用程序。我通过将以下内容添加到ApplicationManifest.xml中来进行尝试:

    <Principals>
    <Users>
    <User Name="SfUser" AccountName="Domain\UserName" AccountType="DomainUser" Password="pass" />
    </Users>
    </Principals>
    <Policies>
    <DefaultRunAsPolicy UserRef="SfUser" />
    </Policies>

    这可行:应用程序以Domain\UserName的身份运行,并且可以访问我需要的所有文件夹。但这需要我将密码放入配置文件中,这并不令人满意。

    使用本地用户

    然后,我尝试使用本地用户,以为我可以使用本地用户组正确配置访问权限。我能想到的最简单的版本是这样的:

    <Principals>
    <Users>
    <User Name="SfUser" AccountName="LocalSfUser" AccountType="LocalUser">
    <MemberOf>
    <SystemGroup Name="MyLocalGroup"/>
    </MemberOf>
    </User>
    </Users>
    </Principals>
    <Policies>
    <DefaultRunAsPolicy UserRef="SfUser" />
    </Policies>

    我认为此配置是正确的,因为在部署应用程序时,我可以在Windows用户管理器中看到Service Fabric在其中创建了多个“技术”用户,并且这些用户属于MyLocalGroup。但是,我的应用程序从未启动。

    我注意到Windows事件查看器中的几条消息似乎与该问题有关:
    Logon Type:               8

    Failure Information:
    Failure Reason: The user has not been granted the requested logon type at this machine.

    Process Information:
    Caller Process Name: C:\Program Files\Microsoft Service Fabric\bin\FabricHost.exe

    显然,“登录类型8”表示“网络明文登录”。我怀疑本地有一项政策禁止在我的公司中进行这种登录。

    最佳答案

    当您以本地用户身份运行时,这将在计算机上创建一个随机的本地用户帐户。在上面的示例中最有可能失败的原因是<SystemGroup Name="MyLocalGroup"/>必须是有效的Windows系统组,例如“Administrators”。您也实际上并不需要上面的AccountName属性,但这没有害处。

    为了解决从远程目录获取文件的问题,您需要像尝试使用域用户一样,因为本地用户没有可以用AD验证的共享 key 。区别在于您可以使用部署到计算机的证书对应用程序 list 中的密码进行加密。我在下面放置了一个示例ApplicationManifest.xml代码段,该代码段显示了如何使用名为“MyCert”的证书对域用户的密码进行加密。

    <Principals>
    <Users>
    <User Name="TestUser" AccountType="DomainUser" AccountName="Domain\User" Password="[Put Encrypted Password Here" PasswordEncrypted="true" />
    </Users>
    </Principals>
    <Policies>
    <DefaultRunAsPolicy UserRef="TestUser" />
    <SecurityAccessPolicies>
    <SecurityAccessPolicy ResourceRef="MyCert" PrincipalRef="TestUser" GrantRights="Full" ResourceType="Certificate" />
    </SecurityAccessPolicies>
    </Policies>

    附带说明一下,这里的 https://azure.microsoft.com/en-us/documentation/articles/service-fabric-application-secret-management文章显示了如何在settings.xml中创建加密的密码,这通常也很有用。

    关于security - 如何运行具有不同安全权限的Service Fabric应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39126630/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com