Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las claves de acceso de Functions son tokens de autenticación que el runtime de Functions usa para proteger los puntos de conexión desencadenados por HTTP. Cuando un autor de llamada invoca una función HTTP, incluye una clave como parámetro ?code= de consulta o un x-functions-key encabezado. El tiempo de ejecución valida la clave y autoriza o rechaza la solicitud.
Las claves de acceso no son las mismas que los secretos de nivel de aplicación. Las claves de acceso protegen quién puede llamar a tus funciones, mientras que los secretos a nivel de aplicación protegen a qué se conectan tus funciones.
Cuándo usar las claves de acceso
| Escenario | ¿Por qué son adecuadas las claves de acceso? |
|---|---|
| Webhooks de terceros | Los proveedores como GitHub, Stripe o Twilio llaman a su función mediante una URL y un secreto. Las teclas de acceso se insertan directamente en el patrón ?code= que esperan. |
| Llamadas de servicio a servicio | El servicio back-end A llama a la función B a través de HTTP. Una clave compartida es más sencilla que configurar los registros de aplicaciones de Microsoft Entra para llamadas exclusivamente internas. |
| Suscripciones de Event Grid | Event Grid valida y llama al punto de conexión de la función mediante una clave del sistema que la plataforma administra automáticamente. |
| Autenticación de desarrollo y pruebas | Durante el desarrollo, necesita autenticación básica sin configurar OAuth/OIDC completa. Las claves de acceso proporcionan una puerta de autenticación de baja fricción sin configuración de identidad. |
| Compatibilidad de la migración | Las aplicaciones de Azure Functions existentes ya usan claves de acceso. Al migrar a Container Apps, necesita la misma autenticación basada en claves para evitar interrupciones de llamadas. |
Note
Para las API orientadas al usuario, cargas de trabajo de confianza cero o escenarios de autorización por usuario, use Microsoft Entra ID / OAuth 2.0 en lugar de claves de acceso. Las claves de acceso son secretos compartidos sin un registro de seguimiento de auditoría a nivel de identidad.
Prerequisites
- Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
- CLI de Azure versión 2.40.0 o posterior.
- Una aplicación Azure Functions existente en Container Apps o permisos para crear una.
Tipos de clave de acceso
El entorno de ejecución de Functions administra cuatro tipos de claves:
| Tipo de clave | Ámbito | propósito |
|---|---|---|
Clave maestra (_master) |
La app de funciones completa | Acceso de nivel de administrador a todas las funciones y puntos de conexión de administración /admin/*. No se puede revocar, solo se puede girar. |
Claves de host (default + personalizadas) |
La app de funciones completa | Autorizar llamadas a cualquier función desencadenada por HTTP en la aplicación. |
Claves de función (default + personalizadas) |
Función única | Autorizar llamadas a una función específica. Proporciona un control más granular que las claves de host. |
| Claves del sistema | Puntos de conexión de extensión | Se usa en extensiones de plataforma como suscripciones de webhook de Event Grid y Durable Functions. Administrado automáticamente. |
Patrones de nombres secretos
La convención de nomenclatura de las claves almacenadas depende del back-end de almacenamiento.
Almacén de claves (Key Vault)
El backend de Key Vault almacena cada clave como un secreto individual de Key Vault mediante una convención de doble guión (--):
| Tipo de clave | Patrón de nombre secreto | Example |
|---|---|---|
| Clave maestra | host--masterKey--master |
host--masterKey--master |
| Clave de función (valor predeterminado) | host--functionKey--default |
host--functionKey--default |
| Clave de función (personalizada) | host--functionKey--<name> |
host--functionKey--MyApiClient |
| Clave del sistema | host--systemKey--<extension> |
host--systemKey--eventgrid_extension |
| Clave por función | function--<functionName>--<keyName> |
function--myhttpfunc--default |
Almacenamiento de Blobs
El backend de Blob Storage almacena claves como archivos JSON en el contenedor de blobs azure-webjobs-secrets. Todas las claves de nivel de host (maestras, claves de función y claves del sistema) se almacenan juntas en un único host.json blob. Las claves por función se almacenan en blobs independientes nombrados según cada función.
| Ruta de acceso del blob | Contenido |
|---|---|
<siteSlotName>/host.json |
Archivo JSON que contiene masterKey, functionKeysy systemKeys |
<siteSlotName>/<functionName>.json |
Archivo JSON que contiene claves para una función específica |
Almacén de secretos de Container Apps
El almacén de secretos de Container Apps usa una convención diferente. El host de Functions lee las claves de los archivos montados en volumen en /run/secrets/functions-keys/. Cada archivo usa un nombre con puntos (por ejemplo, host.master), pero los nombres secretos de Container Apps solo permiten caracteres alfanuméricos en minúsculas y guiones. Al montar un volumen secreto, debe establecer explícitamente el campo path con el nombre de archivo con puntos que espera el host de Functions (por ejemplo, secretRef: host-master → path: host.master). La plataforma no realiza ninguna traducción automática de nombres.
| Tipo de clave | Nombre del secreto de Container Apps (guiones) | Montaje de volúmenes path (puntos) |
|---|---|---|
| Clave maestra | host-master |
host.master |
| Clave de host predeterminada | host-function-default |
host.function.default |
| Clave de host personalizada | host-function-<name> |
host.function.<name> |
| Clave de función predeterminada para una función específica | functions-<functionname>-default |
functions.<functionName>.default |
| Clave de función personalizada para una función específica | functions-<functionname>-<keyname> |
functions.<functionName>.<keyName> |
| Clave del sistema | host-systemkey-<extension> |
host.systemKey.<extension> |
Tip
Al solucionar problemas, busque estos patrones en el almacén de back-end para comprobar que las claves están configuradas correctamente.
Elección de un back-end de almacenamiento
Establezca la AzureWebJobsSecretStorageType variable de entorno para controlar dónde conserva el tiempo de ejecución las claves de acceso. Azure Container Apps admite tres back-end de nivel de producción.
Importante
En el caso de las cargas de trabajo de producción, se debe preferir los backends en este orden: almacén de secretos de Container Apps (containerapp) > Azure Key Vault (keyvault) > Azure Blob Storage (blob). El almacén de secretos de Container Apps no tiene dependencias externas y es el más sencillo de operar.
| parte del servidor | Valor de configuración | Generación automática de claves | Dependencia externa | Más adecuado para |
|---|---|---|---|---|
| Almacén de secretos de Container Apps | containerapp |
No, aprovisionas claves como secretos de las Container Apps. | Ninguno | Mayoría de las cargas de trabajo (recomendadas) |
| Azure Key Vault | keyvault |
No: creación manual de desencadenadores | instancia de Key Vault | Gobernanza centralizada, auditoría de cumplimiento |
| Azure Blob Storage | blob |
Sí | Cuenta de almacenamiento | Aplicaciones heredadas o una cuenta existente AzureWebJobsStorage |
Advertencia
No establezca en AzureWebJobsSecretStorageTypefiles. En Azure Container Apps, el sistema de archivos se efímero, por lo que las claves de host almacenadas con el back-end files se pierden cada vez que la aplicación se escala a cero, se reinicia o implementa una nueva revisión. Use siempre uno de los tres back-end de producción enumerados anteriormente.
Configuración del almacén de secretos de Container Apps
El almacén de secretos de Container Apps es el back-end recomendado. Las claves permanecen dentro de la plataforma Container Apps y no requieren almacenamiento externo ni Key Vault. Azure Resource Manager registra los cambios en secretos y variables de entorno en los registros de actividad.
Con este back-end, el host de Functions lee las claves de los archivos montados en volumen en /run/secrets/functions-keys/. El host no genera automáticamente claves. Debe crear cada clave como secreto de Container Apps y la plataforma los monta como archivos para que el host los lea.
Importante
El almacén de secretos de Container Apps es de solo lectura desde la perspectiva del host. El host lee los archivos de clave montados, pero nunca escribe en ellos. Si falta una clave necesaria, el host no lo genera automáticamente.
Paso 1: Establecimiento del tipo de almacenamiento
Vaya a la aplicación contenedora de Functions en el portal Azure.
En Configuración, seleccione Variables de entorno.
Seleccione Agregar y escriba los valores siguientes:
Propiedad Value Nombre AzureWebJobsSecretStorageTypeValor containerappSeleccione Guardar y, a continuación, seleccione Aplicar para confirmar los cambios.
Paso 2: Generación y almacenamiento de secretos de clave de acceso
Genere valores clave y almacénelos como secretos de Container Apps. Como mínimo, necesita la clave maestra y una clave de host predeterminada.
En la aplicación contenedora de Functions, en Configuración, seleccione Secretos.
Seleccione Agregar y escriba los valores siguientes:
Propiedad Value Nombre host-masterType Secretos de Container Apps Valor Valor de clave generado aleatoriamente. Selecciona Agregar.
Repita para
host-function-defaultcon otro valor generado aleatoriamente.Para agregar una clave por función, agregue un secreto denominado
functions-<functionname>-default(todo en minúsculas).
Note
Los nombres secretos de Container Apps solo permiten caracteres alfanuméricos en minúsculas y guiones. Debe establecer explícitamente el path campo en la configuración del volumen en el nombre de archivo puntuado que el host de Functions espera (por ejemplo, secretRef: host-master → path: host.master). Sin un explícito path, el archivo del disco conserva el nombre discontinuo y el host de Functions no encontrará la clave.
Paso 3: Configuración de montaje de volumen
Monte los secretos como archivos en /run/secrets/functions-keys/.
En la aplicación contenedora de Functions, en Aplicación, seleccione Revisiones y réplicas.
Seleccione Crear nueva revisión.
En la pestaña Escala y volúmenes , en Volúmenes, seleccione Agregar.
Escriba los siguientes valores:
Propiedad Value Tipo de volumen Secreto Nombre functions-keysPara cada secreto, establezca el campo Ruta de acceso en el nombre de archivo con puntos que espera el host de Functions (por ejemplo, establezca
host-masteren la ruta de accesohost.master, yhost-function-defaulten la ruta de accesohost.function.default).Selecciona Agregar.
En la pestaña Contenedor , seleccione el contenedor y, a continuación, seleccione Editar.
Seleccione la pestaña Montajes de volumen y seleccione Agregar.
Escriba los siguientes valores:
Propiedad Value Nombre del volumen functions-keysPunto de montaje /run/secrets/functions-keysSeleccione Guardar y, a continuación, seleccione Crear para implementar la nueva revisión.
Paso 4: Comprobar
Una vez reiniciada la aplicación, confirme que las claves funcionan:
az containerapp function keys list \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--key-type hostKey
También puede comprobar los registros de la aplicación para el mensaje Resolved secret storage provider ContainerAppsSecretsRepository, que confirma que el host utiliza el almacenamiento de secretos de Container Apps.
Rotación de claves
Para rotar una clave, actualice el secreto de Container Apps y reinicie la aplicación:
NEW_KEY=$(openssl rand -hex 32)
az containerapp secret set \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--secrets "host-function-default=$NEW_KEY"
az containerapp revision restart \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--revision "<REVISION_NAME>"
Note
Todas las réplicas comparten los mismos secretos asociados. Después de un reinicio, cada réplica recoge los valores de clave actualizados.
Configuración de Blob Storage
El back-end de Blob Storage permite que el entorno de ejecución genere y administre automáticamente las claves de acceso. Use esta opción cuando ya tenga una cuenta de almacenamiento para AzureWebJobsStorage y no necesite gobernanza centralizada.
Habilite la identidad administrada en la aplicación contenedora (si aún no está habilitada):
az containerapp identity assign \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --system-assignedConceda el rol Colaborador de datos de Storage Blob en la cuenta de almacenamiento a la identidad administrada:
PRINCIPAL_ID=$(az containerapp show \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --query identity.principalId \ --output tsv) STORAGE_ID=$(az storage account show \ --name "<STORAGE_ACCOUNT_NAME>" \ --resource-group "<RESOURCE_GROUP>" \ --query id \ --output tsv) az role assignment create \ --role "Storage Blob Data Contributor" \ --assignee "$PRINCIPAL_ID" \ --scope "$STORAGE_ID"Establezca el tipo de almacenamiento:
az containerapp update \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --set-env-vars "AzureWebJobsSecretStorageType=blob"El entorno de ejecución genera automáticamente claves en el siguiente inicio en frío. Compruebe lo siguiente:
az containerapp function keys list \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --key-type hostKey
Configuración de Key Vault
El back-end de Key Vault almacena las claves de acceso como secretos de Key Vault, lo que proporciona auditoría de nivel empresarial y control de acceso.
Cree una Key Vault (si no tiene una):
az keyvault create \ --name "<KEYVAULT_NAME>" \ --resource-group "<RESOURCE_GROUP>" \ --location "<LOCATION>"Habilite la identidad administrada en la aplicación contenedora (si aún no está habilitada):
az containerapp identity assign \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --system-assignedOtorgue el rol Key Vault Secrets Officer a la identidad administrada. El tiempo de ejecución necesita acceso de lectura y escritura para crear y administrar claves:
PRINCIPAL_ID=$(az containerapp show \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --query identity.principalId \ --output tsv) KEYVAULT_ID=$(az keyvault show \ --name "<KEYVAULT_NAME>" \ --query id \ --output tsv) az role assignment create \ --role "Key Vault Secrets Officer" \ --assignee "$PRINCIPAL_ID" \ --scope "$KEYVAULT_ID"Establezca el tipo de almacenamiento y Key Vault URI:
Para la identidad asignada por el sistema:
az containerapp update \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --set-env-vars \ "AzureWebJobsSecretStorageType=keyvault" \ "AzureWebJobsSecretStorageKeyVaultUri=https://<KEYVAULT_NAME>.vault.azure.net"Para la identidad asignada por el usuario, establezca también el identificador de cliente:
az containerapp update \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --set-env-vars \ "AzureWebJobsSecretStorageType=keyvault" \ "AzureWebJobsSecretStorageKeyVaultUri=https://<KEYVAULT_NAME>.vault.azure.net" \ "AzureWebJobsSecretStorageKeyVaultClientId=<USER_ASSIGNED_IDENTITY_CLIENT_ID>"Desencadene la creación de claves mediante la enumeración de claves:
az containerapp function keys list \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --key-type hostKey
Administración de las claves de acceso
Independientemente del back-end, use los siguientes comandos para enumerar, crear y eliminar claves de acceso:
# List all host keys
az containerapp function keys list \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--key-type hostKey
# List the master key
az containerapp function keys list \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--key-type masterKey
# Create or overwrite a custom host key
az containerapp function keys set \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--key-name "MyCustomKey" \
--key-value "<YOUR_KEY_VALUE>" \
--key-type hostKey
# Show a specific key
az containerapp function keys show \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--key-name "<KEY_NAME>" \
--key-type hostKey
# Delete a host key
az containerapp function keys delete \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--key-name "MyCustomKey" \
--key-type hostKey
Llame a una función con una clave de acceso
Pase la clave como un parámetro de consulta o un encabezado de solicitud.
# Query parameter
curl "https://<FUNCTIONS_APP_URL>/api/<FUNCTION_NAME>?code=<HOST_KEY>"
# Header
curl "https://<FUNCTIONS_APP_URL>/api/<FUNCTION_NAME>" \
-H "x-functions-key: <HOST_KEY>"