# Az - API Management

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

## Basic Information

Azure API Management (APIM) は、API の公開、保護、変換、管理、監視のための **統合プラットフォームを提供するフルマネージドサービス** です。組織が **API 戦略を一元化** し、すべてのサービスで一貫したガバナンス、パフォーマンス、セキュリティを確保できるようにします。APIM はバックエンドサービスと API 消費者の間に抽象化レイヤーとして機能することで、統合を簡素化し、保守性を向上させながら、重要な運用およびセキュリティ機能を提供します。

## Core Concepts

**The API Gateway** はすべての API トラフィックの単一エントリポイントとして機能し、バックエンドサービスへのリクエストのルーティング、レート制限の適用、レスポンスのキャッシュ、認証および認可の管理などの機能を処理します。このゲートウェイは Azure によってフルホストおよび管理され、高可用性とスケーラビリティを保証します。

**The Developer Portal** は API 消費者が利用可能な API を発見し、ドキュメントを読み、エンドポイントをテストできるセルフサービス環境を提供します。インタラクティブなツールやサブスクリプション情報へのアクセスを提供することで、オンボーディングを効率化します。

**The Management Portal (Management Plane)** は管理者が APIM サービスを構成および維持するために使用します。ここからユーザーは API やオペレーションを定義し、アクセス制御を構成し、ポリシーを適用し、ユーザーを管理し、API を製品（products）に整理できます。このポータルは管理を一元化し、一貫した API ガバナンスを確保します。

## Authentication and Authorization

Azure API Management は API アクセスを保護するためのいくつかの **authentication mechanisms** をサポートします。これには **subscription keys**、**OAuth 2.0 tokens**、および **client certificates** が含まれます。APIM は **Microsoft Entra ID** とネイティブに統合されており、**エンタープライズレベルのアイデンティティ管理** と API およびバックエンドサービスへの **安全なアクセス** を可能にします。

## Policies

APIM のポリシーは、管理者が **request and response processing** をサービス、API、operation、または product レベルなどさまざまな粒度でカスタマイズできるようにします。ポリシーを通じて、**JWT token validation** を強制したり、XML や JSON ペイロードを変換したり、レート制限を適用したり、IP アドレスによる呼び出しを制限したり、**managed identities** を使用してバックエンドサービスに対して認証したりすることが可能です。ポリシーは **非常に柔軟** であり、API Management プラットフォームの **コアな強み** の一つで、バックエンドコードを変更することなく **ランタイム動作を細かく制御** できます。

## Named Values

このサービスは **Named Values** と呼ばれる仕組みを提供しており、**secrets**、**API keys**、またはポリシーで必要とされるその他の値などの **構成情報** を格納できます。

これらの値は APIM 内部に直接格納することも、**Azure Key Vault** から安全に参照することもできます。Named Values は構成データの **安全で集中化された管理** を促進し、ハードコーディングされた値の代わりに **再利用可能な参照** を許可することでポリシー作成を簡素化します。

## Networking and Security Integration

Azure API Management は **virtual network environments** とシームレスに統合し、バックエンドシステムへの **プライベートで安全な接続** を可能にします。

**Virtual Network (VNet)** 内にデプロイされると、APIM は内部サービスに対してそれらを公開することなくアクセスできます。サービスはまた、バックエンドサービスとの **mutual TLS authentication** をサポートするための **custom certificates** の構成を許可しており、**強力なアイデンティティ検証** が必要なシナリオでセキュリティを向上させます。

これらの **networking features** により、APIM は **cloud-native** および **hybrid architectures** の両方に適しています。

### Enumerate

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}}
