Autenticación de aplicaciones de Python en servicios de Azure durante el desarrollo local mediante entidades de servicio

Al crear aplicaciones en la nube, los desarrolladores deben depurar y probar aplicaciones en su estación de trabajo local. Cuando una aplicación se ejecuta en la estación de trabajo de un desarrollador durante el desarrollo local, todavía debe autenticarse en los servicios de Azure usados por la aplicación. En este artículo se explica cómo configurar objetos de entidad de servicio de aplicación dedicados que se usarán durante el desarrollo local.

A diagram showing how a Python app during local development will use the developers credentials to connect to Azure by obtaining those credentials locally installed development tools.

Las entidades de servicio de aplicaciones dedicadas para el desarrollo local permiten seguir el principio de privilegios mínimos durante el desarrollo de aplicaciones. Dado que los permisos se limitan exactamente a lo que se necesita para la aplicación durante el desarrollo, se impide que el código de la aplicación acceda accidentalmente a un recurso de Azure destinado a su uso por otra aplicación. Esto también impide que se produzcan errores cuando la aplicación se mueve a producción porque la aplicación se ha sobreprivilegado en el entorno de desarrollo.

Se configura una entidad de servicio de aplicación para la aplicación cuando la aplicación está registrada en Azure. Al registrar aplicaciones para el desarrollo local, se recomienda:

  • Cree registros de aplicaciones independientes para cada desarrollador que trabaje en la aplicación. Esto creará entidades de servicio de aplicación independientes para que cada desarrollador la use durante el desarrollo local y evitará la necesidad de que los desarrolladores compartan credenciales para una sola entidad de servicio de aplicación.
  • Cree registros de aplicaciones independientes por aplicación. Esto limita los permisos de la aplicación solo a lo que necesita la aplicación.

Durante el desarrollo local, las variables de entorno se establecen con la identidad de la entidad de servicio de la aplicación. El SDK de Azure para Python lee estas variables de entorno y usa esta información para autenticar la aplicación en los recursos de Azure que necesita.

1 - Registro de la aplicación en Azure

Los objetos de entidad de servicio de aplicación se crean con un registro de aplicación en Azure. Esto se puede hacer mediante el Azure Portal o la CLI de Azure.

Inicie sesión en el Azure Portal y siga estos pasos.

Instrucciones Instantánea
En Azure Portal:
  1. Escriba registros de aplicaciones en la barra de búsqueda de la parte superior del Azure Portal.
  2. Seleccione el elemento etiquetado Registros de aplicaciones en el encabezado Servicios del menú que aparece debajo de la barra de búsqueda.
A screenshot showing how to use the top search bar in the Azure portal to find and navigate to the App registrations page.
En la página Registros de aplicaciones, seleccione + Nuevo registro. A screenshot showing the location of the New registration button in the App registrations page.
En la página Registrar una aplicación , rellene el formulario como se indica a continuación.
  1. Nombre → Escriba un nombre para el registro de la aplicación en Azure. Se recomienda que este nombre incluya el nombre de la aplicación, el usuario para el que está el registro de la aplicación y un identificador como "dev" para indicar que el registro de la aplicación es para su uso en el desarrollo local.
  2. Los tipos de cuenta admitidossolo las cuentas de este directorio organizativo.
Seleccione Registrar para registrar la aplicación y crear la entidad de servicio de la aplicación.
A screenshot showing how to fill out the Register an application page by giving the app a name and specifying supported account types as accounts in this organizational directory only.
En la página Registro de aplicaciones de la aplicación:
  1. Id. de aplicación (cliente) → Este es el identificador de aplicación que usará la aplicación para acceder a Azure durante el desarrollo local. Copie este valor en una ubicación temporal en un editor de texto, ya que lo necesitará en un paso futuro.
  2. Identificador de directorio (inquilino) → La aplicación también necesitará este valor cuando se autentique en Azure. Copie este valor en una ubicación temporal en un editor de texto que también lo necesitará en un paso futuro.
  3. Credenciales de cliente → Debe establecer las credenciales de cliente de la aplicación para poder autenticarse en Azure y usar los servicios de Azure. Seleccione Agregar un certificado o un secreto para agregar credenciales para la aplicación.
A screenshot of the App registration page after the app registration has been completed. This screenshot shows the location of the application ID and tenant ID which will be needed in a future step. It also shows the location of the link to use to add an application secret for the app.
En la página Secretos de & certificados, seleccione + Nuevo secreto de cliente. A screenshot showing the location of the link to use to create a new client secret on the certificates and secrets page.
El cuadro de diálogo Agregar un secreto de cliente aparecerá en el lado derecho de la página. En este cuadro de diálogo:
  1. Descripción → Escriba un valor de Current.
  2. Expira → Seleccione un valor de 24 meses.
Seleccione Agregar para agregar el secreto.
A screenshot showing the page where a new client secret is added for the application service principal create by the app registration process.
En la página Secretos de certificados&, se mostrará el valor del secreto de cliente.

Copie este valor en una ubicación temporal en un editor de texto, ya que lo necesitará en un paso futuro.

IMPORTANTE: Esta es la única vez que verá este valor. Una vez que deje o actualice esta página, no podrá volver a ver este valor. Puede agregar un secreto de cliente adicional sin invalidar este secreto de cliente, pero no volverá a ver este valor.
A screenshot showing the page with the generated client secret.

2 - Creación de un grupo de seguridad de Azure AD para el desarrollo local

Puesto que normalmente hay varios desarrolladores que trabajan en una aplicación, se recomienda crear un grupo de Azure AD para encapsular los roles (permisos) que la aplicación necesita en el desarrollo local en lugar de asignar los roles a objetos de entidad de servicio individuales. Esto ofrece las siguientes ventajas.

  • Se garantiza que todos los desarrolladores tengan asignados los mismos roles, ya que los roles se asignan en el nivel de grupo.
  • Si se necesita un nuevo rol para la aplicación, solo debe agregarse al grupo de Azure AD de la aplicación.
  • Si un nuevo desarrollador se une al equipo, se crea una nueva entidad de servicio de aplicación para el desarrollador y se agrega al grupo, lo que garantiza que el desarrollador tiene los permisos adecuados para trabajar en la aplicación.
Instrucciones Instantánea
Vaya a la página de Azure Active Directory en el Azure Portal escribiendo Azure Active Directory en el cuadro de búsqueda de la parte superior de la página y seleccionando Azure Active Directory en los servicios. A screenshot showing how to use the top search bar in the Azure portal to search for and navigate to the Azure Active Directory page.
En la página Azure Active Directory, seleccione Grupos en el menú de la izquierda. A screenshot showing the location of the Groups menu item in the left-hand menu of the Azure Active Directory Default Directory page.
En la página Todos los grupos , seleccione Nuevo grupo. A screenshot showing the location of the New Group button in the All groups page.
En la página Nuevo grupo :
  1. Tipo de grupoSeguridad
  2. Nombre del grupo → Un nombre para el grupo de seguridad, normalmente creado a partir del nombre de la aplicación. También resulta útil incluir una cadena como local-dev en el nombre del grupo para indicar el propósito del grupo.
  3. Descripción del grupo → Descripción del propósito del grupo.
  4. Seleccione el vínculo No members selected (No miembros) seleccionado en Miembros para agregar miembros al grupo.
A screenshot showing how to fill out the form to create a new Azure Active Directory group for the application. This screenshot also shows the location of the link to select to add members to this group.
En el cuadro de diálogo Agregar miembros :
  1. Use el cuadro de búsqueda para filtrar la lista de nombres principales de la lista.
  2. Seleccione las entidades de servicio de la aplicación para el desarrollo local de esta aplicación. A medida que se seleccionan los objetos, se atenuarán y se moverán a la lista Elementos seleccionados en la parte inferior del cuadro de diálogo.
  3. Cuando termine, seleccione el botón Seleccionar .
A screenshot of the Add members dialog box showing how to select application service principals to be included in the group.
De nuevo en la página Nuevo grupo , seleccione Crear para crear el grupo.

El grupo se creará y se le devolverá a la página Todos los grupos . El grupo puede tardar hasta 30 segundos en aparecer y es posible que tenga que actualizar la página debido al almacenamiento en caché en el Azure Portal.
A screenshot of the New Group page showing how to complete the process by selecting the Create button.

3- Asignación de roles a la aplicación

A continuación, debe determinar qué roles (permisos) necesita la aplicación en qué recursos y asignar esos roles a la aplicación. En este ejemplo, los roles se asignarán al grupo de Azure Active Directory creado en el paso 2. A los roles se les puede asignar un rol en un ámbito de recurso, grupo de recursos o suscripción. En este ejemplo se muestra cómo asignar roles en el ámbito del grupo de recursos, ya que la mayoría de las aplicaciones agrupan todos sus recursos de Azure en un único grupo de recursos.

Instrucciones Instantánea
Busque el grupo de recursos de la aplicación; para ello, busque el nombre del grupo de recursos mediante el cuadro de búsqueda situado en la parte superior del Azure Portal.

Vaya al grupo de recursos seleccionando el nombre del grupo de recursos en el encabezado Grupos de recursos del cuadro de diálogo.
A screenshot showing how to use the top search box in the Azure portal to locate and navigate to the resource group you want to assign roles (permissions) to.
En la página del grupo de recursos, seleccione Control de acceso (IAM) en el menú de la izquierda. A screenshot of the resource group page showing the location of the Access control (IAM) menu item.
En la página Control de acceso (IAM):
  1. Seleccione la pestaña Asignaciones de roles.
  2. Seleccione + Agregar en el menú superior y, a continuación, Agregar asignación de roles en el menú desplegable resultante.
A screenshot showing how to navigate to the role assignments tab and the location of the button used to add role assignments to a resource group.
En la página Agregar asignación de roles se enumeran todos los roles que se pueden asignar al grupo de recursos.
  1. Use el cuadro de búsqueda para filtrar la lista por un tamaño más fácil de administrar. En este ejemplo se muestra cómo filtrar por Storage roles de blob.
  2. Seleccione el rol que desea asignar.
    Seleccione Siguiente para ir a la pantalla siguiente.
A screenshot showing how to filter and select role assignments to be added to the resource group.
La siguiente página Agregar asignación de roles permite especificar a qué usuario asignar el rol.
  1. Seleccione Usuario, grupo o entidad de servicio en Asignar acceso a.
  2. Seleccione + Seleccionar miembros en Miembros.
Se abrirá un cuadro de diálogo en el lado derecho del Azure Portal.
A screenshot showing the radio button to select to assign a role to an Azure AD group and the link used to select the group to assign the role to.
En el cuadro de diálogo Seleccionar miembros :
  1. El cuadro de texto Seleccionar se puede usar para filtrar la lista de usuarios y grupos de la suscripción. Si es necesario, escriba los primeros caracteres del grupo de desarrollo local Azure AD que creó para la aplicación.
  2. Seleccione el grupo de desarrollo local Azure AD asociado a la aplicación.
Seleccione Seleccionar en la parte inferior del cuadro de diálogo para continuar.
A screenshot showing how to filter for and select the Azure AD group for the application in the Select members dialog box.
El grupo Azure AD ahora se mostrará como seleccionado en la pantalla Agregar asignación de roles.

Seleccione Revisar y asignar para ir a la página final y, después, Revisar y asignar de nuevo para completar el proceso.
A screenshot showing the completed Add role assignment page and the location of the Review + assign button used to complete the process.

4- Establecimiento de variables de entorno de desarrollo local

El DefaultAzureCredential objeto buscará la información de la entidad de servicio en un conjunto de variables de entorno en tiempo de ejecución. Dado que la mayoría de los desarrolladores trabajan en varias aplicaciones, se recomienda usar un paquete como python-dotenv para acceder al entorno desde un .env archivo almacenado en el directorio de la aplicación durante el desarrollo. Esto limita las variables de entorno que se usan para autenticar la aplicación en Azure, de modo que esta aplicación solo las pueda usar.

El .env archivo nunca se comprueba en el control de código fuente, ya que contiene la clave secreta de la aplicación para Azure. El archivo .gitignore estándar para Python excluye automáticamente el .env archivo de la comprobación.

Para usar el paquete python-dotenv, instale primero el paquete en la aplicación.

pip install python-dotenv

A continuación, cree un .env archivo en el directorio raíz de la aplicación. Establezca los valores de la variable de entorno con los valores obtenidos del proceso de registro de la aplicación de la siguiente manera:

  • AZURE_CLIENT_ID → El valor del identificador de la aplicación.
  • AZURE_TENANT_ID → El valor del identificador de inquilino.
  • AZURE_CLIENT_SECRET → La contraseña o credencial generada para la aplicación.
AZURE_CLIENT_ID=00000000-0000-0000-0000-000000000000
AZURE_TENANT_ID=11111111-1111-1111-1111-111111111111
AZURE_CLIENT_SECRET=abcdefghijklmnopqrstuvwxyz

Por último, en el código de inicio de la aplicación, use la python-dotenv biblioteca para leer las variables de entorno del archivo en el .env inicio.

from dotenv import load_dotenv

if ( os.environ['ENVIRONMENT'] == 'development'):
    print("Loading environment variables from .env file")
    load_dotenv(".env")

5- Implementar DefaultAzureCredential en la aplicación

Para autenticar objetos de cliente del SDK de Azure en Azure, la aplicación debe usar la DefaultAzureCredential clase del azure.identity paquete. En este escenario, DefaultAzureCredential detectará las variables AZURE_CLIENT_IDde entorno , AZURE_TENANT_IDy se establecerán y AZURE_CLIENT_SECRET leerán esas variables para obtener la información de la entidad de servicio de la aplicación con la que conectarse a Azure.

Para empezar, agregue el paquete azure.identity a la aplicación.

pip install azure-identity

A continuación, para cualquier código de Python que cree un objeto de cliente de Azure SDK en la aplicación, querrá:

  1. Importe la DefaultAzureCredential clase desde el azure.identity módulo.
  2. Crear un objeto DefaultAzureCredential.
  3. Pase el DefaultAzureCredential objeto al constructor de objetos de cliente del SDK de Azure.

Un ejemplo de esto se muestra en el siguiente segmento de código.

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

# Acquire a credential object
token_credential = DefaultAzureCredential()

blob_service_client = BlobServiceClient(
        account_url="https://<my_account_name>.blob.core.windows.net",
        credential=token_credential)