# Az - Container Instances

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

## Basiese Inligting

**Azure Container Instances (ACI)** is 'n serverlose houerdiens wat jou toelaat om individuele houers vinnig te laat loop sonder om enige onderliggende infrastruktuur te bestuur. **Azure Container Apps (ACA)** brei dit uit deur 'n volledig bestuurde omgewing te bied vir die uitvoering van mikrodiens en webtoepassings met kenmerke soos gebeurtenisgedrewe outoskalering, ingeboude Dapr-integrasie, en ondersteuning vir komplekse orkestrasie-scenario's. **Container App Jobs** is 'n gespesialiseerde kenmerk binne ACA wat ontwerp is om kortstondige, batch, of geskeduleerde take uit te voer wat vir 'n beperkte tyd loop en dan verlaat.

Verskille:
- ACI is ideaal vir **eenvoudige**, standalone houer werklade waar minimale orkestrasie benodig word.
- ACA is die beste geskik vir die bou van skaalbare, onderling verbonde mikrodiens met gevorderde kenmerke soos outoskalering en diensontdekking.
- Container App Jobs fokus op **eenmalige of geskeduleerde take**, wat 'n gestroomlynde manier bied om agtergrond- of batchtake binne die ACA-omgewing uit te voer.

### Konfigurasies

Spesiale opsies vir **ACI**:
- Ten opsigte van netwerk is dit moontlik om een van hierdie 3 opsies te kies:
- **Publiek** (verstek)
- **Privaat** (slegs toeganklik vanaf die VNet)
- **Geen** (geen netwerktoegang)

Spesiale opsies vir **ACA**:
- Dit is moontlik om die **verkeer** na die houer na die houer-app omgewing te beperk of dit publiek te laat.
- Dit is moontlik om 'n **eksterne identiteitsverskaffer** (Microsoft, Facebook, Google, en Twitter) vir outentisering te gebruik.
- Dit is moontlik om **App geheime** te **stoor** (in duidelike teks of as skakels na 'n kluis wat 'n MI met toegang daartoe toewys).
- Dit is moontlik om **hervisions en replika's van die app** te hê.
- Dit is moontlik om van 'n spesifieke **bronskode of artefak** te ontplooi in plaas van om 'n houer te gebruik. Vir die bronskode moet toegang tot GitHub gegee word. Vir artefakte is dit moontlik om dit op te laai nadat die app geskep is.

Spesiale opsies vir **take**:
- Die sneller tipe kan **handmatig, geskeduleer of gebeurtenis-gebaseerd** wees (soos 'n boodskap wat in 'n waglys aankom).

Algemene opsies:
- Ten einde 'n houer te skep, is dit moontlik om 'n publieke beeld, 'n houerbeeld van 'n Azure Container Registry of 'n eksterne repo te gebruik, wat dalk **vereis om 'n wagwoord te konfigureer** om toegang te verkry.
- Dit beteken dat die konfigurasie van die houer sensitiewe inligting kan bevat.
- Dit is ook moontlik om algemene docker-instellings te konfigureer soos:
- **Omgewing veranderlikes** (kyk vir sensitiewe inligting)
- **Volumes** (selfs van Azure Files)
- **Poorte** om bloot te stel
- **CPU en geheue beperkings**
- **Herstart beleid**
- **Loop as bevoorreg**
- Oorskry houers **opdraglyn om te loop en argumente** (kan ook in bestaande houers gewysig word)
- ...

## Enumerasie

> [!WARNING]
> Wanneer jy enumerate, kan jy sensitiewe konfigurasies soos **omgewing veranderlikes**, **netwerk besonderhede**, of **bestuurde identiteite** onthul.
```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>
```
## Privilege Escalation & Post Exploitation

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

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