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 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.

Cree una cola i un Service Bus

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

  2. En la página Crear un recurso, seleccione Integración>Service Bus.

  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, agregue 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, deberá 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 requisitos de rol específicos, consulte la documentación sobre desencadenadores y enlaces para el servicio.

  1. En el espacio de nombres de Service Bus que acaba de crear, seleccione Access Control (IAM) . Aquí es donde puede ver y configurar quién tiene acceso al recurso.

  2. Haga clic en Agregar y seleccione Agregar asignación de roles.

  3. Busque Receptor de datos de Azure Service Bus, selecciónelo y haga clic en Siguiente.

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

  5. Haga clic en 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. Haga clic en la aplicación. Debe colocarse en la sección Miembros seleccionados. Haga clic en Seleccionar.

  10. En la pantalla Agregar asignación de roles, haga clic en Revisar y asignar. Revise la configuración y haga clic en Revisar y asignar.

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

Conectar a 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 Configuración de la aplicación de funciones, seleccione Configuración.

  3. En Configuración de la aplicación, seleccione + Configuración de la aplicación nueva, para crear los valores nuevos en la tabla siguiente.

    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. Después de crear los dos valores, seleccione Guardar>Confirmar.

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 los siguientes comandos:

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

    Esto 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 
    

    Esto 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 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. Además, deberá asignar el rol a la identidad del desarrollador. Para más información, consulte la documentación de 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 la hoja izquierda.

  5. Seleccione la cola llamada myinputqueue.

  6. Seleccione Service Bus Explorer en la hoja 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.

Use los vínculos siguientes para obtener más información sobre conexiones basadas en identidades de Azure Functions: