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
En Azure Portal, elija Crear un recurso (+) .
En la página Crear un recurso, seleccione Integración>Service Bus.
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. Seleccione Revisar + crear. Una vez que se complete la validación, seleccione Crear.
Una vez finalizada la implementación, seleccione Ir al recurso.
En el nuevo espacio de nombres de Service Bus, seleccione + Cola para agregar una cola.
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.
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.
Haga clic en Agregar y seleccione Agregar asignación de roles.
Busque Receptor de datos de Azure Service Bus, selecciónelo y haga clic en Siguiente.
En la pestaña Miembros, en Asignar acceso a, seleccione Identidad administrada
Haga clic en Seleccionar miembros para abrir el panel para seleccionar identidades administradas.
Confirme que la Suscripción sea aquella en la que creó los recursos anteriormente.
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.
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.
Haga clic en la aplicación. Debe colocarse en la sección Miembros seleccionados. Haga clic en Seleccionar.
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
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.
En Configuración de la aplicación de funciones, seleccione Configuración.
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. 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
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
Vaya a la carpeta del proyecto:
cd LocalFunctionProj
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.
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.
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 enServiceBusConnection
. Este es el espacio de nombres de Service Bus utilizado por la conexión basada en identidadesServiceBusConnection__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
Ejecute el siguiente comando para generar localmente los archivos necesarios para el paquete de implementación:
dotnet publish --configuration Release
Vaya a la subcarpeta
\bin\Release\netcoreapp3.1\publish
y cree un archivo ZIP a partir de su contenido.Publique el archivo ZIP mediante la ejecución del comando siguiente, reemplazando los parámetros
FUNCTION_APP_NAME
,RESOURCE_GROUP_NAME
, yPATH_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
En el portal, busque
Application Insights
y seleccione Application Insights en Usuarios.En Application Insights, busque la instancia con nombre.
En la instancia, seleccione Métricas en directo en Investigar.
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.
Seleccione la cola llamada
myinputqueue
.Seleccione Service Bus Explorer en la hoja izquierda.
Enviar un mensaje de prueba.
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: