Share via


Uso de Azure Policy para restringir la instalación de extensiones en VM Linux

Si quiere impedir la instalación de determinadas extensiones en VM Linux, puede crear una definición de directiva de Azure mediante la CLI de Azure para restringir las extensiones de las máquinas virtuales dentro de un grupo de recursos. Para obtener información sobre los conceptos básicos de las extensiones de máquina virtual de Azure para Linux, consulte Características y extensiones de máquina virtual para Linux.

En este tutorial se usa la CLI dentro de Azure Cloud Shell, que se actualiza constantemente a la versión más reciente. Si quiere ejecutar la CLI de Azure localmente, debe instalar la versión 2.0.26 o posterior. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.

Creación de un archivo de reglas

Para restringir las extensiones disponibles, debe crear una regla para identificar la extensión.

En este ejemplo se muestra cómo denegar la instalación de extensiones de máquina virtual no permitidas mediante la definición de un archivo de reglas en Azure Cloud Shell. Sin embargo, si trabaja localmente en la CLI de Azure, puede crear un archivo local y reemplazar la ruta de acceso (~/clouddrive) por la ruta de acceso al archivo en el sistema de archivos local.

  1. En una instancia de Bash de Cloud Shell, cree el archivo ~/clouddrive/azurepolicy.rules.json con cualquier editor de texto.

  2. Copie el siguiente contenido .json y péguelo en el nuevo archivo, luego guárdelo.

{
	"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"
	}
}

Creación de un archivo de parámetros

También necesita un archivo de parámetros que cree una estructura que pueda usar para pasar una lista de las extensiones no autorizadas.

En este ejemplo se muestra cómo crear un archivo de parámetros para máquinas virtuales Linux en Cloud Shell.

  1. En la instancia de Bash de Cloud Shell abierta previamente, cree el archivo ~/clouddrive/azurepolicy.parameters.json con cualquier editor de texto.

  2. Copie el siguiente contenido .json y péguelo en el nuevo archivo, luego guárdelo.

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

Creación de la directiva

Una definición de directiva es un objeto que se usa para almacenar la configuración que le gustaría utilizar. En esta definición se incluyen las reglas y los archivos de parámetros. Cree la definición de directiva mediante la creación de la definición de directivas az.

En este ejemplo, las reglas y los parámetros son los archivos creados y almacenados como archivos .json en Cloud Shell o en su sistema de archivos local.

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

Asignación de la directiva

En este ejemplo se asigna la directiva a un grupo de recursos mediante az policy assignment create. Ninguna de las máquinas virtuales creadas en el grupo de recursos myResourceGroup podrá instalar el acceso a VM Linux ni las extensiones del script personalizado para Linux.

Nota

El grupo de recursos debe existir para poder asignar la directiva.

Use az account list para buscar el identificador de suscripción y reemplazar el marcador de posición en el ejemplo siguiente:

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"
			]
		}
	}'

Prueba de la directiva

Pruebe la directiva creando una nueva máquina virtual y agregando un nuevo usuario.

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

Nota

Reemplace los valores myResourceGroup, myVMy myImage según corresponda.

Intente crear un nuevo usuario denominado myNewUser con la extensión de acceso a máquinas virtuales.

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

Eliminación de la asignación

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

Eliminación de la directiva

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

Pasos siguientes

Para más información, consulte Azure Policy.