# Az - API Management

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

## Informazioni di base

Azure API Management (APIM) è un servizio fully managed che offre una **piattaforma unificata per pubblicare, proteggere, trasformare, gestire e monitorare le API**. Permette alle organizzazioni di **centralizzare la strategia API** e garantire governance, prestazioni e sicurezza coerenti attraverso tutti i loro servizi. Agendo come un livello di astrazione tra i servizi di backend e i consumatori di API, APIM semplifica l'integrazione e migliora la manutenibilità fornendo al contempo capacità operative e di sicurezza essenziali.

## Concetti principali

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

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

**Il Management Portal (Management Plane)** è utilizzato dagli amministratori per configurare e mantenere il servizio APIM. Da qui, gli utenti possono definire API e operation, configurare il controllo accessi, applicare policy, gestire utenti e organizzare le API in prodotti. Questo portale centralizza l'amministrazione e assicura 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, abilitando la gestione dell'identità a livello enterprise e l'accesso sicuro sia alle API sia ai servizi di backend.

## Policy

Le policy in APIM permettono agli amministratori di personalizzare l'elaborazione di request e response a vari livelli di granularità, inclusi il servizio, l'API, l'operation o il prodotto. Attraverso le policy è possibile far rispettare la validazione di JWT token, trasformare payload XML o JSON, applicare rate limiting, limitare le chiamate per indirizzo IP o autenticarsi verso i servizi di backend usando managed identities. Le policy sono altamente flessibili e costituiscono uno dei punti di forza della piattaforma API Management, permettendo un controllo granulare sul comportamento runtime senza modificare il codice di backend.

## Named Values

Il servizio fornisce un meccanismo chiamato **Named Values**, che consente di memorizzare informazioni di configurazione come segreti, API keys o altri valori richiesti dalle policy.

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 centralizzata e sicura dei dati di configurazione e semplificano la scrittura delle policy permettendo riferimenti riutilizzabili invece di valori hardcoded.

## Integrazione di rete e sicurezza

Azure API Management si integra perfettamente con gli ambienti di Virtual Network, consentendo connettività privata e sicura ai sistemi di backend.

Quando distribuito all'interno di una Virtual Network (VNet), APIM può accedere a servizi interni senza esporli pubblicamente. Il servizio permette inoltre la configurazione di certificati personalizzati per supportare l'autenticazione mutual TLS con i servizi di backend, migliorando la sicurezza in scenari in cui è richiesta una forte convalida dell'identità.

Queste funzionalità di networking rendono APIM adatto sia per 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}}
