---
title: Group_Policy_Intune_Azure VM の構成管理に使えるその他の手段
tags:  #azure #azurevm  
author: [Yohei Iwasaki](https://image.docswell.com/user/iboy)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/LE3W2NM5E5.jpg?width=480
description: JAZUG 16周年祭の登壇スライドです
published: October 02, 26
canonical: https://image.docswell.com/s/iboy/ZE17W8-jazug16
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/LE3W2NM5E5.jpg)

Group Policy? Intune? Azure VM の
構成管理に使えるその他の手段


# Page. 2

![Page Image](https://bcdn.docswell.com/page/8EDKZW6Y7G.jpg)

PLAYER PROFILE
CAREER
1st
STAGE
SIer ソースコード解析・開発環境構築
▼
2nd
某 Windows OS の会社で Azure 技術サポート
▼
NOW
DJ
SIer で SE / システムアーキテクト
PLAYING
NAME
iboy
Yohei Iwasaki
S E / システムアーキテクト
SKILL
SET
☆12
Azure .......... AAA
☆8
フットサル ...... A
☆10
音ゲー ........ AA
☆7
ランニング
...... A
X: @I_BOY_1204 | Qiita: iboy
OUTPUT
Qiita で Azure VM / Storage / Azure Files の検証・ノウハウを発信


# Page. 3

![Page Image](https://bcdn.docswell.com/page/V7PKD9Y2J8.jpg)

本日のゴールとアジェンダ
TODAY&#039;S GOAL / SCOPE
GOAL
Intune も Group Policy も使えない Azure VM で、OS の中のルールを継続的に守らせる手段を知る
AGENDA
連携部分のみ
01
02
03
04
構成管理の選択肢
マシンの構成
Azure Policy 連携
まとめ
Group Policy / Intune /
マシンの構成の使い分け
仕組み・作り方・
VM への割り当て方
Policy 定義 JSON の生成
自動適用・修復の全体像
本日の要点を
振り返る
SCOPE
DEMO
IN SCOPE
OVERVIEW ONLY
コマンドで Policy 定義 JSON を生成
Azure Policy 自体の詳細説明
マシン構成パッケージから生成する手順を扱います
基本機能や一般的な利用方法は概要にとどめます
① マシンの構成 単体
② Azure Policy 経由の自動適用とドリフト修復
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/2JVV1MGXJQ.jpg)

PART 1
MA CHI NE CONFI G URATI ON
構成管理の選択肢


# Page. 5

![Page Image](https://bcdn.docswell.com/page/5EGL2G8RJL.jpg)

そのルール、ちゃんと守られていますか？


# Page. 6

![Page Image](https://bcdn.docswell.com/page/4JQYPX9Y7P.jpg)

構成管理の選択肢
Microsoft の代表的な構成管理サービスを、Azure VM を前提に比較してみる
Intune
AD DS（Group Policy）
マシンの構成
対象
エンドユーザーデバイス
（Win / mac / iOS / Android）
ドメイン参加 Windows
（サーバー・クライアント）
Azure VM / Arc 対応サーバー
（サーバー中心・Win / Linux）
ID・登録
Microsoft Entra ID の
ユーザー / デバイス
AD ドメイン参加
（ドメインアカウント）
システム割り当てマネージド ID
＋ 拡張機能
適用
MDM（CSP）でプロファイル配信
準拠を判定
GPO を配信して適用
DSC ベースの agent が
周期的に評価・是正
ユーザー設定
可（ユーザー / デバイス）
可（ユーザー / コンピューター）
不可（マシン単位のみ）
可視化
Intune 管理センターの
レポート
gpresult / RSOP
（集約ダッシュボードなし）
Azure Portal / Azure Policy
マシンの構成画面
接続
インターネット経由で
Intune サービスへ
ドメインコントローラーへ
プライベート接続
VM から outbound 443/TCP
「どれが優れている」ということではなく、「何を・どこで・どう管理したいか」で考える
マシンの構成の強みは、「追加ライセンス不要」「Linux系のOS群も対応」等だが、配る構成は自分で実装する必要がある点が弱点
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/K74WY6XZE1.jpg)

PART 2
MA CHI NE CONFI G URATI ON
マシンの構成とは何か


# Page. 8

![Page Image](https://bcdn.docswell.com/page/LJ1Y6VNDEG.jpg)

マシンの構成 (Machine Configuration)
サーバーの「あるべき状態」を継続的に確認し、ずれを検出・是正するための Azure の構成管理サービス
あるべき状態
評価
構成ルール
望ましい状態を
サービスに渡す
Azure VM / Azure Arc
AZURE の拡張リソース
マシンの構成
• OS 設定
• セキュリティ基準
• 組織のルール
管理対象
Windows
PowerShell DSC ベースで
評価と是正を実行
Linux
クラウド内外のサーバーを、同じ考え方で管
理
必要なら是正
つまり、「設定を配る」だけでなく、設定どおりかを見張り、ずれを戻し続ける仕組み
動作の前提
Guest Configuration 拡張機能 ＋ システム割り当てマネージド ID
追加ライセンス・ドメイン参加は不要
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/GJWGWL4872.jpg)

具体的にどう設定していくか
構成を VM に届けるまでの流れは、大きく 4 ステップです。
01
02
03
04
DSC で実装
コンパイル ＋パッケージ化
配置
割り当て
ps1 / psd1 / psm1 の
3 ファイルを書く
コンパイルして、ZIP にまとめる
Blob など VM から到達できる場所
へ
Assignment を登録する
①〜②: ローカル (開発 PC / CI) の作業
③〜④: Azure 側の作業
▪ PowerShell の GuestConfiguration モジュールを使用
▪ ZIP は VM からアクセスできる場所に置く (例: Blob)
▪ この時点では Azure 側は何も変わらない
▪ Assignment = 「どの VM に・どの構成を・どう適用するか」を定義
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/4EZL5M2973.jpg)

具体的にどう設定していくか
構成を VM に届けるまでの流れは、大きく 4 ステップです。
01
02
03
04
DSC で実装
コンパイル ＋パッケージ化
配置
割り当て
ps1 / psd1 / psm1 の
3 ファイルを書く
コンパイルして、ZIP にまとめる
Blob など VM から到達できる場所
へ
Assignment を登録する
①〜②: ローカル (開発 PC / CI) の作業
③〜④: Azure 側の作業
▪ PowerShell の GuestConfiguration モジュールを使用
▪ ZIP は VM からアクセスできる場所に置く (例: Blob)
▪ この時点では Azure 側は何も変わらない
▪ Assignment = 「どの VM に・どの構成を・どう適用するか」を定義
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/Y76W9NVD7V.jpg)

実際に中を見る①：実装の中心は 「状態の取得/準拠判定/修復」 の実装
最小構成は 3 ファイル。役割を分けつつ、構成ロジックは psm1 に実装します。
configuration/
➀MyServiceConfig.ps1
modules/
MyServiceConfig/
➁MyServiceConfig.psd1
➀MyServiceConfig.ps1
➁MyServiceConfig.psd1
どのパラメータで構成を実行するかを定義する
DSC 構成ファイル
モジュールのメタデータ。
Version / GUID / DscResourcesToExport
(Module から DSC リソースとして公開するクラス名)を
宣言
➂MyServiceConfig.psm1
MOST IMPORTANT
➂MyServiceConfig.psm1
実装本体。
Get() / Test() / Set() を持つ class-based DSC リソース
3 ファイルの中で最も重要 — 実際の構成ロジックをここに実装
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/G75MN5D874.jpg)

実際に中を見る②：実装の中心は Get() / Test() / Set()
3 つのメソッドで「今どうなっているか」「あるべき状態か」「どう直すか」を表現します。
Get()
Test()
Set()
DSCリソースの現在の状態を取得する
準拠しているか判定する
あるべき状態へ収束させる
▪ OS から実際の状態を読み取る
▪ 準拠していれば true を返す
▪ 非準拠(Test()が false)のときだけ呼ばれる
▪ 非準拠の理由を Reasons に積む
▪ 状態は一切変更しない
▪ 何度実行しても同じ結果になるように
▪ Reasons は Code(コードID) と Phrase(理
由のコメント) を持つ
▪ 冪等性が重要
注意点: 参照すべきドキュメント
▪ マシンの構成では、DSC 2.0 が利用されている
▪ DSC のドキュメントは、 DSC 3.0 ではなくて、DSC 2.0 を参照する（DSC 3.0 は別物と考える）
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/9J295N8VER.jpg)

具体的にどう設定していくか
構成を VM に届けるまでの流れは、大きく 4 ステップです。
01
02
03
04
DSC で実装
コンパイル ＋パッケージ化
配置
割り当て
ps1 / psd1 / psm1 の
3 ファイルを書く
コンパイルして、ZIP にまとめる
Blob など VM から到達できる場所
へ
Assignment を登録する
①〜②: ローカル (開発 PC / CI) の作業
③〜④: Azure 側の作業
▪ PowerShell の GuestConfiguration モジュールを使用
▪ ZIP は VM からアクセスできる場所に置く (例: Blob)
▪ この時点では Azure 側は何も変わらない
▪ Assignment = 「どの VM に・どの構成を・どう適用するか」を定義
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/DEY4KP6QJM.jpg)

実際に中を見る③：コンパイルしてパッケージ化する
書いた PowerShell を MOF にコンパイルし、ZIP パッケージにまとめます。
ポイント①：OS によって利用モジュールのバージョンが違う
Windows
Linux
モジュール
PSDesired
StateConfiguration
PSDesired
StateConfiguration
インストール
2.0.7 (stable)
3.0.0-beta1
(-AllowPrerelease)
Import-Module
-RequiredVersion
2.0.7
-RequiredVersion
3.0.0
# ZIP package を作成する
New-GuestConfigurationPackage `
-Name MyServiceConfig `
-Configuration $namedMof `
-Type AuditAndSet `
-Path $packageOutDir -Force
# contentHash に使う SHA-256 を控える
(Get-FileHash $zipPath -Algorithm SHA256).Hash
ポイント①：-Type は 2 種類
▪ Audit: 準拠状況を確認するだけ (Set() は実行できない)
▪ AuditAndSet: 是正まで行えるパッケージにする
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/VJNYR5Z278.jpg)

実際に中を見る④：テスト(割り当てる前にローカルで試す)
作ったパッケージは、VM に割り当てる前にローカルで評価・適用を試せます。
① 準拠状況を確認する (Get / Test)
Get-GuestConfigurationPackageComplianceStatus `
-Path &#039;&lt;パッケージファイルのパス&gt;&#039; -Verbose
!
テスト時の注意
▪ GuestConfiguration モジュールが import されていること
▪ Linux 向けの構成は Linux + PowerShell 環境でテストする
② 実際に適用してみる (Set)
▪ 管理者権限が必要な構成は sudo で pwsh を起動する
sudo pwsh -NoProfile -Command &quot;Get-GuestConfiguration…&quot;
Start-GuestConfigurationPackageRemediation `
-Path &#039;&lt;パッケージファイルのパス&gt;&#039; -Verbose
▪ ローカルで通っても、VM 上では agent (root) 実行であることを忘れない
③ もう一度 ① を実行して、準拠したことを確認
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/YE9PMYZDJ3.jpg)

具体的にどう設定していくか
構成を VM に届けるまでの流れは、大きく 4 ステップです。
01
02
03
04
DSC で実装
コンパイル ＋パッケージ化
配置
割り当て
ps1 / psd1 / psm1 の
3 ファイルを書く
コンパイルして、ZIP にまとめる
Blob など VM から到達できる場所へ
Assignment を登録する
①〜②: ローカル (開発 PC / CI) の作業
③〜④: Azure 側の作業
▪ PowerShell の GuestConfiguration モジュールを使用
▪ ZIP は VM からアクセスできる場所に置く (例: Blob)
▪ この時点では Azure 側は何も変わらない
▪ Assignment = 「どの VM に・どの構成を・どう適用するか」を定義
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/GE8DL615ED.jpg)

実際に中を見る⑤：Assignment を作って VM に割り当てる
ZIP を Blob などに置いたら、Bicep で VM に Assignment を割り当てる
主要な assignmentType は 3 種類
// Assignment を割り当てる VM を参照する
resource vm &#039;Microsoft.Compute/virtualMachines@2023-09-01&#039;
Audit
existing = { name: vmName }
報告するだけ。マシンには一切変更を加えない
resource guestAssignment
&#039;Microsoft.GuestConfiguration/guestConfiguration
Assignments@2020-06-25&#039; = {
ApplyAndMonitor
name: guestConfigurationName
初回に一度だけ適用。以降ドリフトしても報告のみ
scope: vm
location: location
properties: { guestConfiguration: {
ApplyAndAutoCorrect
name: guestConfigurationName
適用したうえで、ドリフト時は次回評価で自動修正
contentUri: packageContentUri
contentHash: packageContentHash
version: &#039;1.*&#039;
assignmentType: &#039;ApplyAndAutoCorrect&#039; } }
ZIP のダウンロードに VM のマネージド ID は使われません。
SAS トークンなど、Blob 側のアクセス手段を別途用意します。
}
パッケージ化の際の-Type と assignmentType とは別物
パッケージ -Type ＼assignmentType
▪ -Type: パッケージが「変更する能力」を持つかどうか
▪ assignmentType: その能力を対象マシンで「どう使うか」
Audit
ApplyAndMonitor
ApplyAndAutoCorrect
AuditAndSet
×
○（初回のみ）
○（毎回の評価で）
Audit
×
×
×
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/LELML9Q37R.jpg)

DEMO 01
Ubuntu に サンプルの設定を配る
やること
▪ パッケージを実際にビルドして、Assignmentを作成
▪ 事前準備されたUbuntu VM に独自パッケージを割り当てる
▪ /tmp/HelloWorld というファイルを作成するルールを適用
▪ ApplyAndAutoCorrect モードにして自動修正
▪ Azure Portal 側で準拠状況が見えること
サンプルコード: 『yiwasaki/jazug-16-anniversary-demo』
前提環境


# Page. 19

![Page Image](https://bcdn.docswell.com/page/4JMYMZ1MJW.jpg)

デモの結果


# Page. 20

![Page Image](https://bcdn.docswell.com/page/PJR9V6LL79.jpg)

実際、どれくらい実装した？
デモで使ったコードを開いて、必要なファイルと実装量を見てみましょう。


# Page. 21

![Page Image](https://bcdn.docswell.com/page/PEXQZD66JX.jpg)

PART 3
A Z UR E P OLI CY
Azure Policy で全体に配る


# Page. 22

![Page Image](https://bcdn.docswell.com/page/3EK98X1GED.jpg)

VM単位の Assignment では、増える対象を自動で拾えない
台数分の割り当てを追い続ける代わりに、スコープへルールを置く必要があります。
目指す姿｜スコープに 1 つのルール
現状｜VM ごとの手動割り当て
管理グループ / サブスクリプション / RG
Assignment 01
VM 01
適用済
Azure Policy のルール
Assignment 02
未作成
VM 02
新規 VM
適用済
転換
未適用
VM 01
VM 02
規 VM
自動で対象
自動で対象
自動で対象
対象が増えても、ルールが自動で拾う
VM が増えるたびに、人が Assignment を追加する
NEXT
VM ではなく「スコープ」に割り当てる仕組みへ
Azure Policy なら、既存 VM も後から増えた VM も同じルールで管理できます。
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/L73W25Q575.jpg)

Azure Policy を挟むとどう変わるか
パッケージを作るところまでは同じです。変わるのは「どう VM に届けるか」だけです。
BEFOR E
開発者 PC / CI
Assignment を VM 1 台ずつ登録
割り当てた VM だけに適用
開発者 PC / CI
Azure Policy
ZIP を Blob へ配置
定義を登録し、スコープに割り当て
対象 VM ごとに
Assignment を自動作成
AFTE R
スコープ単位で書ける
新規 VM も自動で対象
準拠状況が集まる
管理グループ / サブスクリプション /
リソースグループに対して適用
割り当て後に作成・更新された
VM には自動的に適用される
Azure Policy の準拠状況として
他のガバナンスと同じ画面で見える
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/87DKZD9YJG.jpg)

具体的に割り当てる Policy をどう作っていくか？
作成済みの ZIP を起点に、JSON 生成から割り当て・既存 VM の修復まで進めます。
①〜②：ローカル（開発 PC / CI）
01
③〜⑤：Azure 側
02
IN SCOPE
03
04
05
DSC で実装して
ZIP パッケージ化
Policy 定義 JSON
を生成
Policy 定義
を登録
Policy を
割り当てる
既存 VM 向けの
修復を実行
ここまでは
Assignment と同じ
NewGuestConfigurationPoli
cy
New-AzPolicyDefinition
New-AzPolicyAssignment
＋ Managed ID に権限付
与
修復タスクを実行


# Page. 25

![Page Image](https://bcdn.docswell.com/page/VJPKDXZ2E8.jpg)

Policy 定義 JSONを生成のポイント
作成済みの ZIP を起点に、JSON 生成から割り当て・既存 VM の修復まで進めます。
①〜②：ローカル（開発 PC / CI）
01
③〜⑤：Azure 側
02
IN SCOPE
03
04
05
DSC で実装して
ZIP パッケージ化
Policy 定義 JSON
を生成
Policy 定義
を登録
Policy を
割り当てる
既存 VM 向けの
修復を実行
ここまでは
Assignment と同じ
NewGuestConfigurationPoli
cy
New-AzPolicyDefinition
New-AzPolicyAssignment
＋ Managed ID に権限付
与
修復タスクを実行


# Page. 26

![Page Image](https://bcdn.docswell.com/page/2EVV1LWXEQ.jpg)

New-GuestConfigurationPolicy は便利
複雑な条件・設定内容の JSON 化を、コマンドが肩代わりします。
MANUAL DEFINITION
WITH MACHINE CONFIGURATION
Policy 定義を手作業で作るのは難
しい
1 コマンドで Policy 定義を生成
01
対象 VM の条件を表現する
New-GuestConfigurationPolicy
Windows / Linux・VM イメージの条件を
ARM Template に落とし込む
PLATFORM オプション
コマンド実行
実際の設定内容を描く
VM イメージを自動選択
定義一式を自動生成
マシン構成の内容を Policy 定義へ
正しく組み込む
Windows / Linux の条件を
コマンド側で生成
設定すべき Policy 定義を
まとめて作成
1 COMMAND
02
POINT
VM 選定条件と設定内容の JSON 化を、コマンドが肩代わりする


# Page. 27

![Page Image](https://bcdn.docswell.com/page/57GL2XDREL.jpg)

Policy を利用する最後のポイント
作成済みの ZIP を起点に、JSON 生成から割り当て・既存 VM の修復まで進めます。
①〜②：ローカル（開発 PC / CI）
01
③〜⑤：Azure 側
02
IN SCOPE
03
04
05
DSC で実装して
ZIP パッケージ化
Policy 定義 JSON
を生成
Policy 定義
を登録
Policy を
割り当てる
既存 VM 向けの
修復を実行
ここまでは
Assignment と同じ
NewGuestConfigurationPoli
cy
New-AzPolicyDefinition
New-AzPolicyAssignment
＋ Managed ID に権限付
与
修復タスクを実行
EXISTING VM
Policy を定義しただけでは「評価」のみ。既存 VM へ適用するには、修復タスクまで実行します。
新規・更新された VM は、割り当てた Policy の対象として継続的に評価されます。
今回の範囲
コマンドで Policy 定義 JSON を生成するところまでを詳しく扱います。


# Page. 28

![Page Image](https://bcdn.docswell.com/page/4EQYP81YJP.jpg)

DEMO 02
Policy で配って、壊して、直るのを見る
やること
見どころ
▪ カスタムポリシーを作成してリソースグループに割り当てる
▪ Assignment を 1 つも手で作っていないこと
▪ 対象の Linux VM が自動的にPolicy によって修復される
▪ ApplyAndAutoCorrect で元の状態に戻ること
▪ 評価は既定 15 分間隔なので、戻るまでは少し待つ
サンプルコード: 『yiwasaki/jazug-16-anniversary-demo』


# Page. 29

![Page Image](https://bcdn.docswell.com/page/KJ4WY2RZ71.jpg)

デモの結果


# Page. 30

![Page Image](https://bcdn.docswell.com/page/LE1Y6MQD7G.jpg)

PART 4
本日のまとめ


# Page. 31

![Page Image](https://bcdn.docswell.com/page/GEWGW3M8J2.jpg)

まとめ
R ECA P
Azure VM の OS の中のルールは、Azure ネイティブな仕組みだけ で継続的に守らせられる
実
ンプ
コン
マシン
コ
プ
実
コ
マシン
コ
プ
31


# Page. 32

![Page Image](https://bcdn.docswell.com/page/47ZL5VQ9J3.jpg)

Reference
参考


# Page. 33

![Page Image](https://bcdn.docswell.com/page/YJ6W956DJV.jpg)

本日の内容をまとめたブログ
実装編と Azure Policy 編の2本を、QRコードからすぐに確認できます。
01
02
IMPLEMENTATION / QIITA #LINUX
AZURE POLICY / QIITA #LINUX
VM の構成管理を実現したい！
Azure のマシンの構成を使ってみた
VM の構成管理を自動化したい！
Azure のマシンの構成を Azure Policy で
適用してみた
マシン構成の実装編
Policy 適用編
qiita-article-1-qr.png
qiita-article-2-qr.png
SCAN TO READ
SCAN TO READ
記事を開く →
記事を開く →
qiita.com/iboy/items/23050c265ac9e6e21
qiita.com/iboy/items/23050c2…
a1c
qiita.com/iboy/items/4a56dcab3f3d2d718
qiita.com/iboy/items/4a56dca…
648
詳細な手順・コード例は各記事で確認できます


# Page. 34

![Page Image](https://bcdn.docswell.com/page/GJ5MNY68J4.jpg)

Appendix
宣伝


# Page. 35

![Page Image](https://bcdn.docswell.com/page/9E295GMV7R.jpg)

宣伝①：YonaYona Fabric &amp; AI Night
2026年10月09日(金) 21:00 – 22:00 @ Teams


# Page. 36

![Page Image](https://bcdn.docswell.com/page/D7Y4KVXQEM.jpg)

宣伝➁：YonaAz × GH-CUG コラボ会 - GitHub Copilot Night
2026年10月22日(木) 21:00 – 22:00 @ Teams


# Page. 37

![Page Image](https://bcdn.docswell.com/page/VENYRM12J8.jpg)

YONA YONA AZURE CLUB / SPECIAL ANNOUNCEMENT
なんと！！
あ
物ゲ
く
MICROSOFT CORP. / 登壇予定
SPECIAL GUEST × SPECIAL NIGHT
James Montemagno
今すぐ参加申込
2026.12.03
THU / 21:00 START
→
QRコードをスキャン
YonaYona Special Night
EVENT REGISTRATION


# Page. 38

![Page Image](https://bcdn.docswell.com/page/Y79PMN5DE3.jpg)

おしまい
ご清聴ありがとうございました


