# Az - Container Instances

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

## 基本情報

**Azure Container Instances (ACI)** は、基盤となるインフラストラクチャを管理することなく、個々のコンテナを迅速に実行できるサーバーレスコンテナサービスです。 **Azure Container Apps (ACA)** は、イベント駆動のオートスケーリング、組み込みのDapr統合、複雑なオーケストレーションシナリオのサポートなどの機能を備えたマイクロサービスやWebアプリを実行するための完全管理型環境を提供します。 **Container App Jobs** は、有限の期間実行されてから終了する短命のバッチまたはスケジュールされたタスクを実行するために設計されたACA内の特別な機能です。

違い:
- ACIは、最小限のオーケストレーションが必要な**シンプル**なスタンドアロンコンテナワークロードに最適です。
- ACAは、オートスケーリングやサービスディスカバリなどの高度な機能を備えたスケーラブルで相互接続されたマイクロサービスの構築に最適です。
- Container App Jobsは、**一回限りまたはスケジュールされたタスク**に焦点を当てており、ACA環境内でバックグラウンドまたはバッチジョブを実行するための効率的な方法を提供します。

### 設定

**ACI**の特別なオプション:
- ネットワーキングに関しては、次の3つのオプションのいずれかを選択できます:
- **Public** (デフォルト)
- **Private** (VNetからのみアクセス可能)
- **None** (ネットワークアクセスなし)

**ACA**の特別なオプション:
- コンテナへの**トラフィックを制限**することができ、コンテナアプリ環境内に留めるか、公開のままにすることができます。
- 認証のために**外部アイデンティティプロバイダー**（Microsoft、Facebook、Google、Twitter）を使用することができます。
- **アプリのシークレットを保存**することが可能です（アプリ内のクリアテキストまたはMIにアクセス権を付与したボールトへのリンクとして）。
- **アプリのリビジョンとレプリカを持つ**ことができます。
- コンテナを使用する代わりに特定の**ソースコードまたはアーティファクト**からデプロイすることができます。ソースコードの場合、GitHubへのアクセスが必要です。アーティファクトの場合、アプリを作成した後にアップロードすることが可能です。

**ジョブ**の特別なオプション:
- トリガータイプは**手動、スケジュール、またはイベントベース**（キューにメッセージが到着するなど）にすることができます。

共通オプション:
- コンテナを作成するために、パブリックイメージ、Azure Container Registryからのコンテナイメージ、または外部リポジトリを使用することができ、これには**アクセスするためのパスワードの設定が必要**な場合があります。
- これは、コンテナの設定に機密情報が含まれる可能性があることを意味します。
- また、次のような一般的なDocker設定を構成することも可能です:
- **環境変数**（機密情報を確認）
- **ボリューム**（Azure Filesからも）
- **公開するポート**
- **CPUおよびメモリ制限**
- **再起動ポリシー**
- **特権として実行**
- コンテナの**コマンドラインを上書きして実行し、引数を指定**（既存のコンテナでも変更可能）
- ...

## 列挙

> [!WARNING]
> 列挙する際には、**環境変数**、**ネットワークの詳細**、または**管理されたアイデンティティ**などの機密設定が明らかになる可能性があります。
```bash
# ACI
## List all container instances in the subscription
az container list

## Show detailed information about a specific container instance
az container show --name <container-name> --resource-group <res-group>

## Fetch logs from a container
az container logs --name <container-name> --resource-group <res-group>

## Execute a command in a running container and get the output
az container exec --name <container-name> --resource-group <res-group> --exec-command "/bin/sh" # Get a shell

## Get yaml configuration of the container group
az container export  --name <container-name> --resource-group <res-group> --file </path/local/file.yml>

# ACA
## List all container apps in the subscription
az containerapp list

## Show detailed information about a specific container app
az containerapp show --name <app-name> --resource-group <res-group>

## List app environments
az containerapp env list --resource-group <res-group>

## Fetch logs from a container app
az containerapp logs show --name <app-name> --resource-group <res-group>

## Get configured secrets
az containerapp secret list --name <app-name> --resource-group <res-group>
### Get value
az containerapp secret show --name <app-name> --resource-group <res-group> --secret-name <secret-name>

## Get authentication options
az containerapp auth  show --name <app-name> --resource-group <res-group>

## Get a shell
az containerapp exec --name <app-name> --resource-group <res-group> --command "sh"

## Get debugging shell
az containerapp debug --name <app-name> --resource-group <res-group>

# Jobs
## List all container apps jobs in a resource group
az containerapp job list --resource-group <res-group>

## Show detailed information about a specific container app job
az containerapp job show --name <job-name> --resource-group <res-group>

## Fetch logs from a container app job
az containerapp job logs show --name <job-name> --resource-group <res-group>

## Fetch executions from a container app job
az containerapp job execution list --name <job-name> --resource-group <res-group>
az containerapp job execution show --name <job-name> --resource-group <res-group> --job-execution-name <job-execution>

## Start a job execution (for manual jobs)
az containerapp job start --name <job-name> --resource-group <res-group>
```
## 権限昇格とポストエクスプロイト

{{#ref}}
../az-privilege-escalation/az-container-instances-apps-jobs-privesc.md
{{#endref}}

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