# Az - API Management

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

## Basiese Inligting

Azure API Management (APIM) is 'n volledig bestuurde diens wat 'n **eenheidlike platform bied vir die publisering, beveiliging, transformasie, bestuur en monitering van APIs**. Dit stel organisasies in staat om hul **API-strategie te sentraliseer** en te verseker dat bestuur, prestasie en sekuriteit konsekwent oor al hul dienste toegepas word. Deur as 'n abstraksielaag tussen backend-dienste en API-konsumente te dien, vereenvoudig APIM integrasie en verbeter dit instandhouding, terwyl dit noodsaaklike operasionele en sekuriteitsfunksies verskaf.

## Kernkonsepte

**The API Gateway** dien as die enkele toegangspunt vir alle API-verkeer en hanteer take soos die routering van versoeke na backend-dienste, afdwing van rate limits, kaslegging van antwoorde, en bestuur van verifikasie en magtiging. Hierdie gateway word volledig deur Azure aangebied en bestuur, wat hoë beskikbaarheid en skaalbaarheid verseker.

**The Developer Portal** bied 'n selfdiens-omgewing waar API-konsumente beskikbare APIs kan ontdek, dokumentasie kan lees en eindpunte kan toets. Dit help om aan boord koms te stroomlyn deur interaktiewe gereedskap en toegang tot intekeninginligting te bied.

**The Management Portal (Management Plane)** word deur administrateurs gebruik om die APIM-diens te konfigureer en in stand te hou. Van hier af kan gebruikers APIs en operasies definieer, toegangskontrole konfigureer, beleide toepas, gebruikers bestuur en APIs in produkte organiseer. Hierdie portaal sentrumiseer administrasie en verseker konsekwente API-governance.

## Verifikasie en Magtiging

Azure API Management ondersteun verskeie **authenticatie-meganismes** om API-toegang te beveilig. Dit sluit in **subscription keys**, **OAuth 2.0 tokens**, en **client certificates**. APIM integreer ook inheemse met **Microsoft Entra ID**, wat **enterprise-level identity management** en **secure access** tot beide APIs en backend-dienste moontlik maak.

## Beleide

Beleide in APIM laat administrateurs toe om **versoek- en antwoordverwerking** op verskeie granulariteite aan te pas, insluitend vlakke soos die **service**, **API**, **operation**, of **product**. Deur beleide is dit moontlik om **JWT token validation** af te dwing, **XML of JSON payloads te transformeer**, **rate limiting toe te pas**, **oproepe te beperk volgens IP-adres**, of **teen backend-dienste te verifieer met behulp van managed identities**. Beleide is **uiters buigsaam** en vorm een van die **kernsterktes** van die API Management-platform, wat **fynkorrelbeheer oor runtime-gedrag** moontlik maak sonder om backend-kode te verander.

## Named Values

Die diens bied 'n meganisme genaamd **Named Values**, wat toelaat om **konfigurasie-inligting** soos **geheime**, **API keys**, of ander waardes wat deur beleide benodig word, te stoor.

Hierdie waardes kan direk binne APIM gestoor word of veilig vanaf **Azure Key Vault** verwys word. Named Values bevorder **veilige en gesentraliseerde bestuur** van konfigurasiedata en vereenvoudig beleidsskryf deur **herbruikbare verwysings** in plaas van hardgekodeerde waardes toe te laat.

## Netwerk- en Sekuriteitsintegrasie

Azure API Management integreer naatloos met **virtual network environments**, wat **privaat en veilige konnektiwiteit** na backend-stelsels moontlik maak.

Wanneer dit binne 'n **Virtual Network (VNet)** ontplooi is, kan APIM **interne dienste** bereik sonder om dit publiek bloot te stel. Die diens maak dit ook moontlik om **custom certificates** te konfigureer om **mutual TLS authentication** met backend-dienste te ondersteun, wat sekuriteit verbeter in scenario's waar **sterke identity validation** vereis word.

Hierdie **netwerkfunksies** maak APIM geskik vir beide **cloud-native** en **hybrid architectures**.

### Opnoem

Om die API Management-diens op te noem:
```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}}
