Share via


Azure Policy を使用して Linux VM への拡張機能のインストールを制限する

お使いの Linux VM 上で特定の拡張機能がインストールされないようにする必要がある場合は、Azure CLI を使用して Azure Policy の定義を作成すると、リソース グループ内での VM の拡張機能を制限できます。 Linux 用 Azure VM 拡張機能の基本については、「Linux 用の仮想マシン拡張機能と機能」に関するページを参照してください。

このチュートリアルでは、Azure Cloud Shell で CLI を使用します。このバージョンは常に更新され最新になっています。 Azure CLI をローカルで実行する場合は、バージョン 2.0.26 以降をインストールする必要があります。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

規則ファイルを作成する

使用できる拡張機能を制限するには、拡張機能を特定する規則を作成する必要があります。

この例では、Azure Cloud Shell でルール ファイルを定義して、許可されていない VM 拡張機能のインストールを拒否する方法を示します。 ただし、Azure CLI でローカルで作業している場合は、ローカル ファイルを作成し、パス (~/clouddrive) をローカル ファイル システム上のファイルへのパスに置き換えることができます。

  1. bash Cloud Shell で、任意のテキスト エディターを使用してファイル ~/clouddrive/azurepolicy.rules.json を作成します。

  2. 次の .json の内容をコピーして新しいファイルに貼り付け、保存します。

{
	"if": {
		"allOf": [
			{
				"field": "type",
				"equals": "Microsoft.Compute/virtualMachines/extensions"
			},
			{
				"field": "Microsoft.Compute/virtualMachines/extensions/publisher",
				"equals": "Microsoft.OSTCExtensions"
			},
			{
				"field": "Microsoft.Compute/virtualMachines/extensions/type",
				"in": "[parameters('notAllowedExtensions')]"
			}
		]
	},
	"then": {
		"effect": "deny"
	}
}

パラメーター ファイルを作成する

また、認可されていない拡張機能の一覧を渡すための構造体が自動的に作成されるように、パラメーター ファイルを作成する必要もあります。

この例では、Cloud Shell で Linux VM のパラメーター ファイルを作成する方法を示します。

  1. 前に開いた bash Cloud Shell で、任意のテキスト エディターを使用してファイル ~/clouddrive/azurepolicy.parameters.json を作成します。

  2. 次の .json の内容をコピーして新しいファイルに貼り付け、保存します。

{
	"notAllowedExtensions": {
		"type": "Array",
		"metadata": {
			"description": "The list of extensions that will be denied. Example: CustomScriptForLinux, VMAccessForLinux etc.",
			"displayName": "Denied extension"
		}
	}
}

ポリシーの作成

ポリシー定義は、使用したい構成を格納するためのオブジェクトです。 ポリシー定義では、規則とパラメーター ファイルを使用してポリシーを定義します。 ポリシー定義は、az policy definition create を使用して作成します。

この例において、規則とパラメーターは、クラウド シェルまたはローカル ファイル システム内で、.json ファイルとして作成、格納したファイルです。

az policy definition create \
   --name 'not-allowed-vmextension-linux' \
   --display-name 'Block VM Extensions' \
   --description 'This policy governs which VM extensions that are blocked.' \
   --rules '~/clouddrive/azurepolicy.rules.json' \
   --params '~/clouddrive/azurepolicy.parameters.json' \
   --mode All

ポリシーを割り当てる

この例では、az policy assignment create を使用して、ポリシーをリソース グループに割り当てます。 myResourceGroup リソース グループに作成された VM はどれも、Linux VM Access や Linux 用のカスタム スクリプト拡張機能をインストールできません。

注意

ポリシーを割り当てるには、必ずリソース グループが存在している必要があります。

サブスクリプション ID を検索し、次の例のプレースホルダーを置き換える場合に az account list を使用します。

az policy assignment create \
   --name 'not-allowed-vmextension-linux' \
   --scope /subscriptions/<subscription Id>/resourceGroups/myResourceGroup \
   --policy "not-allowed-vmextension-linux" \
   --params '{
		"notAllowedExtensions": {
			"value": [
				"VMAccessForLinux",
				"CustomScriptForLinux"
			]
		}
	}'

ポリシーをテストする

ポリシーをテストするには、新しい VM を作成し、新しいユーザーを追加します。

az vm create \
    --resource-group myResourceGroup \
	--name myVM \
	--image myImage \
	--generate-ssh-keys

注意

myResourceGroupmyVMmyImage の値は適宜置き換えます。

VM Access 拡張機能を使用して、myNewUser という名前の新しいユーザーを作成してみます。

az vm user update \
  --resource-group myResourceGroup \
  --name myVM \
  --username myNewUser \
  --password 'mynewuserpwd123!'

割り当てを解除する

az policy assignment delete --name 'not-allowed-vmextension-linux' --resource-group myResourceGroup

ポリシーを削除する

az policy definition delete --name 'not-allowed-vmextension-linux'

次のステップ

詳細については、Azure Policy に関するページをご覧ください。