Acabo de crear una suscripción y no puedo ni crear ni una VM. Hablemos de resource Provider

En el post de hoy vamos a hablar de los los resource providers, y más concretamente del registro de estos.

Si vamos a la documentación oficial, nos encontramos la siguiente definición:

Un proveedor de recursos (resource provider) es una colección de operaciones REST que permite la funcionalidad de un servicio de Azure. Cada proveedor de recursos tiene un espacio de nombres en el formato de company-name.service-label

Sin estos resource providers, no podríamos crear ningún recurso en Azure, así de sencillo. Azure Resource Manager (ARM) no puede hacer nada sino tiene registrado el resource provider que necesita.

El siguiente diagrama de Microsoft es muy esclarecedor:

Por ejemplo el resource provider del storage es Microsoft.Storage. Pues sino tenemos registrado este resource provider no podemos crear ningún Storage Account.

¡¡¡NOTA IMPORTANTE!!!: Los resource providers se registran a nivel de suscripción.

Pongamos de ejemplo, lo que planteábamos en en título del post:

Acabo de crear una suscripción nueva.

Para ver los resource providers que tenemos registrados cuando acabamos de crear la suscripción, debemos seguir los siguientes pasos en el portal de Azure (https://portal.azure.com/):

a) Vamos a la suscripción recién creada a través de la búsqueda del portal:



b) Pulsamos en la suscripción nueva, en nuestro caso NewSubscription:



c) Una vez dentro de la suscripción, vamos a Resource Providers:



d) Si buceamos un poco por el listado, os daréis cuenta que prácticamente ningún resource provider esta registrado. Por ejemplo en la imagen vemos que el resource provider Microsoft.Compute no esta registrado, por lo cual no podríamos crear máquinas virtuales, por ejemplo:

Esto de que prácticamente no haya registrado ningún resource provider cuando creamos una suscripción, se debe a temas de seguridad y más en concreto al concepto de “Least Privilege”. Solo registramos los resource providers que vamos a necesitar, ni uno más ni ninguno menos. Imaginemos que hemos habilitado el resource provider para poder usar databricks, y en algún momento nos roban las credenciales y empiezan a crear clusters de Databricks como sino hubiera mañana.

Ahora ya tenemos claro donde podemos ver los resource providers creados. La cuestión ahora es ¿Cómo registramos los resource providers?

Hay dos formas en que se registran los resource providers:

a) De forma manual

b) De forma automática “sin enterarnos”

Antes de entrar en detalle de las dos formas en que podemos registrar los resource providers, comentaros que necesitamos el permiso de /register/action. Con los roles de Contributor y Owner a nivel de suscripción tenemos este permiso.

Ahora ya sí vamos a ver la forma manual de registrar un resource provider.

Los pasos a seguir a través del portal de Azure son:

a) Vamos a la suscripción que queremos , buscándola a través de la búsqueda del portal:



b) Pulsamos en la suscripción, en nuestro caso NewSubscription:



c) Una vez dentro, vamos a Resource providers:



d) Buscamos el resource provider que queremos registrar, en nuestro ejemplo Microsoft.Compute y le pulsamos en Register.



e) Nos aparecerá lo siguiente, avisándonos que esta registrando:

Esta forma de hacerlo en el portal, cuando tienes que registrar pocos resource providers puede valer. Pero si tienes que registrar muchos, la mejor forma es usar Powershell o Azure CLI. Por ejemplo usando Powershell, sería así:

Connect-AzAccount 

Set-AzContext -Subscription "[Put_Your_SubscriptionId_Here]"

Register-AzResourceProvider -ProviderNamespace Microsoft.Compute

Respecto a la segunda forma de registrar un resource provider de forma automática “sin enterarnos”, dejar que os lo explique con un ejemplo:

Tengo una nueva suscripción, y no tengo registrado el resource provider de Microsoft.Compute:

Ahora voy al portal y yo que tengo permisos de Contributor o de Owner (los cuales tienen el permiso de /register/action) , voy a crear una máquina virtual. Pues cuando estoy en el paso de que valida los parámetros para ver si se puede crear la máquina virtual…

Por detrás Azure esta registrando el resource provider, sin nosotros hacer nada:

Lo mismo pasa con Terraform, que por defecto registra automáticamente los resource providers que necesita, siempre y cuando el service principal que se use tenga permiso para registrar. En caso de que se deseé que Terraform no registre ningún resource provider debemos poner skip_provider_registration = true en el bloque del provider:

  provider "azurerm" {
    features {
    }
    skip_provider_registration = true
}

Espero os haya gustado el post y hasta la próxima.