mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-14 05:46:25 -08:00
Translated ['src/pentesting-cloud/azure-security/az-post-exploitation/az
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Post Explotación de la Base de Datos de Logic Apps
|
||||
## Explotación Post de la Base de Datos de Logic Apps
|
||||
Para más información sobre las aplicaciones lógicas, consulta:
|
||||
|
||||
{{#ref}}
|
||||
@@ -18,6 +18,45 @@ az logic workflow identity remove/assign \
|
||||
--system-assigned true \
|
||||
--user-assigned "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity_name>"
|
||||
```
|
||||
Adicionalmente, con solo `Microsoft.Logic/workflows/write` puedes cambiar algunas configuraciones como las direcciones IP de entrada permitidas o los días de retención del historial de ejecución:
|
||||
```bash
|
||||
az rest --method PUT \
|
||||
--uri "https://management.azure.com/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.Logic/workflows/<workflow_name>?api-version=2019-05-01" \
|
||||
--headers "Content-Type=application/json" \
|
||||
--body '{
|
||||
"location": "<location>",
|
||||
"properties": {
|
||||
"state": "Enabled",
|
||||
"definition": {
|
||||
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
|
||||
"contentVersion": "1.0.0.0",
|
||||
"parameters": {},
|
||||
"triggers": {
|
||||
"<trigger_name>": {
|
||||
"type": "Request",
|
||||
"kind": "Http"
|
||||
}
|
||||
},
|
||||
"actions": {},
|
||||
"outputs": {}
|
||||
},
|
||||
"runtimeConfiguration": {
|
||||
"lifetime": {
|
||||
"unit": "day",
|
||||
"count": <count>
|
||||
}
|
||||
},
|
||||
"accessControl": {
|
||||
"triggers": {
|
||||
"allowedCallerIpAddresses": []
|
||||
},
|
||||
"actions": {
|
||||
"allowedCallerIpAddresses": []
|
||||
}
|
||||
}
|
||||
}
|
||||
}'
|
||||
```
|
||||
### `Microsoft.Web/sites/read`, `Microsoft.Web/sites/write`
|
||||
Con estos permisos, puedes crear o actualizar Logic Apps alojados en un App Service Plan. Esto incluye modificar configuraciones como habilitar o deshabilitar la aplicación forzada de HTTPS.
|
||||
```bash
|
||||
@@ -35,7 +74,7 @@ az webapp start/stop/restart \
|
||||
```
|
||||
### `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/read` && `Microsoft.Web/sites/config/write`
|
||||
|
||||
Con este permiso, puedes configurar o modificar la configuración de aplicaciones web, incluidas las Logic Apps alojadas en un App Service Plan. Esto permite cambios en la configuración de la aplicación, cadenas de conexión, configuraciones de autenticación y más.
|
||||
Con este permiso, puedes configurar o modificar ajustes para aplicaciones web, incluyendo Logic Apps alojadas en un App Service Plan. Esto permite cambios en la configuración de la aplicación, cadenas de conexión, configuraciones de autenticación y más.
|
||||
```bash
|
||||
az logicapp config appsettings set \
|
||||
--name <logic_app_name> \
|
||||
@@ -111,6 +150,16 @@ az logic integration-account session create \
|
||||
}
|
||||
}
|
||||
}'
|
||||
```
|
||||
### `Microsoft.Logic/workflows/regenerateAccessKey/action`
|
||||
|
||||
Los usuarios con este permiso pueden regenerar las claves de acceso de Logic App, y si se utilizan de manera indebida, pueden provocar interrupciones en el servicio.
|
||||
```bash
|
||||
az rest --method POST \
|
||||
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Logic/workflows/<workflow-name>/regenerateAccessKey?api-version=<api-version>" \
|
||||
--body '{"keyType": "<key-type>"}' \
|
||||
--headers "Content-Type=application/json"
|
||||
|
||||
```
|
||||
### "*/delete"
|
||||
Con estos permisos, puedes eliminar recursos relacionados con Azure Logic Apps
|
||||
|
||||
@@ -32,6 +32,65 @@ az rest \
|
||||
--body '{}' \
|
||||
--headers "Content-Type=application/json"
|
||||
```
|
||||
Adicionalmente, con solo `Microsoft.Logic/workflows/write` puedes cambiar la Política de Autorización, dando por ejemplo a otro inquilino la capacidad de activar el flujo de trabajo:
|
||||
```bash
|
||||
az rest --method PUT \
|
||||
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Logic/workflows/<workflow-name>?api-version=2016-10-01" \
|
||||
--body '{
|
||||
"location": "<region>",
|
||||
"properties": {
|
||||
"definition": {
|
||||
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
|
||||
"contentVersion": "1.0.0.0",
|
||||
"parameters": {
|
||||
"$connections": {
|
||||
"defaultValue": {},
|
||||
"type": "Object"
|
||||
}
|
||||
},
|
||||
"triggers": {
|
||||
"<trigger-name>": {
|
||||
"type": "Request",
|
||||
"kind": "Http"
|
||||
}
|
||||
},
|
||||
"actions": {},
|
||||
"outputs": {}
|
||||
},
|
||||
"accessControl": {
|
||||
"triggers": {
|
||||
"openAuthenticationPolicies": {
|
||||
"policies": {
|
||||
"<policy-name>": {
|
||||
"type": "AAD",
|
||||
"claims": [
|
||||
{
|
||||
"name": "iss",
|
||||
"value": "<issuer-url>"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}'
|
||||
|
||||
```
|
||||
### `Microsoft.Logic/workflows/triggers/listCallbackUrl/action`
|
||||
Puedes obtener la URL de callback del trigger y ejecutarla.
|
||||
```bash
|
||||
az rest --method POST \
|
||||
--uri "https://management.azure.com/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.Logic/workflows/<workflow_name>/triggers/<trigger_name>/listCallbackUrl?api-version=2019-05-01"
|
||||
```
|
||||
Esto devolverá una URL de callback como `https://prod-28.centralus.logic.azure.com:443/workflows/....`. Ahora podemos ejecutarlo con:
|
||||
```bash
|
||||
curl --request POST \
|
||||
--url "https://prod-28.centralus.logic.azure.com:443/workflows/<workflow_id>/triggers/<trigger_name>/paths/invoke?api-version=2019-05-01&sp=%2Ftriggers%2F<trigger_name>%2Frun&sv=1.0&sig=<signature>" \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{"exampleKey": "exampleValue"}'
|
||||
```
|
||||
### (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/basicPublishingCredentialsPolicies/read`, `Microsoft.Web/sites/write`, `Microsoft.Web/sites/config/list/action`) && (`Microsoft.Web/sites/start/action`)
|
||||
Con estos permisos, puedes implementar flujos de trabajo de Logic App utilizando implementaciones de archivos ZIP. Estos permisos permiten acciones como leer detalles de la aplicación, acceder a credenciales de publicación, escribir cambios y listar configuraciones de la aplicación. Junto con los permisos de inicio, puedes actualizar e implementar una nueva Logic App con el contenido deseado.
|
||||
```bash
|
||||
|
||||
@@ -4,13 +4,13 @@
|
||||
|
||||
## Azure CosmosDB
|
||||
|
||||
**Azure Cosmos DB** es una **base de datos NoSQL, relacional y vectorial completamente gestionada** que ofrece tiempos de respuesta de un solo dígito en milisegundos, escalabilidad automática y disponibilidad respaldada por SLA con seguridad de nivel empresarial. Permite un desarrollo de aplicaciones más rápido a través de la distribución de datos multi-región lista para usar, APIs de código abierto, SDKs para lenguajes populares y características de bases de datos de IA como soporte de vectores integrado e integración fluida con Azure AI.
|
||||
**Azure Cosmos DB** es una base de datos **NoSQL, relacional y vectorial completamente gestionada** que ofrece tiempos de respuesta de un solo dígito en milisegundos, escalabilidad automática y disponibilidad respaldada por SLA con seguridad de nivel empresarial. Permite un desarrollo de aplicaciones más rápido a través de la distribución de datos multi-región lista para usar, APIs de código abierto, SDKs para lenguajes populares y características de bases de datos de IA como soporte de vectores integrado e integración fluida con Azure AI.
|
||||
|
||||
Azure Cosmos DB proporciona múltiples APIs de base de datos para modelar datos del mundo real utilizando documentos, modelos de datos relacionales, clave-valor, gráfico y de familia de columnas, siendo estas APIs NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin y Table.
|
||||
|
||||
Un aspecto clave de CosmosDB es la Cuenta de Azure Cosmos. **La Cuenta de Azure Cosmos** actúa como el punto de entrada a las bases de datos. La cuenta determina configuraciones clave como la distribución global, los niveles de consistencia y la API específica que se utilizará, como NoSQL. A través de la cuenta, puedes configurar la replicación global para garantizar que los datos estén disponibles en múltiples regiones para un acceso de baja latencia. Además, puedes elegir un nivel de consistencia que equilibre el rendimiento y la precisión de los datos, con opciones que van desde la consistencia Fuerte hasta la consistencia Eventual.
|
||||
Un aspecto clave de CosmosDB es la Cuenta de Azure Cosmos. **Cuenta de Azure Cosmos**, actúa como el punto de entrada a las bases de datos. La cuenta determina configuraciones clave como la distribución global, los niveles de consistencia y la API específica que se utilizará, como NoSQL. A través de la cuenta, puedes configurar la replicación global para garantizar que los datos estén disponibles en múltiples regiones para un acceso de baja latencia. Además, puedes elegir un nivel de consistencia que equilibre entre rendimiento y precisión de datos, con opciones que van desde Consistencia Fuerte hasta Consistencia Eventual.
|
||||
|
||||
Azure Cosmos DB admite **identidades asignadas por el usuario** e **identidades gestionadas asignadas por el sistema** que se crean automáticamente y están vinculadas al ciclo de vida del recurso, lo que permite una autenticación segura basada en tokens al conectarse a otros servicios, siempre que esos servicios tengan las asignaciones de rol apropiadas. Sin embargo, Cosmos DB no tiene un mecanismo incorporado para consultar directamente fuentes de datos externas como Azure Blob Storage. A diferencia de las características de tablas externas de SQL Server, Cosmos DB requiere que los datos se ingesten en sus contenedores utilizando herramientas externas como Azure Data Factory, la Herramienta de Migración de Datos o scripts personalizados antes de que puedan ser consultados con sus capacidades de consulta nativas.
|
||||
Azure Cosmos DB admite **identidades asignadas por el usuario** e **identidades gestionadas asignadas por el sistema** que se crean automáticamente y están vinculadas al ciclo de vida del recurso. Sin embargo, Cosmos DB no tiene un mecanismo incorporado para consultar directamente fuentes de datos externas como Azure Blob Storage. A diferencia de las características de tablas externas de SQL Server, Cosmos DB requiere que los datos sean ingeridos en sus contenedores utilizando herramientas externas como Azure Data Factory, la Herramienta de Migración de Datos o scripts personalizados antes de que puedan ser consultados con sus capacidades de consulta nativas.
|
||||
|
||||
### NoSQL
|
||||
La API NoSQL de Azure Cosmos DB es una API basada en documentos que utiliza JSON como su formato de datos. Proporciona una sintaxis de consulta similar a SQL para consultar objetos JSON, lo que la hace adecuada para trabajar con datos estructurados y semi-estructurados. El punto final del servicio es:
|
||||
@@ -18,16 +18,16 @@ La API NoSQL de Azure Cosmos DB es una API basada en documentos que utiliza JSON
|
||||
https://<Account-Name>.documents.azure.com:443/
|
||||
```
|
||||
#### Bases de datos
|
||||
Dentro de una cuenta, puedes crear una o más bases de datos, que sirven como agrupaciones lógicas de contenedores. Una base de datos actúa como un límite para la gestión de recursos y permisos de usuario. Las bases de datos pueden compartir el rendimiento provisionado entre sus contenedores o asignar rendimiento dedicado a contenedores individuales.
|
||||
Dentro de una cuenta, puedes crear una o más bases de datos, que sirven como agrupaciones lógicas de contenedores. Una base de datos actúa como un límite para la gestión de recursos y permisos de usuario. Las bases de datos pueden permitir que múltiples contenedores utilicen un pool compartido de capacidad de rendimiento o dar a cada contenedor su propia potencia dedicada.
|
||||
|
||||
#### Contenedores
|
||||
La unidad central de almacenamiento de datos es el contenedor, que contiene documentos JSON y se indexa automáticamente para consultas eficientes. Los contenedores son escalables de manera elástica y se distribuyen a través de particiones, que son determinadas por una clave de partición definida por el usuario. La clave de partición es crítica para garantizar un rendimiento óptimo y una distribución uniforme de los datos. Por ejemplo, un contenedor podría almacenar datos de clientes, con "customerId" como la clave de partición.
|
||||
|
||||
#### Características clave
|
||||
**Distribución global**: Habilitar o deshabilitar la Geo-Redundancia para la replicación entre regiones y Escrituras en múltiples regiones para mejorar la disponibilidad.
|
||||
**Redes y seguridad**: entre puntos finales públicos (todos/seleccionar redes) o privados para conectividad. Conexiones seguras con cifrado TLS 1.2. Soporta CORS (Intercambio de Recursos de Origen Cruzado) para acceso controlado a recursos.
|
||||
**Copia de seguridad y recuperación**: de políticas de copia de seguridad Periódicas, Continuas (7 días) o Continuas (30 días) con intervalos y retención configurables.
|
||||
**Cifrado de datos**: Claves gestionadas por el servicio por defecto o claves gestionadas por el cliente (CMK) para cifrado (la selección de CMK es irreversible).
|
||||
- **Distribución global**: Habilitar o deshabilitar la Geo-Redundancia para la replicación entre regiones y Escrituras en múltiples regiones para mejorar la disponibilidad.
|
||||
- **Redes y seguridad**: entre puntos finales públicos (todos/redes seleccionadas) o privados para conectividad. Conexiones seguras con cifrado TLS 1.2. Soporta CORS (Cross-Origin Resource Sharing) para acceso controlado a recursos. Microsoft Defender for Cloud puede ser habilitado. Para realizar la conexión, puedes hacer uso de claves.
|
||||
- **Copia de seguridad y recuperación**: de políticas de copia de seguridad Periódicas, Continuas (7 días) o Continuas (30 días) con intervalos y retención configurables.
|
||||
- **Cifrado de datos**: Claves gestionadas por el servicio por defecto o claves gestionadas por el cliente (CMK) para cifrado (la selección de CMK es irreversible).
|
||||
|
||||
#### Enumeración
|
||||
|
||||
@@ -67,6 +67,19 @@ az cosmosdb sql trigger list --account-name <AccountName> --container-name <Cont
|
||||
## List the NoSQL user defined functions under an Azure Cosmos DB NoSQL container
|
||||
az cosmosdb sql user-defined-function list --account-name <AccountName> --container-name <ContainerName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
|
||||
|
||||
|
||||
## MongoDB (vCore)
|
||||
# Install az cli extension
|
||||
az extension add --name cosmosdb-preview
|
||||
# List all MongoDB databases in a specified Azure Cosmos DB account
|
||||
az cosmosdb mongocluster list
|
||||
az cosmosdb mongocluster show --cluster-name <name> --resource-group <ResourceGroupName>
|
||||
# Get firewall rules
|
||||
az cosmosdb mongocluster firewall rule list --cluster-name <name> --resource-group <ResourceGroupName>
|
||||
# Connect to in
|
||||
brew install mongosh
|
||||
mongosh "mongodb://<username>:<password>@<account-name>.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retryWrites=false" --username <username> --password <password>
|
||||
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
@@ -118,7 +131,7 @@ Get-AzCosmosDBSqlUserDefinedFunction -ResourceGroupName "<ResourceGroupName>" -A
|
||||
|
||||
#### Conexión
|
||||
|
||||
Para conectar la biblioteca azure-cosmosDB (pip install azure-cosmos) es necesario. Además, el endpoint y la clave son componentes cruciales para realizar la conexión.
|
||||
Tiene 2 tipos de clave, Lectura-escritura (completa) y Solo lectura. Proporcionan el acceso indicado a todas las bases de datos, colecciones y datos dentro de la cuenta de Cosmos DB. Para conectarse, se necesita la biblioteca azure-cosmosDB (pip install azure-cosmos). Además, el endpoint y la clave son componentes cruciales para realizar la conexión.
|
||||
```python
|
||||
from azure.cosmos import CosmosClient, PartitionKey
|
||||
|
||||
@@ -194,15 +207,15 @@ En MongoDB, puedes crear una o más bases de datos dentro de una instancia. Cada
|
||||
La unidad central de almacenamiento de datos en MongoDB es la colección, que contiene documentos y está diseñada para consultas eficientes y un diseño de esquema flexible. Las colecciones son escalables de manera elástica y pueden soportar operaciones de alto rendimiento a través de múltiples nodos en una configuración distribuida.
|
||||
|
||||
#### Características clave del tipo de unidad de solicitud (RU)
|
||||
**Distribución global**: Habilitar o deshabilitar la geo-redundancia para la replicación entre regiones y escrituras en múltiples regiones para mejorar la disponibilidad.
|
||||
**Redes y seguridad**: entre puntos finales públicos (todos/seleccionar redes) o privados para conectividad. Conexiones seguras con cifrado TLS 1.2. Soporta CORS (Intercambio de Recursos de Origen Cruzado) para acceso controlado a recursos.
|
||||
**Copia de seguridad y recuperación**: de políticas de copia de seguridad periódicas, continuas (7 días, gratis) o continuas (30 días, de pago) con intervalos y retención configurables.
|
||||
**Distribución Global**: Habilitar o deshabilitar la Geo-Redundancia para la replicación entre regiones y Escrituras en Múltiples Regiones para mejorar la disponibilidad.
|
||||
**Redes y Seguridad**: entre puntos finales públicos (todos/redes seleccionadas) o privados para conectividad. Conexiones seguras con cifrado TLS 1.2. Soporta CORS (Intercambio de Recursos de Origen Cruzado) para acceso controlado a recursos. Para realizar la conexión, puedes hacer uso de claves.
|
||||
**Copia de seguridad y recuperación**: de políticas de copia de seguridad Periódicas, Continuas (7 días, gratis) o Continuas (30 días, de pago) con intervalos y retención configurables.
|
||||
**Cifrado de datos**: Claves gestionadas por el servicio por defecto o claves gestionadas por el cliente (CMK) para cifrado (la selección de CMK es irreversible).
|
||||
|
||||
#### Características clave del tipo de clúster vCore
|
||||
**Distribución global**: Habilitar una réplica de lectura en otra región de Azure para alta disponibilidad y soporte de conmutación por error. Configurar el nombre de la réplica, la región y el almacenamiento por fragmento.
|
||||
**Redes y seguridad**: Soporta acceso público con IPs públicas asignadas y acceso privado. Restringir conexiones utilizando reglas de firewall; por defecto, no se permiten IPs públicas.
|
||||
**Conexiones cifradas**: Aplica cifrado TLS para la transmisión segura de datos.
|
||||
**Distribución Global**: Habilitar una réplica de lectura en otra región de Azure para alta disponibilidad y soporte de conmutación por error. Configurar el nombre de la réplica, la región y el almacenamiento por fragmento.
|
||||
**Redes y Seguridad**: Soporta acceso público con IPs públicas asignadas y acceso privado. Restringir conexiones utilizando reglas de firewall; por defecto, no se permiten IPs públicas.
|
||||
**Conexiones Encriptadas**: Impone cifrado TLS para la transmisión segura de datos.
|
||||
|
||||
#### Enumeración
|
||||
|
||||
@@ -229,10 +242,23 @@ az cosmosdb mongodb database list --account-name <AccountName> --resource-group
|
||||
# List all collections in a specific MongoDB database within an Azure Cosmos DB account
|
||||
az cosmosdb mongodb collection list --account-name <AccountName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
|
||||
|
||||
#RBAC FUNCTIONALITIES MUST BE ENABLED TO USE THIS
|
||||
# List all role definitions for MongoDB within an Azure Cosmos DB account
|
||||
az cosmosdb mongodb role definition list --account-name <AccountName> --resource-group <ResourceGroupName>
|
||||
# List all user definitions for MongoDB within an Azure Cosmos DB account
|
||||
az cosmosdb mongodb user definition list --account-name <AccountName> --resource-group <ResourceGroupName>
|
||||
|
||||
## MongoDB (vCore)
|
||||
# Install az cli extension
|
||||
az extension add --name cosmosdb-preview
|
||||
# List all MongoDB databases in a specified Azure Cosmos DB account
|
||||
az cosmosdb mongocluster list
|
||||
az cosmosdb mongocluster show --cluster-name <name> --resource-group <ResourceGroupName>
|
||||
# Get firewall rules
|
||||
az cosmosdb mongocluster firewall rule list --cluster-name <name> --resource-group <ResourceGroupName>
|
||||
# Connect to in
|
||||
brew install mongosh
|
||||
mongosh "mongodb://<username>:<password>@<account-name>.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retryWrites=false" --username <username> --password <password>
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
@@ -273,14 +299,16 @@ Get-AzCosmosDBMongoDBRoleDefinition -AccountName <account-name> -ResourceGroupNa
|
||||
|
||||
#### Conexión
|
||||
|
||||
Aquí la contraseña que puedes encontrar con las claves o con el método descrito en la sección de privesc.
|
||||
El tipo RU MongoDB en CosmoDB tiene 2 tipos de clave, Lectura-escritura (completa) y Solo lectura. Proporcionan el acceso indicado a todas las bases de datos, colecciones y datos dentro de la cuenta de Cosmos DB.
|
||||
Para la contraseña, puedes usar las claves o el método descrito en la sección de privesc.
|
||||
```python
|
||||
from pymongo import MongoClient
|
||||
|
||||
# Updated connection string with retryWrites=false
|
||||
connection_string = "mongodb://<account-name>.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retryWrites=false"
|
||||
|
||||
# Create the client
|
||||
# Create the client. The password and username is a custom one if the type is "vCore cluster".
|
||||
# In case that is a Request unit (RU) the username is the account name and the password is the key of the cosomosDB account.
|
||||
client = MongoClient(connection_string, username="<username>", password="<password>")
|
||||
|
||||
# Access the database
|
||||
@@ -306,6 +334,10 @@ document = {
|
||||
result = collection.insert_one(document)
|
||||
print(f"Inserted document with ID: {result.inserted_id}")
|
||||
```
|
||||
O usando un usuario dentro del mongo:
|
||||
```bash
|
||||
mongosh "mongodb://<myUser>:<mySecurePassword>@<account_name>.mongo.cosmos.azure.com:10255/<mymongodatabase>?ssl=true&replicaSet=globaldb&retrywrites=false"
|
||||
```
|
||||
## Referencias
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api](https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api)
|
||||
|
||||
@@ -10,13 +10,10 @@ Logic Apps proporciona un diseñador visual para crear flujos de trabajo con una
|
||||
|
||||
Al crear una Logic App, debes crear o vincular una cuenta de almacenamiento externa que almacene el estado del flujo de trabajo, el historial de ejecución y los artefactos. Este almacenamiento se puede configurar con ajustes de diagnóstico para monitoreo y se puede asegurar con restricciones de acceso a la red o integrarse en una red virtual para controlar el tráfico entrante y saliente.
|
||||
|
||||
### Identidades Administradas
|
||||
Logic Apps tiene una **identidad administrada asignada por el sistema** vinculada a su ciclo de vida. Cuando está habilitada, recibe un ID de Objeto (principal) único que se puede usar con Azure RBAC para otorgar los permisos necesarios para acceder a otros servicios de Azure de manera segura. Esto elimina la necesidad de almacenar credenciales en el código porque la identidad se autentica a través de Microsoft Entra ID. Además, también puedes usar **identidades administradas asignadas por el usuario**, que se pueden compartir entre múltiples recursos. Estas identidades permiten que los flujos de trabajo y Logic Apps interactúen de manera segura con sistemas externos, asegurando que los controles de acceso y permisos necesarios se gestionen de manera centralizada a través del marco de seguridad de Azure.
|
||||
|
||||
### Ejemplos
|
||||
|
||||
- **Automatización de Pipelines de Datos**: Logic Apps puede automatizar **procesos de transferencia y transformación de datos** en combinación con Azure Data Factory. Esto es útil para crear pipelines de datos escalables y confiables que mueven y transforman datos entre varios almacenes de datos, como Azure SQL Database y Azure Blob Storage, ayudando en operaciones de análisis e inteligencia empresarial.
|
||||
- **Integración con Azure Functions**: Logic Apps puede trabajar junto con Azure Functions para desarrollar **aplicaciones sofisticadas impulsadas por eventos que escalan según sea necesario** e integrarse sin problemas con otros servicios de Azure. Un caso de uso de ejemplo es usar una Logic App para activar una Azure Function en respuesta a ciertos eventos, como cambios en una cuenta de almacenamiento de Azure, permitiendo un procesamiento de datos dinámico.
|
||||
- **Integración con Azure Functions**: Logic Apps puede trabajar junto con Azure Functions para desarrollar **aplicaciones sofisticadas impulsadas por eventos que escalan según sea necesario** e integrarse sin problemas con otros servicios de Azure. Un caso de uso de ejemplo es utilizar una Logic App para activar una Azure Function en respuesta a ciertos eventos, como cambios en una cuenta de Azure Storage, permitiendo un procesamiento de datos dinámico.
|
||||
|
||||
### Visualizar una LogicAPP
|
||||
|
||||
@@ -28,7 +25,7 @@ o verificar el código en la sección de "**vista de código de la Logic app**".
|
||||
|
||||
### Protección SSRF
|
||||
|
||||
Incluso si encuentras la **Logic App vulnerable a SSRF**, no podrás acceder a las credenciales desde los metadatos ya que Logic Apps no lo permite.
|
||||
Incluso si encuentras la **Logic App vulnerable a SSRF**, no podrás acceder a las credenciales de los metadatos ya que Logic Apps no lo permite.
|
||||
|
||||
Por ejemplo, algo como esto no devolverá el token:
|
||||
```bash
|
||||
@@ -40,15 +37,66 @@ curl -XPOST 'https://prod-44.westus.logic.azure.com:443/workflows/2d8de4be6e9741
|
||||
Hay varias opciones de alojamiento:
|
||||
|
||||
* **Consumo**
|
||||
- **Multi-tenant**: proporciona recursos de computación compartidos, opera en la nube pública y sigue un modelo de precios por operación. Esto es ideal para cargas de trabajo ligeras y rentables.
|
||||
- **Multi-tenant**: proporciona recursos de computación compartidos, opera en la nube pública y sigue un modelo de precios por operación. Esto es ideal para cargas de trabajo ligeras y rentables. Esto despliega un "Single Workflow".
|
||||
* **Estándar**
|
||||
- **Workflow Service Plan**: recursos de computación dedicados con integración de VNET para redes y cargos por instancia de plan de servicio de flujo de trabajo. Es adecuado para cargas de trabajo más exigentes que requieren un mayor control.
|
||||
- **App Service Environment V3** recursos de computación dedicados con aislamiento completo y escalabilidad. También se integra con VNET para redes y utiliza un modelo de precios basado en instancias de App Service dentro del entorno. Esto es ideal para aplicaciones a escala empresarial que necesitan un alto aislamiento.
|
||||
- **Híbrido** diseñado para procesamiento local y soporte multi-nube. Permite recursos de computación gestionados por el cliente con acceso a la red local y utiliza Kubernetes Event-Driven Autoscaling (KEDA).
|
||||
- **Workflow Service Plan**: recursos de computación dedicados con integración de VNET para redes y cobra por instancia de plan de servicio de flujo de trabajo. Es adecuado para cargas de trabajo más exigentes que requieren un mayor control.
|
||||
- **App Service Environment V3** recursos de computación dedicados con aislamiento completo y escalabilidad. También se integra con VNET para redes y utiliza un modelo de precios basado en instancias de App Service dentro del entorno.
|
||||
- **Híbrido** diseñado para procesamiento local y soporte multi-nube. Permite recursos de computación gestionados por el cliente con acceso a la red local y utiliza Kubernetes Event-Driven Autoscaling (KEDA). Se basa en un entorno de aplicación de contenedor conectado.
|
||||
|
||||
### Flujos de trabajo
|
||||
### Características clave
|
||||
- **Almacenamiento**: Logic Apps requieren una cuenta de Azure Storage externa para almacenar el estado del flujo de trabajo, el historial de ejecución… y debe estar en el mismo grupo de recursos que la Logic App.
|
||||
- **Redes y Seguridad**: Logic Apps se pueden configurar con acceso público o privado. Por defecto, la aplicación está abierta a Internet, pero se puede integrar con una Red Virtual de Azure para conectividad aislada.
|
||||
- **Application Insights**: La gestión del rendimiento de la aplicación (APM) a través de Azure Monitor Application Insights se puede habilitar para rastrear el rendimiento, detectar anomalías y proporcionar análisis.
|
||||
- **Control de acceso**: Las Logic Apps admiten identidades gestionadas por el sistema e identidades gestionadas por el usuario.
|
||||
|
||||
Los flujos de trabajo en Azure Logic Apps son los procesos automatizados centrales que orquestan acciones a través de varios servicios. Un flujo de trabajo comienza con un desencadenador—un evento o programación—y luego ejecuta una serie de acciones, como llamar a APIs, procesar datos o interactuar con otros servicios de Azure. Los flujos de trabajo se pueden definir visualmente utilizando un diseñador o a través de código (definiciones JSON) y se gestionan a través de comandos como az logic workflow create, az logic workflow show y az logic workflow update. También admiten la gestión de identidades (a través del subgrupo de identidad) para gestionar de manera segura los permisos y las integraciones con recursos externos.
|
||||
### Flujos de trabajo "Únicos"
|
||||
|
||||
Un **flujo de trabajo** es una secuencia estructurada de pasos o tareas automatizadas que ejecutan un proceso u objetivo específico. Define cómo interactúan diferentes acciones, condiciones y decisiones para lograr un resultado deseado, optimizando las operaciones y reduciendo el esfuerzo manual. Los flujos de trabajo pueden integrar múltiples sistemas, desencadenar eventos y reglas, asegurando consistencia y eficiencia en los procesos.
|
||||
|
||||
Azure Logic Apps ofrece la funcionalidad de **crear un flujo de trabajo único sin la necesidad de una Logic App** en sí.
|
||||
|
||||
Cada flujo de trabajo tiene diferentes **disparadores**. Estos disparadores son los pasos que sigue el flujo de trabajo. Cada disparador tiene sus parámetros que pueden variar dependiendo del tipo de disparador:
|
||||
- Nombre de conexión
|
||||
- **Tipo de autenticación** que puede ser, Clave de acceso, Microsoft Entra ID, autenticación de principal de servicio integrado e Identidad gestionada de Logic Apps.
|
||||
|
||||
Los disparadores también tienen varias configuraciones:
|
||||
- Validación de esquema: Asegura que los datos entrantes sigan una estructura predefinida.
|
||||
- Control de concurrencia: Limita el número de ejecuciones paralelas.
|
||||
- Condiciones de disparador: condiciones que deben cumplirse antes de que se active el disparador.
|
||||
- Redes: Configura el tamaño de los fragmentos para la transferencia de datos y permite suprimir los encabezados del flujo de trabajo en las respuestas.
|
||||
- **Seguridad**: Habilita **Entradas/Salidas Seguras para ocultar** datos sensibles en los registros y las salidas.
|
||||
|
||||
**Configuraciones y Conexiones API:**
|
||||
|
||||
Un flujo de trabajo tiene diferentes configuraciones como:
|
||||
- Direcciones IP entrantes permitidas: Esta configuración te permite restringir quién puede activar o iniciar tu Logic App. Las opciones son Cualquier IP, Solo otras Logic Apps y Rangos de IP específicos.
|
||||
- Cuenta de integración: Aquí, puedes vincular tu Logic App a una Cuenta de Integración.
|
||||
- Alto rendimiento: Esta configuración permite que tu Logic App maneje más solicitudes rápidamente.
|
||||
- Retención del historial de ejecución: por cuánto tiempo se mantiene el historial de las ejecuciones de tu Logic App.
|
||||
|
||||
Puedes ver las diferentes conexiones API que tiene el flujo de trabajo. Dentro de cada una de estas conexiones tienen diferentes propiedades y la posibilidad de editar la conexión API donde se puede cambiar el tipo de autenticación.
|
||||
|
||||
**Historial y Versiones:**
|
||||
Tiene la opción de acceder al **historial** de las diferentes ejecuciones, muestra, Configuraciones, Salida, Parámetros y el Código.
|
||||
|
||||
También tiene la opción de acceder a diferentes **versiones** del flujo de trabajo, donde puedes revisar el código y cambiar el flujo de trabajo presente por una versión anterior de este.
|
||||
|
||||
**Autorización:**
|
||||
Azure Logic Apps admite **políticas de autorización** con Entra ID para asegurar los disparadores basados en solicitudes al requerir un token de acceso válido. Este token debe incluir reclamos específicos:
|
||||
- Emisor (iss) para verificar el proveedor de identidad
|
||||
- Audiencia (aud) para asegurar que el token está destinado a la Logic App
|
||||
- Sujeto (sub) para identificar al llamador
|
||||
- ID de JWT (identificador de token web JSON)
|
||||
- Reclamo personalizado
|
||||
|
||||
Cuando se recibe una solicitud, Logic Apps valida el token contra estos reclamos y permite la ejecución solo si coinciden con la política configurada. Esto se puede usar para permitir que otro inquilino active el flujo de trabajo o denegar el disparador de otras fuentes, por ejemplo, solo permitiendo el disparador si proviene de https://login.microsoftonline.com/.
|
||||
|
||||
**Claves de acceso:**
|
||||
Cuando guardas un disparador basado en solicitudes por primera vez, Logic Apps crea automáticamente un endpoint único con una firma SAS (creada a partir de la Clave de acceso) que otorga permiso para llamar al flujo de trabajo. Esta firma SAS está incrustada en la URL del disparador. Esta clave se puede regenerar y dará una nueva firma SAS, pero las claves no se pueden listar.
|
||||
|
||||
La URL para invocarlo con la Clave de acceso:
|
||||
|
||||
https://<region>.logic.azure.com:443/workflows/<workflow-id>/triggers/<trigger-name>/paths/invoke?api-version=<api-version>&sp=%2Ftriggers%2F<trigger-name>%2Frun&sv=<version>&sig=<signature>
|
||||
|
||||
### Enumeración
|
||||
|
||||
@@ -102,11 +150,6 @@ az rest \
|
||||
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/versions/{versionName}?api-version=2016-06-01" \
|
||||
--headers "Content-Type=application/json"
|
||||
|
||||
az rest \
|
||||
--method GET \
|
||||
--uri "https://examplelogicapp1994.scm.azurewebsites.net/api/functions/admin/download?includeCsproj=true&includeAppSettings=true" \
|
||||
--headers "Content-Type=application/json"
|
||||
|
||||
# List all Logic Apps in the specified resource group
|
||||
az logicapp list --resource-group <ResourceGroupName>
|
||||
|
||||
@@ -115,6 +158,20 @@ az logicapp show --name <LogicAppName> --resource-group <ResourceGroupName>
|
||||
|
||||
# List all application settings for a specific Logic App
|
||||
az logicapp config appsettings list --name <LogicAppName> --resource-group <ResourceGroupName>
|
||||
|
||||
# Get a Parameters from an Azure App Service using Azure REST API
|
||||
az rest --method GET --url "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{app-service-name}/hostruntime/admin/vfs/parameters.json?api-version=2018-11-01&relativepath=1"
|
||||
|
||||
# Get webhook-triggered workflows from an Azure Logic App using Azure REST API
|
||||
az rest --method GET --url "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{logic-app-name}/hostruntime/runtime/webhooks/workflow/api/management/workflows?api-version=2018-11-01"
|
||||
|
||||
# Get workflows from an Azure Logic App using Azure REST API
|
||||
az rest --method GET --url "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{logic-app-name}/workflows?api-version=2018-11-01"
|
||||
|
||||
# Get details of a specific workflow including its connections and parameters in Azure Logic Apps using Azure REST API
|
||||
az rest --method GET --uri "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{logic-app-name}/workflows/{workflow-name}?api-version=2018-11-01&\$expand=connections.json,parameters.json"
|
||||
|
||||
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
@@ -146,6 +203,8 @@ Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<Lo
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
|
||||
|
||||
### Cuentas de Integración
|
||||
**Cuentas de Integración**, son una característica de Azure Logic Apps. Las Cuentas de Integración se utilizan para facilitar integraciones a nivel empresarial al habilitar capacidades avanzadas de B2B, como EDI, AS2 y gestión de esquemas XML. Las Cuentas de Integración son un contenedor en Azure que almacena los siguientes artefactos utilizados para Logic Apps:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user