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

適用先:Windows PowerShell 4.0、Windows PowerShell 5.0

重要

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

DSC SMB プル サーバーは、DSC 構成ファイルと DSC リソースを必要なときにターゲット ノードに提供する SMB ファイル共有をホストするコンピューターです。

DSC の SMB プル サーバーを使うには、次のことが必要です。

  • PowerShell 4.0 以降を実行しているサーバーに SMB ファイル共有をセットアップする
  • SMB 共有からプルするための、PowerShell 4.0 以降を実行しているクライアントを構成する

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

SMB ファイル共有を設定する方法はいくつかありますが、ここでは DSC を使って設定する方法を紹介します。

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

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

Note

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

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

次の構成では、File リソースを使って共有するディレクトリを作成し、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 ファイル共有として使用されます。 FullAccess は、ファイル共有に書き込む必要があるか、ファイル共有から削除する必要があるあらゆるアカウントに付与してください。 ReadAccess は、共有から構成または DSC リソースを取得するあらゆるクライアント ノードに付与する必要があります。

Note

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

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

クライアント ノードに ReadAccess を与えると、そのノードは SMB 共有にアクセスできるようになりますが、その共有内のファイルやフォルダーにはアクセスできません。 クライアント ノードに、SMB 共有のフォルダーやサブフォルダーに対するアクセス権限を明示的に許可する必要があります。 DSC でこれを行うには、cNtfsAccessControl モジュールに含まれている cNtfsPermissionEntry リソースを使用して追加します。 次の構成では、プル クライアントに 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'
        }
    }
}

構成とリソースの配置

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

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

Note

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

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

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

プル サーバー用にパッケージ化する前に、パスが {Module Folder}\DscResources\{DSC Resource Folder}\ になるように単純に {Module version} フォルダーを削除します。 この変更を加えた後、上で説明したようにフォルダーを zip 圧縮し、これらの zip ファイルを SMB 共有フォルダーに置きます。

MOF チェックサムの作成

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

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

Note

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

SMB のプル クライアントのセットアップ

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

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

Note

わかりやすくする目的で、この例では PSDscAllowPlainTextPassword を使用し、Credential パラメーターにプレーンテキスト パスワードを渡すようにしています。 資格情報をより安全に渡す方法については、「構成データでの資格情報オプション」を参照してください。 リソースをプルするだけであっても、SMB プル サーバーのメタ構成の設定ブロックに 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
        })
}

謝辞

次の方々に感謝します。

  • DSC で SMB を使用することに関する Mike F. Robbins 氏の投稿を、このトピックの内容として参考にしました。 彼のブログは Mike F Robbins にあります。
  • cNtfsAccessControl モジュールを作成した Serge Nikalaichyk 氏。 このモジュールのソースは cNtfsAccessControl にあります。

関連項目

Windows PowerShell Desired State Configuration の概要

構成の適用

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