# Az - AI Foundry, AI Hubs, Azure OpenAI & AI Search

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

## Why These Services Matter

Azure AI Foundry は Microsoft の GenAI アプリケーション構築のための包括的プラットフォームです。ハブは AI projects、Azure ML workspaces、compute、data stores、registries、prompt flow assets、および **Azure OpenAI** や **Azure AI Search** のような下流サービスへの接続を集約します。各コンポーネントは一般的に以下を公開します:

- **Long-lived API keys** (OpenAI, Search, data connectors) が Azure Key Vault や workspace connection オブジェクト内に複製される。
- **Managed Identities (MI)** がデプロイ、ベクターインデクシングジョブ、モデル評価パイプライン、Git/GitHub Enterprise 操作を制御する。
- **Cross-service links**（storage accounts、container registries、Application Insights、Log Analytics）が hub/project の権限を継承する。
- **Multi-tenant connectors**（Hugging Face、Azure Data Lake、Event Hubs）が上流の資格情報やトークンを leak する可能性がある。

単一の hub/project が侵害されると、下流の managed identities、compute クラスター、オンラインエンドポイント、および prompt flows によって参照される検索インデックスや OpenAI デプロイメントの制御を意味する可能性があります。

## Core Components & Security Surface

- **AI Hub (`Microsoft.MachineLearningServices/hubs`)**: リージョン、managed network、system datastores、デフォルトの Key Vault、Container Registry、Log Analytics、hub レベルのアイデンティティを定義するトップレベルのオブジェクト。hub が侵害されると、攻撃者は新しい projects、registries、または user-assigned identities を挿入できる。
- **AI Projects (`Microsoft.MachineLearningServices/workspaces`)**: prompt flows、data assets、environments、component pipelines、オンライン/バッチエンドポイントをホストする。Projects は hub のリソースを継承し、独自の storage、kv、MI を上書きできる。各 workspace は `/connections` と `/datastores` の下にシークレットを保存する。
- **Managed Compute & Endpoints**: managed online endpoints、batch endpoints、serverless endpoints、AKS/ACI デプロイ、オンデマンド推論サーバーを含む。これらのランタイム内で Azure Instance Metadata Service (IMDS) から取得されるトークンは通常 workspace/project の MI ロール割り当て（一般的に `Contributor` や `Owner`）を保持する。
- **AI Registries & Model Catalog**: モデル、environments、components、data、評価結果のリージョン単位での共有を許可する。Registries は自動的に GitHub/Azure DevOps と同期できるため、PATs が connection 定義内に埋め込まれる場合がある。
- **Azure OpenAI (`Microsoft.CognitiveServices/accounts` with `kind=OpenAI`)**: GPT 系モデルを提供する。アクセスはロール割り当て + admin/query keys で制御される。多くの Foundry prompt flows は生成されたキーをシークレットや環境変数として compute ジョブからアクセス可能な状態で保持している。
- **Azure AI Search (`Microsoft.Search/searchServices`)**: ベクトル/インデックスストレージは通常プロジェクト接続内に保存された Search admin key で接続される。インデックスデータには機密性の高い埋め込み、取得されたドキュメント、または生のトレーニングコーパスが含まれる可能性がある。

## Security-Relevant Architecture

### Managed Identities & Role Assignments

- AI hubs/projects は **system-assigned** または **user-assigned** identity を有効にできる。これらのアイデンティティは通常 storage accounts、key vaults、container registries、Azure OpenAI リソース、Azure AI Search services、Event Hubs、Cosmos DB、またはカスタム API に対するロールを持つ。
- Online endpoints は project MI を継承するか、デプロイごとに専用の user-assigned MI で上書きできる。
- Prompt Flow connections と Automated Agents は `DefaultAzureCredential` 経由でトークンを要求できる；compute からメタデータエンドポイントをキャプチャすると、横方向移動のためのトークンが得られる。

### Network Boundaries

- Hubs/projects は **`publicNetworkAccess`**、**private endpoints**、**Managed VNet** および **managedOutbound`** ルールをサポートする。誤設定された `allowInternetOutbound` や公開された scoring endpoints は直接的な exfiltration を許可する。
- Azure OpenAI と AI Search は **firewall rules**、**Private Endpoint Connections (PEC)**、**shared private link resources**、および `trustedClientCertificates` をサポートする。public access が有効な場合、これらのサービスはキーを知っている任意の送信元 IP からのリクエストを受け付ける。

### Data & Secret Stores

- デフォルトの hub/project デプロイメントは隠し managed リソースグループ内に **storage account**、**Azure Container Registry**、**Key Vault**、**Application Insights**、および **Log Analytics** workspace を作成する（パターン: `mlw-<workspace>-rg`）。
- Workspace の **datastores** は blob/data lake コンテナを参照し、SAS tokens、service principal secrets、または storage access keys を埋め込むことがある。
- Workspace の **connections**（Azure OpenAI、AI Search、Cognitive Services、Git、Hugging Face など）は資格情報を workspace Key Vault に保持し、connection を一覧表示すると管理プレーンを通じてそれらを表面化する（値は base64-encoded JSON）。
- **AI Search admin keys** はインデックス、skillsets、data sources への完全な読み書きアクセスを提供し、RAG システムに供給するドキュメントを取得できる。

### Monitoring & Supply Chain

- AI Foundry はコードや prompt flow assets のために GitHub/Azure DevOps 統合をサポートする。OAuth tokens や PATs は Key Vault + connection metadata に存在する。
- Model Catalog は Hugging Face アーティファクトをミラーする場合がある。`trust_remote_code=true` の場合、デプロイ時に任意の Python が実行される。
- Data/feature パイプラインは Application Insights や Log Analytics にログを出力し、connection strings を露出する。

## Enumeration with `az`
```bash
# Install the Azure ML / AI CLI extension (if missing)
az extension add --name ml

# Enumerate AI Hubs (workspaces with kind=hub) and inspect properties
az ml workspace list --filtered-kinds hub --resource-group <RG> --query "[].{name:name, location:location, rg:resourceGroup}" -o table
az resource show --name <HUB> --resource-group <RG> \
--resource-type Microsoft.MachineLearningServices/workspaces \
--query "{location:location, publicNetworkAccess:properties.publicNetworkAccess, identity:identity, managedResourceGroup:properties.managedResourceGroup}" -o jsonc

# Enumerate AI Projects (kind=project) under a hub or RG
az resource list --resource-type Microsoft.MachineLearningServices/workspaces --query "[].{name:name, rg:resourceGroup, location:location}" -o table
az ml workspace list --filtered-kinds project --resource-group <RG> \
--query "[?contains(properties.hubArmId, '/workspaces/<HUB>')].{name:name, rg:resourceGroup, location:location}"

# Show workspace level settings (managed identity, storage, key vault, container registry)
az ml workspace show --name <WS> --resource-group <RG> \
--query "{managedNetwork:properties.managedNetwork, storageAccount:properties.storageAccount, containerRegistry:properties.containerRegistry, keyVault:properties.keyVault, identity:identity}"

# List workspace connections (OpenAI, AI Search, Git, data sources)
az ml connection list --workspace-name <WS> --resource-group <RG> --populate-secrets -o table
az ml connection show --workspace-name <WS> --resource-group <RG> --name <CONNECTION>
# For REST (returns base64 encoded secrets)
az rest --method GET \
--url "https://management.azure.com/subscriptions/<SUB>/resourceGroups/<RG>/providers/Microsoft.MachineLearningServices/workspaces/<WS>/connections/<CONN>?api-version=2024-04-01"

# Enumerate datastores and extract credentials/SAS
az ml datastore list --workspace-name <WS> --resource-group <RG>
az ml datastore show --name <DATASTORE> --workspace-name <WS> --resource-group <RG>

# List managed online/batch endpoints and deployments (capture identity per deployment)
az ml online-endpoint list --workspace-name <WS> --resource-group <RG>
az ml online-endpoint show --name <ENDPOINT> --workspace-name <WS> --resource-group <RG>
az ml online-deployment show --name <DEPLOYMENT> --endpoint-name <ENDPOINT> --workspace-name <WS> --resource-group <RG> \
--query "{identity:identity, environment:properties.environmentId, codeConfiguration:properties.codeConfiguration}"

# Discover prompt flows, components, environments, data assets
az ml component list --workspace-name <WS> --resource-group <RG>
az ml data list --workspace-name <WS> --resource-group <RG> --type uri_folder
az ml environment list --workspace-name <WS> --resource-group <RG>
az ml job list --workspace-name <WS> --resource-group <RG> --type pipeline

# List hub/project managed identities and their role assignments
az identity list --resource-group <RG>
az role assignment list --assignee <MI-PRINCIPAL-ID> --all

# Azure OpenAI resources (filter kind==OpenAI)
az resource list --resource-type Microsoft.CognitiveServices/accounts \
--query "[?kind=='OpenAI'].{name:name, rg:resourceGroup, location:location}" -o table
az cognitiveservices account list --resource-group <RG> \
--query "[?kind=='OpenAI'].{name:name, location:location}" -o table
az cognitiveservices account show --name <AOAI-NAME> --resource-group <RG>
az cognitiveservices account keys list --name <AOAI-NAME> --resource-group <RG>
az cognitiveservices account deployment list --name <AOAI-NAME> --resource-group <RG>
az cognitiveservices account network-rule list --name <AOAI-NAME> --resource-group <RG>

# Azure AI Search services
az search service list --resource-group <RG>
az search service show --name <SEARCH-NAME> --resource-group <RG> \
--query "{sku:sku.name, publicNetworkAccess:properties.publicNetworkAccess, privateEndpoints:properties.privateEndpointConnections}"
az search admin-key show --service-name <SEARCH-NAME> --resource-group <RG>
az search query-key list --service-name <SEARCH-NAME> --resource-group <RG>
az search shared-private-link-resource list --service-name <SEARCH-NAME> --resource-group <RG>

# AI Search data-plane (requires admin key in header)
az rest --method GET \
--url "https://<SEARCH-NAME>.search.windows.net/indexes?api-version=2024-07-01" \
--headers "api-key=<ADMIN-KEY>"
az rest --method GET \
--url "https://<SEARCH-NAME>.search.windows.net/datasources?api-version=2024-07-01" \
--headers "api-key=<ADMIN-KEY>"
az rest --method GET \
--url "https://<SEARCH-NAME>.search.windows.net/indexers?api-version=2024-07-01" \
--headers "api-key=<ADMIN-KEY>"

# Linkage between workspaces and search / openAI (REST helper)
az rest --method GET \
--url "https://management.azure.com/subscriptions/<SUB>/resourceGroups/<RG>/providers/Microsoft.MachineLearningServices/workspaces/<WS>/connections?api-version=2024-04-01" \
--query "value[?properties.target=='AzureAiSearch' || properties.target=='AzureOpenAI']"
```
## アセスメント時に確認すべき点

- **Identity scope**: プロジェクトでは複数のサービスに紐づけられた強力な user-assigned identity を再利用することが多い。任意の managed compute から IMDS tokens を取得すると、その特権を継承する。
- **Connection objects**: Base64 ペイロードには secret とメタデータ（endpoint URL、API version）が含まれる。多くのチームはここに OpenAI + Search の admin keys を置きっぱなしにし、頻繁にローテーションしない。
- **Git & external source connectors**: PATs や OAuth refresh tokens は、pipelines や prompt flows を定義するコードへの push アクセスを許してしまう可能性がある。
- **Datastores & data assets**: 数ヶ月有効な SAS tokens を発行することがあり、data assets は顧客の PII、embeddings、または training corpora を指していることがある。
- **Managed Network overrides**: `allowInternetOutbound=true` や `publicNetworkAccess=Enabled` は、jobs/endpoints から秘密情報を外部へ持ち出すのを容易にする。
- **Hub-managed resource group**: storage account (`<workspace>storage`)、container registry、KV、Log Analytics を含む。ポータルが隠していてもその RG へのアクセスはしばしば完全な乗っ取りを意味する。

## References

- [Azure AI Foundry architecture](https://learn.microsoft.com/en-us/azure/ai-studio/concepts/ai-resources)
- [Azure Machine Learning CLI v2](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-configure-cli)
- [Azure OpenAI security controls](https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/network-security)
- [Azure AI Search security](https://learn.microsoft.com/en-us/azure/search/search-security-overview)

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