Group_Policy_Intune_Azure VM の構成管理に使えるその他の手段

350 Views

October 02, 26

スライド概要

JAZUG 16周年祭の登壇スライドです

profile-image

ex-Microsoft | SIer → Support Engineer → SIer. 昔はソースコード解析等をやっていましたが、今はAzureのアーキテクトやってます。 https://qiita.com/iboy

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

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

2.

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 の検証・ノウハウを発信

3.

本日のゴールとアジェンダ TODAY'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

4.

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

5.

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

6.

構成管理の選択肢 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

7.

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

8.

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

9.

具体的にどう設定していくか 構成を 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

10.

具体的にどう設定していくか 構成を 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

11.

実際に中を見る①:実装の中心は 「状態の取得/準拠判定/修復」 の実装 最小構成は 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

12.

実際に中を見る②:実装の中心は 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

13.

具体的にどう設定していくか 構成を 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

14.

実際に中を見る③:コンパイルしてパッケージ化する 書いた 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

15.

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

16.

具体的にどう設定していくか 構成を 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

17.

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

18.

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

19.

デモの結果

20.

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

21.

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

22.

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

23.

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

24.

具体的に割り当てる 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 に権限付 与 修復タスクを実行

25.

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 に権限付 与 修復タスクを実行

26.

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 化を、コマンドが肩代わりする

27.

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 を生成するところまでを詳しく扱います。

28.

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

29.

デモの結果

30.

PART 4 本日のまとめ

31.

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

32.

Reference 参考

33.

本日の内容をまとめたブログ 実装編と 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 詳細な手順・コード例は各記事で確認できます

34.

Appendix 宣伝

35.

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

36.

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

37.

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

38.

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