カスタム マシン構成ポリシー定義の作成方法
始める前に、マシン構成の概要に関するページと、マシン構成の修復オプションの詳細を読むことをお勧めします。
重要
Azure 仮想マシンには、マシン構成拡張機能が必要です。 すべてのマシンに対して大規模な拡張を展開するために、次のようなポリシー イニシアティブを割り当ててください: Deploy prerequisites to enable machine configuration policies on virtual machines
マシン構成パッケージを使って構成を行うには、Azure VM ゲスト構成拡張のバージョン 1.26.24 以降、または Arc エージェントのバージョン 1.10.0 以降が必要です。
AuditIfNotExists
または DeployIfNotExists
を使用するカスタム マシンの構成ポリシー定義は、一般公開 (GA) サポート状態です。
コンプライアンスの監査や Azure または Arc 対応マシンの状態の管理を行う独自のポリシーの作成は、次の手順に従います。
PowerShell 7 と必要な PowerShell モジュールをインストールする
はじめに、マシン構成の作成環境を設定し、お使いの OS で必要なバージョンの PowerShell と GuestConfiguration モジュールをインストールしたことを確認してください。
マシン構成パッケージの成果物を作成して公開する
まだ行っていない場合は、「カスタム コンピューター構成パッケージ成果物を作成する方法」の手順に従って、カスタム コンピューター構成パッケージを作成して発行します。 次に、「マシン構成パッケージの成果物をテストする方法」の手順に従って、開発環境でパッケージを検証します。
注意
この記事のコード例では、$contentUri
変数を参照しています。 パッケージ成果物を作成してテストするための前のチュートリアルと同じ PowerShell セッションを使用している場合、その変数にはパッケージへの URI が既に含まれている可能性があります。
PowerShell セッションで $contentUri
変数がパッケージの URI に設定されていない場合は、変数を設定する必要があります。 この例では、ストレージ アカウントの接続文字列と New-AzStorageContext
コマンドレットを使用してストレージ コンテキストを作成します。 次に、発行されたパッケージのストレージ BLOB を取得し、そのオブジェクトのプロパティを使用してコンテンツ URI を取得します。
$connectionString = '<storage-account-connection-string>'
$context = New-AzStorageContext -ConnectionString $connectionString
$getParams = @{
Context = $context
Container = '<container-name>'
Blob = '<published-package-file-name>'
}
$blob = Get-AzStorageBlob @getParams
$contentUri = $blob.ICloudBlob.Uri.AbsoluteUri
マシン構成に関するポリシー要件
ポリシー定義の metadata セクションには、ゲスト構成の割り当てのプロビジョニングとレポートを自動化するために、マシン構成サービスに関する 2 つのプロパティが含まれている必要があります。
category プロパティは Guest Configuration
に設定する必要があり、guestConfiguration という名前のセクションにはマシン構成の割り当てに関する情報を含める必要があります。 このテキストは、New-GuestConfigurationPolicy
コマンドレットによって自動的に作成されます。
次の例は New-GuestConfigurationPolicy
によって自動的に生成される metadata セクションを示します。
"metadata": {
"category": "Guest Configuration",
"guestConfiguration": {
"name": "test",
"version": "1.0.0",
"contentType": "Custom",
"contentUri": "CUSTOM-URI-HERE",
"contentHash": "CUSTOM-HASH-VALUE-HERE",
"configurationParameter": {}
}
}
定義の効果が DeployIfNotExists
に設定されている場合は、then セクションにマシン構成の割り当てに関するデプロイの詳細を含める必要があります。 このテキストは、New-GuestConfigurationPolicy
コマンドレットによって自動的に作成されます。
Azure Policy の定義を作成する
マシン構成のカスタム ポリシー パッケージを作成してアップロードした後、マシン構成ポリシーの定義を作成します。 New-GuestConfigurationPolicy
コマンドレットは、カスタム ポリシー パッケージを受け取り、ポリシー定義を作成します。
New-GuestConfigurationPolicy
の Policyid パラメーターには一意の文字列が必要です。 グローバル一意識別子 (GUID) が必要になります。 新しく定義する場合には、New-GUID
コマンドレットを使って新たな GUID を生成してください。 定義を更新する場合は、PolicyId に同じ一意の文字列を使用して、正しい定義が確実に更新されるようにしてください。
New-GuestConfigurationPolicy
コマンドレットのパラメーター:
- PolicyId: GUID。
- ContentUri: マシン構成コンテンツ パッケージの公開 HTTP(S) URI。
- DisplayName: ポリシーの表示名。
- 説明:ポリシーの説明。
- Parameter: ハッシュ テーブルで提供されるポリシー パラメーター。
- PolicyVersion: ポリシーのバージョン。
- パス:ポリシー定義が作成されるターゲット パス。 このパラメーターをパッケージのローカル コピーのパスとして指定しないでください。
- Platform: マシン構成ポリシーとコンテンツ パッケージのターゲット プラットフォーム (Windows または Linux)。
- Mode: (大文字と小文字を区別:
ApplyAndMonitor
、ApplyAndAutoCorrect
、Audit
) ポリシーで構成を監査すべきかデプロイすべきかを選択する。 既定値は、Audit
です。 - Tag: 1 つ以上のタグ フィルターをポリシー定義に追加します。
- Category: ポリシー定義のカテゴリ メタデータ フィールドを設定します。
- LocalContentPath:
.zip
マシンの構成パッケージ ファイルのローカル コピーのパス。 ユーザー割り当てマネージド ID を使用して Azure Storge BLOB へのアクセスを提供している場合、このパラメーターは必須です。 - ManagedIdentityResourceId:
.zip
マシンの構成パッケージ ファイルが格納されている Azure Storage BLOB に対して読み取りアクセス権を持つユーザー割り当てマネージド ID のresourceId
。 ユーザー割り当てマネージド ID を使用して Azure Storge BLOB へのアクセスを提供している場合、このパラメーターは必須です。 - ExcludeArcMachines: ポリシー定義で Arc マシンを除外することを指定します。 ユーザー割り当てマネージド ID を使用して Azure Storge BLOB へのアクセスを提供している場合、このパラメーターは必須です。
重要
Azure VM とは異なり、Arc 接続マシンは、現在、ユーザー割り当てマネージド ID をサポートしていません。 そのため、これらのマシンをポリシー定義から確実に除外するには、-ExcludeArcMachines
フラグが必要です。 割り当てられたパッケージを Azure VM でダウンロードしてポリシーを適用するには、ゲスト構成エージェントが Windows の場合はバージョン 1.29.82.0
以降、Linux の場合はバージョン 1.26.76.0
以降である必要があります。
Mode パラメーターについて詳しくは、マシン構成の修復オプションの構成方法に関するページをご覧ください。
カスタム構成パッケージを使用して、指定したパスに監査するポリシー定義を作成します。
$PolicyConfig = @{
PolicyId = '_My GUID_'
ContentUri = $contentUri
DisplayName = 'My audit policy'
Description = 'My audit policy'
Path = './policies/auditIfNotExists.json'
Platform = 'Windows'
PolicyVersion = 1.0.0
}
New-GuestConfigurationPolicy @PolicyConfig
指定したパスにカスタム構成パッケージを適用するポリシー定義を作成します。
$PolicyConfig2 = @{
PolicyId = '_My GUID_'
ContentUri = $contentUri
DisplayName = 'My deployment policy'
Description = 'My deployment policy'
Path = './policies/deployIfNotExists.json'
Platform = 'Windows'
PolicyVersion = 1.0.0
Mode = 'ApplyAndAutoCorrect'
}
New-GuestConfigurationPolicy @PolicyConfig2
ユーザー割り当てマネージド ID を使用して、カスタム構成パッケージを適用するポリシー定義を作成します。
$PolicyConfig3 = @{
PolicyId = '_My GUID_'
ContentUri = $contentUri
DisplayName = 'My deployment policy'
Description = 'My deployment policy'
Path = './policies/deployIfNotExists.json'
Platform = 'Windows'
PolicyVersion = 1.0.0
Mode = 'ApplyAndAutoCorrect'
LocalContentPath = "C:\Local\Path\To\Package" # Required parameter for managed identity
ManagedIdentityResourceId = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}" # Required parameter for managed identity
}
New-GuestConfigurationPolicy @PolicyConfig3 -ExcludeArcMachines
Note
Get-AzUserAssignedIdentity
PowerShell コマンドレットを使用して、マネージド ID の resorceId を取得できます。
コマンドレットの出力では、定義の表示名とポリシー ファイルのパスが含まれるオブジェクトが返されます。 監査ポリシー定義を作成する Definition JSON ファイルは auditIfNotExists.json
という名前であり、構成を適用するためのポリシー定義を作成するファイルは deployIfNotExists.json
という名前です。
タグを使用したマシン構成ポリシーのフィルター処理
GuestConfiguration モジュールのコマンドレットによって作成されたポリシー定義には、必要に応じてタグ用のフィルターを含めることができます。 New-GuestConfigurationPolicy
の Tag パラメーターでは、個々のタグ エントリを含むハッシュ テーブルの配列がサポートされています。 タグは、ポリシー定義の if セクションに追加されており、ポリシーの割り当てで変更することはできません。
タグをフィルター処理するポリシー定義のスニペットの例を次に示します。
"if": {
"allOf" : [
{
"allOf": [
{
"field": "tags.Owner",
"equals": "BusinessUnit"
},
{
"field": "tags.Role",
"equals": "Web"
}
]
},
{
// Original machine configuration content
}
]
}
カスタム マシン構成ポリシーの定義でのパラメーターの使用
マシン構成では、実行時に DSC 構成のプロパティをオーバーライドすることができます。 この機能は、パッケージの MOF ファイル内の値を静的と見なす必要がないことを意味します。 オーバーライドする値は Azure Policy を通じて提供されます。DSC 構成の作成方法およびコンパイル方法は変更されません。
マシン構成は、パラメーターに対して次の値の種類をサポートしています。
- String
- Boolean
- 倍精度浮動小数点型
- Float
New-GuestConfigurationPolicy
と Get-GuestConfigurationPackageComplianceStatus
のコマンドレットには、Parameters という名前のパラメーターが含まれています。 このパラメーターによって、各パラメーターの詳細をすべて含むハッシュ テーブル定義を受け取り、Azure Policy 定義に使用される各ファイルの必要なセクションが作成されます。
次の例では、サービスを監査するためのポリシー定義を作成します。ポリシーの割り当て時に一覧からユーザーが選択します。
# This DSC resource definition...
Service 'UserSelectedNameExample' {
Name = 'ParameterValue'
Ensure = 'Present'
State = 'Running'
}
# ...can be converted to a hash table:
$PolicyParameterInfo = @(
@{
# Policy parameter name (mandatory)
Name = 'ServiceName'
# Policy parameter display name (mandatory)
DisplayName = 'windows service name.'
# Policy parameter description (optional)
Description = 'Name of the windows service to be audited.'
# DSC configuration resource type (mandatory)
ResourceType = 'Service'
# DSC configuration resource id (mandatory)
ResourceId = 'UserSelectedNameExample'
# DSC configuration resource property name (mandatory)
ResourcePropertyName = 'Name'
# Policy parameter default value (optional)
DefaultValue = 'winrm'
# Policy parameter allowed values (optional)
AllowedValues = @('BDESVC','TermService','wuauserv','winrm')
})
# ...and then passed into the `New-GuestConfigurationPolicy` cmdlet
$PolicyParam = @{
PolicyId = 'My GUID'
ContentUri = $contentUri
DisplayName = 'Audit Windows Service.'
Description = "Audit if a Windows Service isn't enabled on Windows machine."
Path = '.\policies\auditIfNotExists.json'
Parameter = $PolicyParameterInfo
PolicyVersion = 1.0.0
}
New-GuestConfigurationPolicy @PolicyParam
Azure Policy 定義を公開する
最後に、New-AzPolicyDefinition
コマンドレットを使用してポリシー定義を発行できます。 次のコマンドを実行すると、マシン構成ポリシーがポリシー センターに発行されます。
New-AzPolicyDefinition
コマンドを実行するには、Azure でポリシー定義を作成できるアクセス権が必要です。
特定の承認要件については、Azure Policy の概要に関するページに記載されています。 推奨される組み込みロールは Resource Policy Contributor
です。
New-AzPolicyDefinition -Name 'mypolicydefinition' -Policy '.\policies\auditIfNotExists.json'
または、このポリシーが "deploy if not exist" (存在しない場合はデプロイする) (DINE) ポリシーの場合は、次のコマンドを使ってください。
New-AzPolicyDefinition -Name 'mypolicydefinition' -Policy '.\policies\deployIfNotExists.json'
Azure で作成されるポリシー定義で、定義の割り当てが最後のステップとなります。 ポータル、Azure CLI、および Azure PowerShell で定義を割り当てる方法を確認してください。
ポリシーのライフサイクル
ポリシー定義の更新をリリースする場合は、ゲスト構成パッケージと Azure Policy 定義の詳細の両方に対して変更を行います。
Note
マシン構成の割り当ての version
プロパティは、Microsoft によって提供されるパッケージに対してのみ効果があります。 カスタム コンテンツのバージョン管理のベスト プラクティスは、ファイル名にバージョンを含めることです。
まず、New-GuestConfigurationPackage
を実行するときに、以前のバージョンと異なる一意のパッケージの名前を指定します。 名前には、PackageName_1.0.0
などのバージョン番号を含めることができます。 この例の番号は、パッケージを一意にするためにのみ使用されており、パッケージを他のパッケージよりも新しいまたは古いものとして見なすように指定するものではありません。
次に、以下の各説明に従って、New-GuestConfigurationPolicy
コマンドレットで使用するパラメーターを更新します。
- Version:
New-GuestConfigurationPolicy
コマンドレットを実行するときは、現在発行されているバージョンより大きいバージョン番号を指定する必要があります。 - contentUri:
New-GuestConfigurationPolicy
コマンドレットを実行するときは、パッケージの場所の URI を指定する必要があります。 ファイル名にパッケージのバージョンを含めると、各リリースでこのプロパティの値が変更されます。 - contentHash:
New-GuestConfigurationPolicy
コマンドレットで、このプロパティが自動的に更新されます。New-GuestConfigurationPackage
によって作成されるパッケージのハッシュ値です。 このプロパティは、発行する.zip
ファイルに対して適切なものである必要があります。 contentUri プロパティのみが更新された場合、拡張機能ではコンテンツ パッケージが拒否されます。
更新されたパッケージをリリースする最も簡単な方法は、この記事で説明されているプロセスを繰り返し、更新されたバージョン番号を指定することです。 このプロセスにより、すべてのプロパティが正しく更新されることが保証されます。
次のステップ
- Azure portal を使用してカスタム ポリシー定義を割り当てる。
- マシン構成のポリシー割り当てのコンプライアンスの詳細を確認する方法を学ぶ。