Bagikan melalui


Menjalankan layanan sebagai akun pengguna lokal atau akun sistem lokal

Dengan menggunakan Azure Service Fabric, Anda dapat mengamankan aplikasi yang berjalan di kluster di bawah akun pengguna yang berbeda. Secara default, aplikasi Service Fabric berjalan di bawah akun yang menjalankan proses Fabric.exe. Service Fabric juga menyediakan kemampuan untuk menjalankan aplikasi di bawah pengguna lokal atau akun sistem. Jenis akun sistem lokal yang didukung adalah LocalUser, NetworkService, LocalService, dan LocalSystem. Jika Anda menjalankan Service Fabric pada kluster mandiri Windows, Anda dapat menjalankan layanan di bawah akun domain Active Directory atau akun layanan terkelola grup.

Dalam manifes aplikasi, Anda menentukan akun pengguna yang diperlukan untuk menjalankan layanan atau mengamankan sumber daya di bagian Prinsip. Anda juga dapat menentukan dan membuat grup pengguna sehingga satu atau beberapa pengguna dapat dikelola bersama-sama. Ini berguna ketika ada beberapa pengguna untuk titik masuk layanan yang berbeda dan mereka membutuhkan hak istimewa umum yang tersedia di tingkat grup. Pengguna kemudian dirujuk dalam kebijakan RunAs, yang diterapkan ke layanan tertentu atau semua layanan dalam aplikasi.

Secara default, kebijakan RunAs diterapkan ke titik masuk utama. Anda juga dapat menerapkan kebijakan RunAs ke titik entri penyiapan, jika Anda perlu menjalankan operasi pengaturan hak istimewa tinggi tertentu di bawah akun sistem, atau titik masuk utama dan penyiapan.

Catatan

Jika Anda menerapkan kebijakan RunAs ke layanan dan manifes layanan mendeklarasikan sumber daya titik akhir dengan protokol HTTP, Anda harus menentukan SecurityAccessPolicy. Untuk informasi selengkapnya, lihat Menetapkan kebijakan akses keamanan untuk titik akhir HTTP dan HTTPS.

Menjalankan layanan sebagai pengguna lokal

Anda dapat membuat pengguna lokal yang dapat digunakan untuk membantu mengamankan layanan dalam aplikasi. Ketika jenis akun LocalUser ditentukan di bagian prinsip manifes aplikasi, Service Fabric membuat akun pengguna lokal pada komputer tempat aplikasi disebarkan. Secara default, akun-akun ini tidak memiliki nama yang sama dengan yang ditentukan dalam manifes aplikasi (misalnya, Customer3 dalam contoh manifes aplikasi berikut). Sebaliknya, akun dihasilkan secara dinamis dan memiliki kata sandi acak.

Di bagian RunAsPolicy untuk ServiceManifestImport, tentukan akun pengguna dari bagian Prinsip untuk menjalankan paket kode layanan. Contoh berikut menunjukkan cara membuat pengguna lokal dan menerapkan kebijakan RunAs ke titik masuk utama:

<?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>

Membuat grup pengguna lokal

Anda bisa membuat grup pengguna dan menambahkan satu atau beberapa pengguna ke grup. Ini berguna jika ada beberapa pengguna untuk titik masuk layanan yang berbeda dan mereka harus memiliki hak istimewa umum tertentu yang tersedia di tingkat grup. Contoh manifes aplikasi berikut menunjukkan grup lokal bernama LocalAdminGroup yang memiliki hak istimewa administrator. Dua pengguna, Customer1 dan Customer2, dibuat menjadi anggota grup lokal ini. Di bagian ServiceManifestImport, kebijakan RunAs diterapkan untuk menjalankan paket kode Stateful1Pkg sebagai Customer2. Kebijakan RunAs lain diterapkan untuk menjalankan paket kode Web1Pkg sebagai Customer1.

<?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>

Menerapkan kebijakan default ke semua paket kode layanan

Anda menggunakan bagian DefaultRunAsPolicy untuk menentukan akun pengguna default untuk semua paket kode yang tidak memiliki RunAsPolicy tertentu yang ditentukan. Jika sebagian besar paket kode yang ditentukan dalam manifes layanan yang digunakan oleh aplikasi perlu dijalankan di bawah pengguna yang sama, aplikasi hanya dapat menentukan kebijakan RunAs default dengan akun pengguna tersebut. Contoh berikut menentukan bahwa jika paket kode tidak memiliki RunAsPolicy yang ditentukan, paket kode harus berjalan di bawah pengguna MyDefaultAccount yang ditentukan di bagian prinsipal. Jenis akun yang didukung adalah LocalUser, NetworkService, LocalSystem, dan LocalService. Jika menggunakan pengguna atau layanan lokal, tentukan juga nama akun dan kata sandi.

<?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>

Men-debug paket kode secara lokal menggunakan pengalihan konsol

Terkadang, ini berguna untuk tujuan penelusuran kesalahan untuk melihat output konsol dari layanan yang sedang berjalan. Anda dapat mengatur kebijakan pengalihan konsol pada titik masuk dalam manifes layanan, yang menulis output ke file. Output file ditulis ke folder aplikasi yang disebut log pada node kluster tempat aplikasi disebarkan dan dijalankan.

Peringatan

Jangan pernah menggunakan kebijakan pengalihan konsol dalam aplikasi yang disebarkan dalam produksi karena ini dapat memengaruhi kegagalan aplikasi. Hanya gunakan ini untuk tujuan pengembangan dan penelusuran kesalahan lokal.

Contoh manifes layanan berikut menunjukkan mengaktifkan pengalihan konsol dengan nilai FileRetentionCount:

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

Langkah berikutnya