Compartir a través de


Tutorial: Uso de conexiones basadas en identidades en lugar de secretos con desencadenadores y enlaces

En este tutorial se muestra cómo configurar Azure Functions para conectarse a las colas de Azure Service Bus mediante identidades administradas en lugar de secretos almacenados en la configuración de la aplicación de funciones. El tutorial es una continuación del tutorial Creación de una aplicación de funciones sin secretos de almacenamiento predeterminados en su definición. Para más información sobre las conexiones basadas en identidades, consulte Configuración de una conexión basada en identidades.

Si bien los procedimientos que se muestran funcionan generalmente para todos los lenguajes, este tutorial admite actualmente funciones de biblioteca de clases de C# en Windows específicamente.

En este tutorial, aprenderá a:

  • Cree un espacio de nombres de Service Bus y una cola.
  • Configuración de la aplicación de funciones con una identidad administrada.
  • Creación de una asignación de roles que conceda permiso a esa identidad para leer desde la cola Service Bus.
  • Creación e implementación de una aplicación de funciones con un desencadenador de Service Bus.
  • Compruebe la conexión basada en identidades a Service Bus.

Requisito previo

Complete el tutorial anterior: Creación de una aplicación de funciones con conexiones basadas en identidades.

Creación de un espacio de nombres de Service Bus y una cola

  1. En Azure Portal, elija Crear un recurso (+) .

  2. En la página Crear un recurso, busque y seleccione Service Bus, y a continuación, seleccione Crear.

  3. En la página Aspectos básicos, use la tabla siguiente para configurar las opciones de espacio de nombres de Service Bus. Use los valores predeterminados en las opciones restantes.

    Opción Valor sugerido Descripción
    Suscripción Su suscripción Suscripción en la que se han creado los recursos.
    Grupo de recursos myResourceGroup El grupo de recursos que creó con la aplicación de funciones.
    Nombre del espacio de nombres Nombre único globalmente El espacio de nombres de la instancia desde el que se va a desencadenar la función. Dado que el espacio de nombres es accesible públicamente, debe usar un nombre que sea globalmente único en Azure. El nombre también debe tener entre 6 y 50 caracteres, contener solo caracteres alfanuméricos y guiones, y no puede empezar con un número.
    Ubicación myFunctionRegion La región en la que creó la aplicación de funciones.
    Plan de tarifa Básico El nivel de Service Bus básico.
  4. Seleccione Revisar + crear. Una vez que se complete la validación, seleccione Crear.

  5. Una vez finalizada la implementación, seleccione Ir al recurso.

  6. En el nuevo espacio de nombres de Service Bus, seleccione + Cola para agregar una cola.

  7. Escriba myinputqueue como nombre de la nueva cola y seleccione Crear.

Ahora que tiene una cola, puede agregar una asignación de roles a la identidad administrada de la aplicación de funciones.

Configure el desencadenador de Service Bus con una identidad administrada

Para usar desencadenadores de Service Bus con conexiones basadas en identidades, debe agregar la asignación de roles de Receptor de datos de Azure Service Bus a la identidad administrada en la aplicación de funciones. Este rol es necesario cuando se usan identidades administradas para desencadenarse fuera del espacio de nombres de Service Bus. También puede agregar su propia cuenta a este rol, lo que permite conectarse al espacio de nombres de Service Bus durante las pruebas locales.

Nota

Los requisitos de rol para usar conexiones basadas en identidades varían en función del servicio y de cómo se conecte a él. Las necesidades varían entre desencadenadores, enlaces de entrada y de salida. Para obtener más información sobre los requisitos específicos de cada función, consulte la documentación de activación y vinculación del servicio.

  1. En el espacio de nombres del bus de servicios que ha creado, seleccione Control de acceso (IAM). Esta página es donde puede ver y configurar quién tiene acceso al recurso.

  2. Seleccione + Agregar y seleccione Agregar asignación de roles.

  3. Busque receptor de datos de Azure Service Bus, selecciónelo y, a continuación, seleccione Siguiente.

  4. En la pestaña Miembros, en Asignar acceso a, seleccione Identidad administrada.

  5. Seleccione Seleccionar miembros para abrir el panel para Seleccionar identidades administradas.

  6. Confirme que la Suscripción sea aquella en la que creó los recursos anteriormente.

  7. En el selector Identidad administrada, seleccione Aplicación de funciones de la categoría Identidad administrada asignada por el sistema. La etiqueta Aplicación de funciones puede llevar un número entre paréntesis al lado, lo que indica el número de aplicaciones de la suscripción con identidades asignadas por el sistema.

  8. La aplicación debe aparecer en una lista debajo de los campos de entrada. Si no la ve, puede usar el cuadro Seleccionar para filtrar los resultados por el nombre de la aplicación.

  9. Seleccione la aplicación. Debe colocarse en la sección Miembros seleccionados. Elija Seleccionar.

  10. De vuelta en la pantalla Añadir asignación de roles, seleccione Revisar + asignar. Revise la configuración y seleccione Revisar y asignar.

Ha concedido a la aplicación de funciones acceso al espacio de nombres de Service Bus mediante identidades administradas.

Conectar al Service Bus en la aplicación de funciones

  1. En el portal, busque la aplicación de funciones que creó en el tutorial anterior o vaya a ella en la página Aplicación de funciones.

  2. En la aplicación de funciones, expanda Configuracióny, después, seleccione Variables de entorno.

  3. En la pestaña Configuraciónde la aplicación, seleccione + Agregar para crear una configuración. Use la información de la tabla siguiente para escribir el Nombre y Valor de la nueva configuración:

    NOMBRE valor Descripción
    ServiceBusConnection__fullyQualifiedNamespace <SERVICE_BUS_NAMESPACE>.servicebus.windows.net Este valor conecta una aplicación de funciones a Service Bus, para lo que usa conexiones basadas en identidades, en lugar de secretos.
  4. Seleccione Aplicar y, a continuación, seleccione Aplicar y Confirmar para guardar los cambios y reiniciar la función de aplicación.

Nota:

Al usar Azure App Configuration o Key Vault para proporcionar la configuración de las conexiones de identidad administrada, los nombres de configuración deben usar un separador de clave válido, como : o / en lugar de __ para asegurarse de que los nombres se resuelven correctamente.

Por ejemplo, ServiceBusConnection:fullyQualifiedNamespace.

Ahora que ha preparado la aplicación de funciones para conectarse al espacio de nombres de Service Bus mediante una identidad administrada, puede agregar una nueva función que use un desencadenador de Service Bus al proyecto local.

Agregar una función de desencadenador de Service Bus

  1. Ejecute el comando func init, de la manera siguiente, para crear un proyecto de funciones en una carpeta llamada LocalFunctionProj con el entorno de ejecución especificado:

    func init LocalFunctionProj --dotnet
    
  2. Vaya a la carpeta del proyecto:

    cd LocalFunctionProj
    
  3. En la carpeta del proyecto raíz, ejecute el siguiente comando:

    dotnet add package Microsoft.Azure.WebJobs.Extensions.ServiceBus --version 5.2.0
    

    Este comando reemplaza la versión predeterminada del paquete de extensión de Service Bus por una versión que admite identidades administradas.

  4. Ejecute el siguiente comando para agregar una función de desencadenador de Service Bus al proyecto:

    func new --name ServiceBusTrigger --template ServiceBusQueueTrigger 
    

    Este comando agrega el código para un nuevo desencadenador de Service Bus y una referencia al paquete de extensión. Debe agregar una configuración de conexión de espacio de nombres de Service Bus para este desencadenador.

  5. Abra el nuevo archivo del proyecto ServiceBusTrigger.cs y reemplace la clase ServiceBusTrigger por el código siguiente:

    public static class ServiceBusTrigger
    {
        [FunctionName("ServiceBusTrigger")]
        public static void Run([ServiceBusTrigger("myinputqueue", 
            Connection = "ServiceBusConnection")]string myQueueItem, ILogger log)
        {
            log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
        }
    }
    

    Este ejemplo de código actualiza el nombre de la cola a myinputqueue, que es el mismo nombre de la cola que creó anteriormente. También establece el nombre de la conexión de Service Bus en ServiceBusConnection. Este nombre es el espacio de nombres de Service Bus utilizado por la conexión basada en identidades ServiceBusConnection__fullyQualifiedNamespace que configuró en el portal.

Nota:

Si intenta ejecutar las funciones ahora mediante func start, obtendrá un error. Esto se debe a que no tiene una conexión basada en identidades definida localmente. Si quiere ejecutar la función localmente, establezca la configuración de la aplicación ServiceBusConnection__fullyQualifiedNamespace en local.settings.json como hizo en [la sección anterior](#connect-to-the-service-bus-in-your-function-app). Además, debe asignar el rol a la identidad del desarrollador. Para obtener más información, consulte Desarrollo local con conexiones basadas en identidades.

Nota:

Al usar Azure App Configuration o Key Vault para proporcionar la configuración de las conexiones de identidad administrada, los nombres de configuración deben usar un separador de clave válido, como : o / en lugar de __ para asegurarse de que los nombres se resuelven correctamente.

Por ejemplo, ServiceBusConnection:fullyQualifiedNamespace.

Publique el proyecto actualizado

  1. Ejecute el siguiente comando para generar localmente los archivos necesarios para el paquete de implementación:

    dotnet publish --configuration Release
    
  2. Vaya a la subcarpeta \bin\Release\netcoreapp3.1\publish y cree un archivo ZIP a partir de su contenido.

  3. Publique el archivo ZIP mediante la ejecución del comando siguiente, reemplazando los parámetros FUNCTION_APP_NAME, RESOURCE_GROUP_NAME, y PATH_TO_ZIP según corresponda:

    az functionapp deploy -n FUNCTION_APP_NAME -g RESOURCE_GROUP_NAME --src-path PATH_TO_ZIP
    

Ahora que ha actualizado la aplicación de funciones con el nuevo desencadenador, puede comprobar que funciona con la identidad.

Validación de los cambios

  1. En el portal, busque Application Insights y seleccione Application Insights en Usuarios.

  2. En Application Insights, busque la instancia con nombre.

  3. En la instancia, seleccione Métricas en directo en Investigar.

  4. Mantenga abierta la pestaña anterior y abra Azure Portal en una nueva pestaña. En la nueva pestaña, vaya al espacio de nombres de Service Bus y seleccione Colas en el menú de la izquierda.

  5. Seleccione la cola llamada myinputqueue.

  6. Seleccione Service Bus Explorer en el menú de la izquierda.

  7. Enviar un mensaje de prueba.

  8. Seleccione la pestaña Métricas en directo abierta y vea la ejecución de la cola de Service Bus.

Felicidades. Ha configurado correctamente el desencadenador de cola de Service Bus con una identidad administrada.

Limpieza de recursos

En los pasos anteriores, creó recursos de Azure en un grupo de recursos. Si no cree que vaya a necesitar estos recursos en el futuro, puede eliminarlos mediante la eliminación del grupo de recursos.

En el menú de Azure Portal o la página Inicio, seleccione Grupos de recursos. En la página Grupos de recursos, seleccione myResourceGroup.

En la página myResourceGroup, asegúrese de que los recursos enumerados sean los que desea eliminar.

Seleccione Eliminar grupo de recursos, escriba myResourceGroup en el cuadro de texto para confirmar y, después, seleccione Eliminar.

Pasos siguientes

En este tutorial, ha creado una aplicación de funciones con conexiones basadas en identidades.

Vaya al siguiente artículo para aprender a administrar la identidad.