# Az - API Management

{{#include ../../../banners/hacktricks-training.md}}

## Informazioni di base

Azure API Management (APIM) è un servizio completamente gestito che offre una **piattaforma unificata per pubblicare, proteggere, trasformare, gestire e monitorare le API**. Consente alle organizzazioni di **centralizzare la propria strategia API** e garantire governance, prestazioni e sicurezza coerenti su tutti i servizi. Funzionando come livello di astrazione tra i servizi backend e i consumatori delle API, APIM semplifica l'integrazione e migliora la manutenibilità fornendo al contempo funzionalità operative e di sicurezza essenziali.

## Concetti principali

**The API Gateway** funge da punto di ingresso unico per tutto il traffico API, gestendo funzioni come il routing delle richieste ai servizi backend, l'applicazione di limiti di velocità, la memorizzazione nella cache delle risposte e la gestione di autenticazione e autorizzazione. Questo gateway è completamente ospitato e gestito da Azure, garantendo alta disponibilità e scalabilità.

**The Developer Portal** fornisce un ambiente self-service in cui i consumatori delle API possono scoprire le API disponibili, leggere la documentazione e testare gli endpoint. Aiuta a semplificare l'onboarding offrendo strumenti interattivi e accesso alle informazioni sulle sottoscrizioni.

**The Management Portal (Management Plane)** viene utilizzato dagli amministratori per configurare e mantenere il servizio APIM. Da qui gli utenti possono definire API e operazioni, configurare il controllo degli accessi, applicare policies, gestire utenti e organizzare le API in prodotti. Questo portale centralizza l'amministrazione e garantisce una governance API coerente.


## Autenticazione e autorizzazione

Azure API Management supporta diversi **meccanismi di autenticazione** per proteggere l'accesso alle API. Questi includono **subscription keys**, **OAuth 2.0 tokens** e **client certificates**. APIM si integra inoltre nativamente con **Microsoft Entra ID**, consentendo **gestione delle identità a livello enterprise** e **accesso sicuro** sia alle API che ai servizi backend.

## Politiche

Le policy in APIM permettono agli amministratori di personalizzare il **processing di richieste e risposte** a diversi livelli di granularità, incluso il livello **service**, **API**, **operation** o **product**. Tramite le policy è possibile applicare la **validazione dei token JWT**, **trasformare payload XML o JSON**, **applicare il rate limiting**, **limitare le chiamate per indirizzo IP**, o **autenticarsi verso i servizi backend usando managed identities**. Le policy sono **altamente flessibili** e costituiscono uno dei **punti di forza** della piattaforma API Management, permettendo un **controllo granulare del comportamento a runtime** senza modificare il codice backend.

## Named Values

Il servizio fornisce un meccanismo chiamato **Named Values**, che consente di memorizzare **informazioni di configurazione** come **secrets**, **API keys** o altri valori necessari per le policies.

Questi valori possono essere memorizzati direttamente all'interno di APIM o referenziati in modo sicuro da **Azure Key Vault**. I Named Values promuovono una **gestione sicura e centralizzata** dei dati di configurazione e semplificano la scrittura delle policies permettendo **riferimenti riutilizzabili** anziché valori hardcoded.

## Integrazione di rete e sicurezza

Azure API Management si integra perfettamente con **ambienti di virtual network**, permettendo connettività **privata e sicura** ai sistemi backend.

Quando distribuito all'interno di una **Virtual Network (VNet)**, APIM può accedere a **servizi interni** senza esporli pubblicamente. Il servizio consente inoltre la configurazione di **custom certificates** per supportare **mutual TLS authentication** con i servizi backend, migliorando la sicurezza in scenari dove è richiesta una **forte validazione dell'identità**.

Queste **funzionalità di rete** rendono APIM adatto sia ad architetture **cloud-native** sia **ibride**.


### Enumerare

Per enumerare il servizio API Management:
```bash
# Lists all Named Values configured in the Azure API Management instance
az apim nv list --resource-group <resource-group> --service-name <service-name>

# Retrieves all policies applied at the API level in raw XML format
az rest --method GET \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/apis/<api-id>/policies/?api-version=2024-05-01&format=rawxml"

# Retrieves the effective policy for a specific API in raw XML format
az rest --method GET \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/apis/<api-id>/policies/policy?api-version=2024-05-01&format=rawxml"

# Gets the configuration details of the APIM service instance
az rest --method GET \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<apim>?api-version=2024-05-01"

# Lists all backend services registered in the APIM instance
az rest --method GET \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/backends?api-version=2024-05-01"

# Retrieves details of a specific backend service
az rest --method GET \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/backends/<backend-id>?api-version=2024-05-01"

# Gets general information about the APIM service
az rest --method GET \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>?api-version=2024-05-01"

# Calls an exposed API endpoint through the APIM gateway
curl https://<apim>.azure-api.net/<api-path>

```
{{#include ../../../banners/hacktricks-training.md}}
