DSC SMB プル サーバーのセットアップ

適用対象: Windows PowerShell 4.0、Windows PowerShell 5.0

Important

プル サーバー (Windows 機能 DSC-Service) は Windows Server のサポートされているコンポーネントですが、新しい機能を提供する予定はありません。 新しいバージョンの DSC が一般提供され、 ゲスト構成という名前の Azure Policy の機能によって管理されることをお知らせします。 ゲスト構成サービスは、DSC 拡張機能、Azure Automation State Configuration、およびお客様からのフィードバックから最も要望の多かった機能を組み合わせたものです。 ゲスト構成には、 Arc 対応サーバーを介したハイブリッド マシンのサポートも含まれます。

DSC SMB プルサーバーは、SMBファイル共有をホストするコンピューターであり、DSC構成ファイルとDSCリソースがターゲットノードから要求されたときに、ターゲットノードで使用できるようにします。

DSC に SMB プル サーバーを使用するには、次のことを行う必要があります。

  • PowerShell 4.0 以降を実行しているサーバーで SMB ファイル共有を設定する
  • PowerShell 4.0 以降を実行しているクライアントを、その SMB 共有からプルするように構成する

xSmbShare リソースを使用して SMB ファイル共有を作成する

SMB ファイル共有を設定する方法はいくつかありますが、DSC を使用してこれを行う方法を見てみましょう。

xSmbShare リソースをインストールする

Install-Module コマンドレットを呼び出して、xSmbShare モジュールをインストールします。

注

Install-Module は、PowerShell 5.0 に含まれる PowerShellGet モジュールに含まれています。 xSmbShare には、SMB ファイル共有の作成に使用できる DSC リソース xSmbShare が含まれています。

ディレクトリとファイル共有を作成する

次の構成では、 ファイル リソースを使用して共有のディレクトリを作成し、 xSmbShare リソースを使用して SMB 共有を設定します。

Configuration SmbShare
{
    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Import-DscResource -ModuleName xSmbShare

    Node localhost
    {

        File CreateFolder
        {
            DestinationPath = 'C:\DscSmbShare'
            Type = 'Directory'
            Ensure = 'Present'
        }

        xSMBShare CreateShare
        {
            Name = 'DscSmbShare'
            Path = 'C:\DscSmbShare'
            FullAccess = 'administrator'
            ReadAccess = 'myDomain\Contoso-Server$'
            FolderEnumerationMode = 'AccessBased'
            Ensure = 'Present'
            DependsOn = '[File]CreateFolder'
        }
    }
}

この構成では、ディレクトリ C:\DscSmbShare (まだ存在しない場合) を作成し、そのディレクトリを SMB ファイル共有として使用します。 フルアクセス は、ファイル共有に書き込むか、ファイル共有から削除する必要があるすべてのアカウントに付与する必要があります。 ReadAccess は、共有から構成や DSC リソースを取得するクライアント ノードに付与する必要があります。

注

DSC は既定でシステム アカウントとして実行されるため、コンピューター自体が共有にアクセスできる必要があります。

プル クライアントへのファイル システム アクセス権の付与

クライアント ノードに ReadAccess を付与すると、そのノードは SMB 共有にアクセスできますが、その共有内のファイルやフォルダーにはアクセスできません。 クライアントノードに SMB 共有フォルダーとサブフォルダーへのアクセス権を明示的に付与する必要があります。 これは、CNtfsAccessControl モジュールに含まれる cNtfsPermissionEntry リソースを使用して追加することで、DSC で行うことができます。 次の構成では、プル クライアントへの ReadAndExecute アクセスを許可する cNtfsPermissionEntry ブロックを追加します。

Configuration DSCSMB
{
    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Import-DscResource -ModuleName xSmbShare
    Import-DscResource -ModuleName cNtfsAccessControl

    Node localhost
    {

        File CreateFolder
        {
            DestinationPath = 'C:\DscSmbShare'
            Type = 'Directory'
            Ensure = 'Present'
        }

        xSMBShare CreateShare
        {
            Name = 'DscSmbShare'
            Path = 'C:\DscSmbShare'
            FullAccess = 'administrator'
            ReadAccess = 'myDomain\Contoso-Server$'
            FolderEnumerationMode = 'AccessBased'
            Ensure = 'Present'
            DependsOn = '[File]CreateFolder'
        }

        cNtfsPermissionEntry PermissionSet1
        {
            Ensure = 'Present'
            Path = 'C:\DscSmbShare'
            Principal = 'myDomain\Contoso-Server$'
            AccessControlInformation = @(
                cNtfsAccessControlInformation
                {
                    AccessControlType = 'Allow'
                    FileSystemRights = 'ReadAndExecute'
                    Inheritance = 'ThisFolderSubfoldersAndFiles'
                    NoPropagateInherit = $false
                }
            )
            DependsOn = '[File]CreateFolder'
        }
    }
}

構成とリソースの配置

クライアント ノードが SMB 共有フォルダーにプルする構成 MOF ファイルや DSC リソースを保存します。

構成 MOF ファイルには <ConfigurationID>.mof という名前を付ける必要があります。 <ConfigurationID> はターゲット ノードの LCM の ConfigurationID プロパティの値です。 プルクライアントの設定の詳細については、「 設定 ID を使用したプルクライアントの設定」を参照してください。

注

SMB プル サーバーを使用している場合は、構成 ID を使用する必要があります。 構成名は SMB ではサポートされていません。

各リソース モジュールは、次のパターン {Module Name}_{Module Version}.zipに従って圧縮し、名前を付ける必要があります。 たとえば、モジュールバージョンが 3.1.2.0 の xWebAdminstration という名前のモジュールの名前は xWebAdministration_3.2.1.0.zip になります。 モジュールの各バージョンは、1 つの zip ファイルに含まれている必要があります。 zip ファイル内のモジュールの個別のバージョンはサポートされていません。 プル サーバーで使用するために DSC リソース モジュールをパッケージ化する前に、ディレクトリ構造に小さな変更を加える必要があります。

WMF 5.0 の DSC リソースを含むモジュールのデフォルトの形式は {Module Folder}\{Module Version}\DscResources\{DSC Resource Folder}\ です。

プルサーバー用にパッケージ化する前に、 {Module version} フォルダーを削除してパスを {Module Folder}\DscResources\{DSC Resource Folder}\します。 この変更により、上記のようにフォルダーを圧縮し、これらの zip ファイルを SMB 共有フォルダーに配置します。

MOF チェックサムの作成

構成 MOF ファイルは、ターゲット ノード上の LCM が構成を検証できるように、チェックサム ファイルとペアにする必要があります。 チェックサムを作成するには、 New-DSCCheckSum コマンドレットを呼び出します。 コマンドレットは、構成 MOF が配置されているフォルダーを指定する Path パラメーターを受け取ります。 このコマンドレットは、 ConfigurationMOFName.mof.checksum という名前のチェックサム ファイルを作成します ( ConfigurationMOFName は構成 mof ファイルの名前です)。 指定したフォルダに複数の構成 MOF ファイルがある場合は、フォルダ内の構成ごとにチェックサムが作成されます。

チェックサム ファイルは、構成 MOF ファイルと同じディレクトリ (既定では $env:PROGRAMFILES\WindowsPowerShell\DscService\Configuration ) に存在し、同じ名前に .checksum 拡張子が付加されている必要があります。

注

構成 MOF ファイルを何らかの方法で変更した場合は、チェックサム ファイルも再作成する必要があります。

SMB 用のプル クライアントの設定

SMB 共有から構成やリソースをプルするクライアントを設定するには、構成と DSC リソースのプル元の共有を指定する ConfigurationRepositoryShare ブロックと ResourceRepositoryShare ブロックを使用して、クライアントのローカル構成マネージャー (LCM) を構成します。

LCM の構成の詳細については、「 構成 ID を使用したプル クライアントのセットアップ」を参照してください。

注

わかりやすくするために、この例では PSDscAllowPlainTextPassword を使用して、プレーンテキスト パスワードを Credential パラメーターに渡すことができます。 資格情報をより安全に渡す方法については、「 構成データの資格情報オプション」を参照してください。 リソースのみをプルする場合でも、SMB プル サーバーのメタ構成の Settings ブロックで ConfigurationID を指定する必要があります。

$secpasswd = ConvertTo-SecureString "Pass1Word" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("TestUser", $secpasswd)

[DSCLocalConfigurationManager()]
configuration SmbCredTest
{
    Node $AllNodes.NodeName
    {
        Settings
        {
            RefreshMode = 'Pull'
            RefreshFrequencyMins = 30
            RebootNodeIfNeeded = $true
            ConfigurationID    = '16db7357-9083-4806-a80c-ebbaf4acd6c1'
        }

         ConfigurationRepositoryShare SmbConfigShare
        {
            SourcePath = '\\WIN-E0TRU6U11B1\DscSmbShare'
            Credential = $mycreds
        }

        ResourceRepositoryShare SmbResourceShare
        {
            SourcePath = '\\WIN-E0TRU6U11B1\DscSmbShare'
            Credential = $mycreds

        }
    }
}

$ConfigurationData = @{
    AllNodes = @(
        @{
            #the "*" means "all nodes named in ConfigData" so we don't have to repeat ourselves
            NodeName="localhost"
            PSDscAllowPlainTextPassword = $true
        })
}

謝辞

以下の方々に感謝いたします。

  • Mike F. Robbins は、DSC での SMB の使用に関する投稿が、このトピックの内容に情報を提供するのに役立ちました。 彼のブログは マイク・F・ロビンスにあります。
  • cNtfsAccessControl モジュールの作成者である Serge Nikalaichyk。 このモジュールのソースは cNtfsAccessControl にあります。

こちらも参照ください

Windows PowerShell の Desired State 構成の概要

構成の制定

構成 ID を使用したプル クライアントのセットアップ