この記事は Microsoft Azure Tech Advent Calendar 2024 の 17日目の記事 です。
こんにちは、アーキテクトのやまぱんです。
補足コメントや質問、いいね、拡散、是非お願いします🥺!
間違ってたら優しく教えてください!
モチベーション
以前こんな記事を書きました
今回はその改良版の紹介になります!
以前の記事 の方法の問題点
発行元ID / ソースイメージ発行元(Publisher) でフィルターをかけていたので、Publisher がないイメージには適応することができなかった。
具体的には カスタムイメージ (マイイメージ) には Publisher がないため対応していなかった。
作った Azure Policy
とりあえず早速ですが今回作った Azure Policy です。
ポリシーの割り当ては前回記事を参考にしてください
{
"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" にマッチ。
- Tips
リソース ID は以前に書いたこちらのAzureユーザーにオススメ拡張機能の紹介記事で紹介している Azure Portal Plus の拡張機能 を入れると簡単に取得することができます
2.拒否される条件
上記 3 つ(1.1-1.3)のいずれにも該当しないイメージはすべて拒否される。
例の場合だと、以下が例になる。
・発行元が RedHat 以外(例: Canonical, MicrosoftWindowsServerなど)。
・イメージのオファーが指定されていない(例: Debian, CentOS)。
・許可されていないカスタムイメージ
以前の Azure Policy ではできなかった、「オファー(Allowed Image Offers)」や「リソースID(Allowed Images Resource IDs)」をもとにしたイメージの指定が可能になり、カスタムイメージ (マイイメージ や 共有イメージ)も指定できるようになりました!
参考画面ショット
ポリシーの割当画面
パラメーターを必須項目にしないように "defaultValue": []
を記述しているため、赤枠のチェックを外さないとパラメーターの入力フィールドが表示されない。
ポリシーの動作検証
スコープは 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 イメージ
Error Message :
リソース 'Policy-test' はポリシーにより許可されませんでした。 (コード: RequestDisallowedByPolicy)
[エラーがでることを確認] いずれのパラメーターでも指定されていないカスタムイメージ
以下の myCustomImageVMppg1
を実行します。
Error Message :
リソース 'Policy-test' はポリシーにより許可されませんでした。 (コード: RequestDisallowedByPolicy)
[エラーがでないことを確認] Resource ID のパラメーターで指定し許可されているカスタムイメージ
まとめ
今回はAzure Policyを使って、特定のイメージだけを許可するカスタムポリシーの作り方を紹介しました。以前の記事で紹介した方法では対応できなかったカスタムイメージも、今回の改良版ポリシーではしっかりサポートできるようになりました。具体的には、リソースIDやイメージオファー、発行元のいずれかを指定することでガードレールを設置し、より柔軟に安全な環境を構築できるようになっています。
このポリシーを使うことで、組織内でのリソース管理が一層簡単かつ効率的になります。また、セキュリティの向上にも寄与するため、特定のイメージのみを許可することで、意図しないリソースの使用を防ぐことができます。ポリシーの設定や動作検証の際には、Azure Portal Plus の拡張機能を使うと便利です。リソース ID の取得などが簡単に行えるので、ぜひ試してみてください。
もしこの記事に関して質問やフィードバックがありましたら、気軽にコメントしてください。間違いがあれば優しく教えていただけると嬉しいです。また、この記事が役に立ったと思ったら、ぜひ「いいね」やシェアをお願いします!
みんなでAzureをもっと楽しみましょう!
Azureでの開発や運用が少しでも楽しく、スムーズになることを願っています。🚀🚀