Share via


Bir hizmeti yerel kullanıcı hesabı veya yerel sistem hesabı olarak çalıştırma

Azure Service Fabric'i kullanarak kümede çalışan uygulamaların güvenliğini farklı kullanıcı hesapları altında sağlayabilirsiniz. Varsayılan olarak, Service Fabric uygulamaları Fabric.exe işleminin altında çalıştığı hesap altında çalışır. Service Fabric ayrıca uygulamaları yerel kullanıcı veya sistem hesabı altında çalıştırma özelliği de sağlar. Desteklenen yerel sistem hesap türleri LocalUser, NetworkService, LocalService ve LocalSystem'dır. Service Fabric'i windows tek başına bir kümede çalıştırıyorsanız, Active Directory etki alanı hesapları veya grup tarafından yönetilen hizmet hesapları altında bir hizmet çalıştırabilirsiniz.

Uygulama bildiriminde, Sorumlular bölümünde hizmetleri çalıştırmak veya kaynakların güvenliğini sağlamak için gereken kullanıcı hesaplarını tanımlarsınız. Ayrıca, bir veya daha fazla kullanıcının birlikte yönetilebilmesi için kullanıcı grupları tanımlayabilir ve oluşturabilirsiniz. Bu, farklı hizmet giriş noktaları için birden çok kullanıcı olduğunda ve grup düzeyinde kullanılabilen ortak ayrıcalıklara ihtiyaç duyduklarında yararlıdır. Kullanıcılara daha sonra belirli bir hizmete veya uygulamadaki tüm hizmetlere uygulanan bir RunAs ilkesinde başvurulur.

Varsayılan olarak, RunAs ilkesi ana giriş noktasına uygulanır. Ayrıca, bir sistem hesabı altında belirli yüksek ayrıcalıklı kurulum işlemlerini ya da hem ana hem de kurulum giriş noktalarını çalıştırmanız gerekiyorsa kurulum giriş noktasına bir RunAs ilkesi uygulayabilirsiniz.

Not

Bir hizmete Bir RunAs ilkesi uygularsanız ve hizmet bildirimi HTTP protokolüyle uç nokta kaynaklarını bildirirse, bir SecurityAccessPolicy belirtmeniz gerekir. Daha fazla bilgi için bkz . HTTP ve HTTPS uç noktaları için güvenlik erişim ilkesi atama.

Hizmeti yerel kullanıcı olarak çalıştırma

Uygulama içinde bir hizmetin güvenliğini sağlamaya yardımcı olmak için kullanılabilecek bir yerel kullanıcı oluşturabilirsiniz. Uygulama bildiriminin sorumlular bölümünde bir LocalUser hesap türü belirtildiğinde, Service Fabric uygulamanın dağıtıldığı makinelerde yerel kullanıcı hesapları oluşturur. Varsayılan olarak, bu hesaplar uygulama bildiriminde belirtilenlerle aynı adlara sahip değildir (örneğin, aşağıdaki uygulama bildirimi örneğinde Customer3 ). Bunun yerine, dinamik olarak oluşturulurlar ve rastgele parolalara sahiptirler.

ServiceManifestImport için RunAsPolicy bölümünde, hizmet kodu paketini çalıştırmak için Sorumlular bölümünden kullanıcı hesabını belirtin. Aşağıdaki örnekte, yerel kullanıcı oluşturma ve ana giriş noktasına RunAs ilkesi uygulama gösterilmektedir:

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="Application7Type" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="Web1_InstanceCount" DefaultValue="-1" />
  </Parameters>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Web1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <RunAsPolicy CodePackageRef="Code" UserRef="Customer3" EntryPointType="Main" />
    </Policies>
  </ServiceManifestImport>
  <DefaultServices>    
    <Service Name="Web1" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="Web1Type" InstanceCount="[Web1_InstanceCount]">
        <SingletonPartition />
      </StatelessService>
    </Service>
  </DefaultServices>
  <Principals>
    <Users>
      <User Name="Customer3" />
    </Users>
  </Principals>
</ApplicationManifest>

Yerel kullanıcı grubu oluşturma

Kullanıcı grupları oluşturabilir ve gruba bir veya daha fazla kullanıcı ekleyebilirsiniz. Farklı hizmet giriş noktaları için birden çok kullanıcı varsa ve grup düzeyinde kullanılabilen belirli ortak ayrıcalıklara sahip olmaları gerekiyorsa bu yararlı olur. Aşağıdaki uygulama bildirimi örneği, yönetici ayrıcalıklarına sahip LocalAdminGroup adlı yerel bir grubu gösterir. Customer1 ve Customer2 olarak iki kullanıcı bu yerel grubun üyesi yapılır. ServiceManifestImport bölümünde, Stateful1Pkg kod paketini Customer2 olarak çalıştırmak için bir RunAs ilkesi uygulanır. Web1Pkg kod paketini Customer1 olarak çalıştırmak için başka bir RunAs ilkesi uygulanır.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="Application7Type" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="Stateful1_MinReplicaSetSize" DefaultValue="3" />
    <Parameter Name="Stateful1_PartitionCount" DefaultValue="1" />
    <Parameter Name="Stateful1_TargetReplicaSetSize" DefaultValue="3" />
    <Parameter Name="Web1_InstanceCount" DefaultValue="-1" />
  </Parameters>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateful1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <RunAsPolicy CodePackageRef="Code" UserRef="Customer2" EntryPointType="Main"/>
    </Policies>
  </ServiceManifestImport>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Web1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <RunAsPolicy CodePackageRef="Code" UserRef="Customer1" EntryPointType="Main"/>
    </Policies>
  </ServiceManifestImport>
  <DefaultServices>
    <Service Name="Stateful1" ServicePackageActivationMode="ExclusiveProcess">
      <StatefulService ServiceTypeName="Stateful1Type" TargetReplicaSetSize="[Stateful1_TargetReplicaSetSize]" MinReplicaSetSize="[Stateful1_MinReplicaSetSize]">
        <UniformInt64Partition PartitionCount="[Stateful1_PartitionCount]" LowKey="-9223372036854775808" HighKey="9223372036854775807" />
      </StatefulService>
    </Service>
    <Service Name="Web1" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="Web1Type" InstanceCount="[Web1_InstanceCount]">
        <SingletonPartition />
      </StatelessService>
    </Service>
  </DefaultServices>
  <Principals>
    <Groups>
      <Group Name="LocalAdminGroup">
        <Membership>
          <SystemGroup Name="Administrators" />
        </Membership>
      </Group>
    </Groups>
    <Users>
      <User Name="Customer1">
        <MemberOf>
          <Group NameRef="LocalAdminGroup" />
        </MemberOf>
      </User>
      <User Name="Customer2">
        <MemberOf>
          <Group NameRef="LocalAdminGroup" />
        </MemberOf>
      </User>
    </Users>
  </Principals>
</ApplicationManifest>

Tüm hizmet kodu paketlerine varsayılan ilke uygulama

Belirli bir RunAsPolicy tanımlı olmayan tüm kod paketleri için varsayılan bir kullanıcı hesabı belirtmek için DefaultRunAsPolicy bölümünü kullanırsınız. Bir uygulama tarafından kullanılan hizmet bildiriminde belirtilen kod paketlerinin çoğunun aynı kullanıcı altında çalıştırılması gerekiyorsa, uygulama yalnızca bu kullanıcı hesabıyla varsayılan bir RunAs ilkesi tanımlayabilir. Aşağıdaki örnek, bir kod paketinde RunAsPolicy belirtilmemişse kod paketinin sorumlular bölümünde belirtilen MyDefaultAccount kullanıcısı altında çalıştırılması gerektiğini belirtir. Desteklenen hesap türleri LocalUser, NetworkService, LocalSystem ve LocalService'tır. Yerel bir kullanıcı veya hizmet kullanıyorsanız, hesap adını ve parolayı da belirtin.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="Application7Type" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="Web1_InstanceCount" DefaultValue="-1" />
  </Parameters>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Web1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    
  </ServiceManifestImport>
  <DefaultServices>    
    <Service Name="Web1" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="Web1Type" InstanceCount="[Web1_InstanceCount]">
        <SingletonPartition />
      </StatelessService>
    </Service>
  </DefaultServices>
  <Principals>
    <Users>
      <User Name="MyDefaultAccount" AccountType="NetworkService" />      
    </Users>
  </Principals>
  <Policies>
    <DefaultRunAsPolicy UserRef="MyDefaultAccount" />
  </Policies>
</ApplicationManifest>

Konsol yeniden yönlendirmesini kullanarak bir kod paketinde yerel olarak hata ayıklama

Bazen, çalışan bir hizmetten konsol çıkışını görmek için hata ayıklama amacıyla yararlıdır. Hizmet bildirimindeki giriş noktasında, çıkışı bir dosyaya yazan bir konsol yeniden yönlendirme ilkesi ayarlayabilirsiniz. Dosya çıktısı, uygulamanın dağıtıldığı ve çalıştırıldığı küme düğümünde log adlı uygulama klasörüne yazılır.

Uyarı

Bu, uygulama yük devretmesini etkileyebileceğinden, üretimde dağıtılan bir uygulamada konsol yeniden yönlendirme ilkesini asla kullanmayın. Bunu yalnızca yerel geliştirme ve hata ayıklama amacıyla kullanın.

Aşağıdaki hizmet bildirimi örneği, FileRetentionCount değeriyle konsol yeniden yönlendirmesini etkinleştirmeyi gösterir:

<CodePackage Name="Code" Version="1.0.0">
    <EntryPoint>
      <ExeHost>
        <Program>VotingWeb.exe</Program>
        <WorkingFolder>CodePackage</WorkingFolder>
        <ConsoleRedirection FileRetentionCount="10"/>
      </ExeHost>
    </EntryPoint>
</CodePackage>

Sonraki adımlar