1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Microsoft Azure TechAdvent Calendar 2024

Day 17

Azure Policyで 特定の VM イメージのみデプロイ許可する方法[改良版]

Last updated at Posted at 2024-12-16

この記事は Microsoft Azure Tech Advent Calendar 202417日目の記事 です。

こんにちは、アーキテクトのやまぱんです。

補足コメントや質問、いいね、拡散、是非お願いします🥺!
間違ってたら優しく教えてください!

モチベーション

以前こんな記事を書きました

今回はその改良版の紹介になります!

以前の記事 の方法の問題点

image.png

発行元ID / ソースイメージ発行元(Publisher) でフィルターをかけていたので、Publisher がないイメージには適応することができなかった。
具体的には カスタムイメージ (マイイメージ) には Publisher がないため対応していなかった

  • 参考イメージ
    image.png

作った Azure Policy

とりあえず早速ですが今回作った Azure Policy です。
ポリシーの割り当ては前回記事を参考にしてください

いずれかの条件に合致した VM のデプロイのみを許可するカスタムポリシー
{
  "mode": "All",
  "policyRule": {
    "if": {
      "not": {
        "anyOf": [
          {
            "field": "Microsoft.Compute/virtualMachines/storageProfile.imageReference.publisher",
            "in": "[parameters('listOfAllowedImagePublishers')]"
          },
          {
            "allOf": [
              {
                "field": "type",
                "equals": "Microsoft.Compute/virtualMachines"
              },
              {
                "field": "Microsoft.Compute/virtualMachines/storageProfile.imageReference.id",
                "in": "[parameters('listOfAllowedImagesResourceIDs')]"
              }
            ]
          },
          {
            "field": "Microsoft.Compute/virtualMachines/storageProfile.imageReference.offer",
            "in": "[parameters('listOfAllowedImageOffers')]"
          }
        ]
      }
    },
    "then": {
      "effect": "deny"
    }
  },
  "parameters": {
    "listOfAllowedImagePublishers": {
      "type": "Array",
      "metadata": {
        "displayName": "Allowed Image Publishers",
        "description": "List of allowed image publishers."
      },
      "defaultValue": []
    },
    "listOfAllowedImageOffers": {
      "type": "Array",
      "metadata": {
        "displayName": "Allowed Image Offers",
        "description": "List of allowed image offers."
      },
      "defaultValue": []
    },
    "listOfAllowedImagesResourceIDs": {
      "type": "Array",
      "metadata": {
        "displayName": "Allowed Images Resource IDs",
        "description": "List of allowed image resource IDs."
      },
      "defaultValue": []
    }
  }
}

ポリシーの動作

1.許可される条件以下のいずれかに合致する場合は許可される = 指定された条件を満たさない場合、作成は 拒否 (deny) されます。

  • 1.1 Allowed Image Publishers / 特定の発行元のイメージを使用している場合
  • 説明
    許可されている仮想マシンイメージの発行元(Publisher)のリスト。 このリストに含まれるPublisherのイメージのみ使用可能。 許可されるイメージプロバイダーのリスト (例: Canonical, Microsoft, RedHat)。
  • 今回の例:
    ["RedHat"]
    Red Hat Enterprise Linux (RHEL) のイメージを許可
  • 1.2 Allowed Image Offers / 特定のイメージのオファーのイメージを使用している場合
  • 説明
    許可されている仮想マシンイメージの「オファー」(Offer)のリスト。オファーは、Publisherが提供する具体的なイメージの種類(製品ライン)を指します。許可されるイメージオファーのリスト (例: UbuntuServer, WindowsServer)。
  • 今回の例:
    ["UbuntuServer","microsoftsqlserver"]
    Ubuntu Server 、SQL Server 用の Windows Serverイメージを許可
  • 1.3 Allowed Images Resource IDs / イメージが指定されたリソース ID のものである場合。
  • 説明
    許可されているカスタムイメージのリソースIDのリスト。これにより、特定のカスタムイメージのみを使用可能にします。
  • 今回の例:
    ["/subscriptions/XXXXXXXXXXX/resourceGroups/rg-test/providers/Microsoft.Compute/images/image-from-vm"]
    リソース ID が "/subscriptions/XXXXXXXXXXX/resourceGroups/rg-test/providers/Microsoft.Compute/images/image-from-vm" にマッチ。

[参考画像]
image.png

2.拒否される条件
上記 3 つ(1.1-1.3)のいずれにも該当しないイメージはすべて拒否される。
例の場合だと、以下が例になる。
・発行元が RedHat 以外(例: Canonical, MicrosoftWindowsServerなど)。
・イメージのオファーが指定されていない(例: Debian, CentOS)。
・許可されていないカスタムイメージ

以前の Azure Policy ではできなかった、「オファー(Allowed Image Offers)」や「リソースID(Allowed Images Resource IDs)」をもとにしたイメージの指定が可能になり、カスタムイメージ (マイイメージ や 共有イメージ)も指定できるようになりました! 

参考画面ショット

ポリシーの割当画面

image.png

パラメーターを必須項目にしないように "defaultValue": [] を記述しているため、赤枠のチェックを外さないとパラメーターの入力フィールドが表示されない。

例:) ポリシー割当の設定例
image.png

ポリシーの動作検証

スコープは Subscription に指定。
今回は以下のパラメーターで割当を実施

  • Allowed Image Publishers

["RedHat"]
Red Hat Enterprise Linux (RHEL) のイメージを許可

  • Allowed Image Offers

["UbuntuServer","microsoftsqlserver"]
Ubuntu Server 、SQL Server 用の Windows Serverイメージを許可

  • Allowed Images Resource IDs

["/subscriptions/7XXXXXXXXXXXXXXXXX/resourceGroups/rg-test/providers/Microsoft.Compute/images/image-from-vm"]
上記のリソース ID を持つイメージを許可(カスタムイメージなど)

[エラーがでることを確認] いずれのパラメーターでも指定されていない Azure Market Place イメージ

  • Windows Server のイメージ
    実行した Azure Market Place のイメージ
    いずれの条件にも合致しないので拒否されるはず
    image.png

  • 以下のようにデプロイ前の確認画面でError Messageがでています
    image.png

Error Message : リソース 'Policy-test' はポリシーにより許可されませんでした。 (コード: RequestDisallowedByPolicy)

[エラーがでることを確認] いずれのパラメーターでも指定されていないカスタムイメージ

以下の myCustomImageVMppg1 を実行します。

  • カスタムイメージ
    image.png

  • 以下のようにデプロイ前の確認画面で Error Messageがでています
    image.png

Error Message : リソース 'Policy-test' はポリシーにより許可されませんでした。 (コード: RequestDisallowedByPolicy)

[エラーがでないことを確認] Resource ID のパラメーターで指定し許可されているカスタムイメージ

  • カスタムイメージ
    image.png

  • 以下のようにデプロイ前の確認画面で Error Messageでていません!
    image.png

まとめ

今回はAzure Policyを使って、特定のイメージだけを許可するカスタムポリシーの作り方を紹介しました。以前の記事で紹介した方法では対応できなかったカスタムイメージも、今回の改良版ポリシーではしっかりサポートできるようになりました。具体的には、リソースIDやイメージオファー、発行元のいずれかを指定することでガードレールを設置し、より柔軟に安全な環境を構築できるようになっています。

このポリシーを使うことで、組織内でのリソース管理が一層簡単かつ効率的になります。また、セキュリティの向上にも寄与するため、特定のイメージのみを許可することで、意図しないリソースの使用を防ぐことができます。ポリシーの設定や動作検証の際には、Azure Portal Plus の拡張機能を使うと便利です。リソース ID の取得などが簡単に行えるので、ぜひ試してみてください。

もしこの記事に関して質問やフィードバックがありましたら、気軽にコメントしてください。間違いがあれば優しく教えていただけると嬉しいです。また、この記事が役に立ったと思ったら、ぜひ「いいね」やシェアをお願いします!

みんなでAzureをもっと楽しみましょう!
Azureでの開発や運用が少しでも楽しく、スムーズになることを願っています。🚀🚀

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?