ローカル ユーザー アカウントまたはローカル システム アカウントとしてサービスを実行するRun a service as a local user account or local system account

Azure Service Fabric を使用すると、別のユーザー アカウントを使用してクラスターで実行しているアプリケーションをセキュリティで保護することができます。By using Azure Service Fabric, you can secure applications that are running in the cluster under different user accounts. 既定では、Service Fabric アプリケーションは、Fabric.exe プロセスを実行しているアカウントで実行されます。By default, Service Fabric applications run under the account that the Fabric.exe process runs under. Service Fabric には、ローカル ユーザーまたはシステム アカウントでアプリケーションを実行する機能もあります。Service Fabric also provides the capability to run applications under a local user or system account. サポートされているローカル システム アカウントの種類は、LocalUserNetworkServiceLocalServiceLocalSystem です。Supported local system account types are LocalUser, NetworkService, LocalService, and LocalSystem. Windows スタンドアロン クラスターで Service Fabric を実行している場合は、Active Directory ドメイン アカウントまたはグループ管理サービス アカウントでサービスを実行することができます。If you're running Service Fabric on a Windows standalone cluster, you can run a service under Active Directory domain accounts or group managed service accounts.

アプリケーション マニフェストの Principals セクションで、サービスの実行またはリソースの保護に必要なユーザー アカウントを定義します。In the application manifest, you define the user accounts required to run services or secure resources in the Principals section. 1 人以上のユーザーをまとめて管理できるように、ユーザー グループを定義および作成することもできます。You can also define and create user groups so that one or more users can be managed together. これは、異なるサービス エントリ ポイントに対して複数のユーザーが存在し、それらのユーザーがグループ レベルで使用できる共通の特権を必要とする場合に便利です。This is useful when there are multiple users for different service entry points and they need common privileges that are available at the group level. ユーザーは、アプリケーション内の特定のサービスまたはすべてのサービスに適用される RunAs ポリシーで参照されます。The users are then referenced in a RunAs policy, which is applied to a specific service or all the services in the application.

既定では、RunAs ポリシーはメイン エントリ ポイントに適用されます。By default, the RunAs policy is applied to the main entry point. システム アカウントで特定の高特権セットアップ操作を実行する必要がある場合は、RunAs ポリシーをセットアップ エントリ ポイントに適用することもでき、メイン エントリ ポイントとセットアップ エントリポイントの両方に適用することもできます。You can also apply a RunAs policy to the setup entry point, if you need to run certain high-privilege setup operations under a system account, or both main and setup entry points.

注意

サービスに RunAs ポリシーを適用し、サービス マニフェストで HTTP プロトコルのエンドポイント リソースを宣言する場合は、SecurityAccessPolicy を指定する必要があります。If you apply a RunAs policy to a service and the service manifest declares endpoint resources with the HTTP protocol, you must specify a SecurityAccessPolicy. 詳細については、HTTP と HTTPS エンドポイントのセキュリティ アクセス ポリシーを割り当てるをご覧ください。For more information, see Assign a security access policy for HTTP and HTTPS endpoints.

ローカル ユーザーとしてのサービスの実行Run a service as a local user

アプリケーション内のサービスをセキュリティで保護するために使用できるローカル ユーザーを作成できます。You can create a local user that can be used to help secure a service within the application. アプリケーション マニフェストの Principals セクションでアカウントの種類として LocalUser が指定されている場合、Service Fabric はアプリケーションがデプロイされているコンピューターにローカル ユーザー アカウントを作成します。When a LocalUser account type is specified in the principals section of the application manifest, Service Fabric creates local user accounts on machines where the application is deployed. 既定では、これらのアカウントにアプリケーション マニフェストで指定されているものと同じ名前は付けられません (たとえば、次のアプリケーション マニフェストの例では Customer3)。By default, these accounts do not have the same names as those specified in the application manifest (for example, Customer3 in the following application manifest example). 代わりに、動的に生成され、ランダムなパスワードが与えられます。Instead, they are dynamically generated and have random passwords.

ServiceManifestImportRunAsPolicy セクションでは、Principals セクションからユーザー アカウントを指定してサービス コード パッケージを実行します。In the RunAsPolicy section for a ServiceManifestImport, specify the user account from the Principals section to run the service code package. 次の例は、ローカル ユーザーを作成し、メイン エントリ ポイントに RunAs ポリシーを適用する方法を示しています。The following example shows how to create a local user and apply a RunAs policy to the main entry point:

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

ローカル ユーザー グループを作成するCreate a local user group

ユーザー グループを作成し、グループに 1 人以上のユーザーを追加できます。You can create user groups and add one or more users to the group. これは、異なるサービス エントリ ポイントに対して複数のユーザーが存在し、グループ レベルで使用できる特定の共通の特権が必要な場合に便利です。This is useful if there are multiple users for different service entry points and they need to have certain common privileges that are available at the group level. 次のアプリケーション マニフェスト例は、管理者特権を持つ LocalAdminGroup というローカル グループを示しています。The following application manifest example shows a local group named LocalAdminGroup that has administrator privileges. 2 人のユーザー、Customer1Customer2 がこのローカル グループのメンバーになっています。Two users, Customer1 and Customer2, are made members of this local group. ServiceManifestImport セクションで、Stateful1Pkg コード パッケージを Customer2 として実行する RunAs ポリシーが適用されます。In the ServiceManifestImport section, a RunAs policy is applied to run the Stateful1Pkg code package as Customer2. Web1Pkg コード パッケージを Customer1 として実行する別の RunAs ポリシーが適用されます。Another RunAs policy is applied to run the Web1Pkg code package as 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>

すべてのサービス コード パッケージに既定のポリシーを適用するApply a default policy to all service code packages

DefaultRunAsPolicy セクションを使用して、特定の RunAsPolicy が定義されていないすべてのコード パッケージに既定のユーザー アカウントを指定します。You use the DefaultRunAsPolicy section to specify a default user account for all code packages that don’t have a specific RunAsPolicy defined. アプリケーションによって使用されるサービス マニフェストで指定されているほとんどのコード パッケージが同じユーザーで実行される必要がある場合、そのユーザー アカウントで既定の RunAs ポリシーのみを定義することができます。If most of the code packages that are specified in the service manifest used by an application need to run under the same user, the application can just define a default RunAs policy with that user account. 次の例では、コード パッケージで RunAsPolicy が指定されていない場合、コード パッケージは Principals セクションで指定されている MyDefaultAccount ユーザーを使用して実行する必要があります。The following example specifies that if a code package does not have a RunAsPolicy specified, the code package should run under the MyDefaultAccount user specified in the principals section. サポートされているアカウントの種類は、LocalUser、NetworkService、LocalSystem、LocalService です。Supported account types are LocalUser, NetworkService, LocalSystem, and LocalService. ローカル ユーザーまたはサービスを使用する場合は、アカウント名とパスワードも指定します。If using a local user or service, also specify the account name and password.

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

コンソール リダイレクトを使用してローカルでコード パッケージをデバッグするDebug a code package locally using console redirection

場合によっては、デバッグ目的で実行中のサービスの実行結果をコンソールに出力し、確認すると便利です。Occasionally, it's useful for debugging purposes to see the console output from a running service. サービス マニフェストのエントリ ポイントでは、コンソール リダイレクト ポリシーを設定できます。これにより出力がファイルに書き込まれます。You can set a console redirection policy on the entry point in the service manifest, which writes the output to a file. ファイル出力はアプリケーションがデプロイおよび実行されるクラスター ノード上の log と呼ばれるアプリケーション フォルダーに書き込まれます。The file output is written to the application folder called log on the cluster node where the application is deployed and run.

警告

アプリケーションのフェールオーバーに影響する可能性があるため、運用環境でデプロイされたアプリケーションのコンソール リダイレクト ポリシーは決して使用しないでください。Never use the console redirection policy in an application that is deployed in production because this can affect the application failover. これは、ローカル デプロイおよびデバッグの目的のため "だけ" に使用します。Only use this for local development and debugging purposes.

次のサービス マニフェストの例は、FileRetentionCount 値を使用したコンソール リダイレクトの有効化を示しています。The following service manifest example shows enabling console redirection with a FileRetentionCount value:

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

次の手順Next steps