Translated ['src/pentesting-cloud/azure-security/az-services/az-automati

This commit is contained in:
Translator
2025-02-12 13:51:01 +00:00
parent 1d4438facd
commit 81ca19598a
4 changed files with 50 additions and 52 deletions

View File

@@ -1,54 +1,54 @@
# Az - Automation Accounts
{{#include ../../../../banners/hacktricks-training.md}}
{{#include ../../../banners/hacktricks-training.md}}
## 基本情報
Azure Automation Accountsは、Microsoft Azureのクラウドベースのサービスで、リソース管理、構成、更新などのタスクを**自動化**するのに役立ちます。これにより、Azureおよびオンプレミス環境全体での効率と一貫性を向上させるためのインフラストラクチャをコードIaCとして提供し、プロセスの自動化を可能にします。
Azure Automation Accountsは、Microsoft Azureのクラウドベースのサービスで、リソース管理、構成、更新などのタスクを**自動化**するのに役立ちます。これにより、**Runbooks**(実行される自動化用のスクリプト)、**スケジュール**、および**ハイブリッドワーカーグループ**を提供し、自動化**ジョブ**を実行できるようにし、インフラストラクチャをコードIaCとして扱い、クラウドリソースの管理における効率性と一貫性を向上させます。
### 設定
- **資格情報**: パスワードは自動化アカウント内のランブック内でのみアクセス可能で、**ユーザー名とパスワードを安全に保存する**ために使用されます。
- **変数**: ランブックで使用できる**構成データ**を保存するために使用されます。これにはAPIキーなどの機密情報も含まれる可能性があります。変数が**暗号化されて保存されている**場合、それは自動化アカウント内のランブック内でのみ利用可能です。
- **証明書**: ランブックで使用できる**証明書**を保存するために使用されます。
- **資格情報**: パスワードは自動化アカウント内のRunbook内でのみアクセス可能で、**ユーザー名とパスワードを安全に保存する**ために使用されます。
- **変数**: Runbook内で使用できる**構成データ**を保存するために使用されます。これにはAPIキーのような機密情報も含まれる可能性があります。変数が**暗号化されて保存されている**場合、それは自動化アカウント内のRunbook内でのみ利用可能です。
- **証明書**: Runbook内で使用できる**証明書**を保存するために使用されます。
- **接続**: 外部サービスへの**接続情報**を保存するために使用されます。これには**機密情報**が含まれる可能性があります。
- **ネットワークアクセス**: **公開**または**プライベート**に設定できます。
### ランブックとジョブ
### Runbooks & Jobs
Azure Automationのランブックは、クラウド環境内でタスクを**自動的に実行するスクリプト**です。ランブックはPowerShell、Python、またはグラフィカルエディタで記述できます。これにより、VM管理、パッチ適用、コンプライアンスチェックなどの管理タスクを自動化できます。
Azure AutomationのRunbookは、クラウド環境内でタスクを**自動的に実行するスクリプト**です。RunbookはPowerShell、Python、またはグラフィカルエディタで記述できます。これにより、VM管理、パッチ適用、コンプライアンスチェックなどの管理タスクを自動化できます。
**ランブック**内の**コード**には**機密情報**(資格情報など)が含まれる可能性があります。
**Runbooks**内の**コード**には**機密情報**(資格情報など)が含まれる可能性があります。
**ジョブはランブック実行のインスタンス**です。ランブックを実行すると、実行を追跡するためにジョブが作成されます。各ジョブには以下が含まれます:
**ジョブはRunbook実行のインスタンス**です。Runbookを実行すると、実行を追跡するためにジョブが作成されます。各ジョブには以下が含まれます:
- **ステータス**: キュー待ち、実行中、完了、失敗、保留。
- **出力**: ランブック実行の結果。
- **出力**: Runbook実行の結果。
- **開始時刻と終了時刻**: ジョブが開始された時刻と完了した時刻。
ジョブには**ランブック**実行の**出力**が含まれています。**ジョブ**を**読み取る**ことができる場合は、**実行の出力**(潜在的な**機密情報**)が含まれているため、必ず行ってください。
ジョブには**Runbook**実行の**出力**が含まれます。**ジョブ**を**読み取る**ことができる場合は、実行の**出力**(潜在的な**機密情報**)が含まれているため、必ず行ってください。
### スケジュールとウェブフック
### スケジュール & Webhooks
ランブックを実行する主な方法は3つあります
Runbookを実行する主な方法は3つあります
- **スケジュール**: 特定の**時間**または**間隔**でランブックを**トリガー**するために使用されます。
- **ウェブフック**: 外部サービスからランブックを**トリガー**するために使用できる**HTTPエンドポイント**です。作成後、ウェブフックURLは**表示されません**。
- **手動トリガー**: AzureポータルおよびCLIからランブックを**手動でトリガー**できます。
- **スケジュール**: 特定の**時間**または**間隔**でRunbookを**トリガー**するために使用されます。
- **Webhooks**: 外部サービスからRunbookを**トリガー**するために使用できる**HTTPエンドポイント**です。作成後、Webhook URLは**表示されません**。
- **手動トリガー**: AzureポータルCLIからRunbookを**手動でトリガー**できます。
### ソース管理
**Github、Azure Devops (Git)、およびAzure Devops (TFVC)**からランブックをインポートすることができます。リポジトリのランブックをAzure Automationアカウントに公開するように指示することも、リポジトリからAzure Automationアカウントに**変更を同期**するように指示することも可能です。
**Github、Azure Devops (Git)、およびAzure Devops (TFVC)**からRunbooksをインポートすることができます。リポジトリのRunbooksをAzure Automationアカウントに公開するように指示することも、リポジトリからAzure Automationアカウントに**変更を同期**するように指示することも可能です。
同期が有効になっている場合、**Githubリポジトリにウェブフックが作成され**、プッシュイベントが発生するたびに同期がトリガーされます。ウェブフックURLの例: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
同期が有効になっている場合、**GithubリポジトリにWebhookが作成され**、プッシュイベントが発生するたびに同期がトリガーされます。Webhook URLの例: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
これらのウェブフックは、Githubリポジトリに関連付けられたランブックのウェブフックをリストする際に**表示されません**。また、作成後にソース管理のリポジトリURLを**変更することはできません**。
これらのWebhookは、Githubリポジトリに関連付けられたRunbooksのWebhookをリストする際に**表示されません**。また、作成後にソース管理のリポジトリURLを**変更することはできません**。
構成されたソース管理が機能するためには、**Azure Automation Account**に**`Contributor`**ロールを持つマネージドアイデンティティシステムまたはユーザーが必要です。さらに、Automation Accountにユーザーマネージドアイデンティティを割り当てるには、変数**`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**にユーザーMIのクライアントIDを指定する必要があります。
### ランタイム環境
ランブックを作成する際に、ランタイム環境を選択することができます。デフォルトでは、以下のランタイム環境が利用可能です:
Runbookを作成する際に、ランタイム環境を選択できます。デフォルトでは、以下のランタイム環境が利用可能です:
- **Powershell 5.1**
- **Powershell 7.1**
@@ -57,30 +57,30 @@ Azure Automationのランブックは、クラウド環境内でタスクを**
- **Python 3.8**
- **Python 2.7**
ただし、これらのいずれかをベースにして**独自の環境を作成する**ことも可能です。Pythonの場合、使用する環境に`.whl`パッケージをアップロードすることができます。PowerShellの場合、ランタイムで使用するモジュールを含む`.zip`パッケージをアップロードすることができます。
ただし、これらのいずれかをベースにして**独自の環境を作成する**ことも可能です。Pythonの場合、使用する環境に`.whl`パッケージをアップロードできます。PowerShellの場合、ランタイムに必要なモジュールを含む`.zip`パッケージをアップロードできます。
### ハイブリッドワーカーグループ
Azure Automationでは、ランブックのデフォルトの実行環境は**Azure Sandbox**であり、Azureによって管理されるクラウドベースのプラットフォームで、Azureリソースに関するタスクに適しています。ただし、このサンドボックスには、オンプレミスリソースへのアクセス制限や実行時間とリソース使用に関する制約などの制限があります。これらの制限を克服するために、ハイブリッドワーカーグループが使用されます。ハイブリッドワーカーグループは、**自分のマシンにインストールされた1つ以上のハイブリッドランブックワーカー**で構成され、オンプレミス、他のクラウド環境、またはAzure VM上で実行されます。このセットアップにより、ランブックはこれらのマシン上で直接実行され、ローカルリソースへの直接アクセス、より長くリソース集約的なタスクの実行、Azureの即時の範囲を超えた環境との相互作用の柔軟性が提供されます。
Azure Automationでは、Runbookのデフォルトの実行環境は**Azure Sandbox**であり、Azureリソースに関するタスクに適したAzureが管理するクラウドベースのプラットフォームです。ただし、このサンドボックスには、オンプレミスリソースへのアクセス制限や実行時間とリソース使用制約などの制限があります。これらの制限を克服するために、ハイブリッドワーカーグループが使用されます。ハイブリッドワーカーグループは、**自分のマシンにインストールされた1つ以上のハイブリッドRunbookワーカー**で構成され、オンプレミス、他のクラウド環境、またはAzure VM上で実行されます。このセットアップにより、Runbookはこれらのマシン上で直接実行され、ローカルリソースへの直接アクセス、より長くリソース集約的なタスクの実行、Azureの即時の範囲を超えた環境との相互作用の柔軟性が提供されます。
ハイブリッドワーカーグループを作成する際には、使用する**資格情報**を指定する必要があります。2つのオプションがあります
- **デフォルトの資格情報**: 資格情報を提供する必要はなく、ランブックは**システム**としてVM内で実行されます。
- **特定の資格情報**: 自動化アカウント内の資格情報オブジェクトの名前を提供する必要があり、これが**VM内でランブックを実行するために使用されます**。したがって、この場合、VMのために**有効な資格情報を盗む**ことが可能です。
- **デフォルトの資格情報**: 資格情報を提供する必要はなく、Runbookは**System**としてVM内で実行されます。
- **特定の資格情報**: 自動化アカウント内の資格情報オブジェクトの名前を提供する必要があり、これが**VM内でRunbookを実行するために使用されます**。したがって、この場合、VMの**有効な資格情報を盗む**ことが可能です。
したがって、**ハイブリッドワーカー**で**ランブック**を実行することを選択できる場合、**システム**として外部マシン内で**任意のコマンドを実行**することになります(良いピボット技術)。
したがって、**ハイブリッドワーカー**で**Runbook**を実行することを選択できる場合、**System**として外部マシン内で**任意のコマンド**を実行ます(良いピボット技術)。
さらに、ハイブリッドワーカーがAzureで他のマネージドアイデンティティと共に実行されている場合、ランブックは**ランブックのマネージドアイデンティティとVMのメタデータサービスからのすべてのマネージドアイデンティティ**にアクセスできるようになります。
さらに、ハイブリッドワーカーがAzureで他のマネージドアイデンティティと共に実行されている場合、Runbookは**RunbookのマネージドアイデンティティとVMのメタデータサービスからのすべてのマネージドアイデンティティ**にアクセスできます。
> [!TIP]
> **メタデータサービス**のURLは、**`http://169.254.169.254`**であり、自動化アカウントのマネージドアイデンティティトークンを取得するサービスのURL**`IDENTITY_ENDPOINT`**)とは異なることを忘れないでください。
> **メタデータサービス**のURLは、Automationアカウントのマネージドアイデンティティトークンを取得するサービスとは異なる**`http://169.254.169.254`**ことを忘れないでください。
### 状態構成SC
### 状態構成 (SC)
>[!WARNING]
> [!WARNING]
> [ドキュメント](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview)に示されているように、Azure Automation State Configurationは2027年9月30日に廃止され、[Azure Machine Configuration](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview)に置き換えられます。
Automation Accountsは、**状態構成SC**もサポートしており、これは**VMの状態を構成**および**維持**するのに役立つ機能です。**Windows**および**Linux**マシンにDSC構成を**作成**および**適用**することができます。
Automation Accountsは、**状態構成 (SC)**もサポートしており、これはVMの**状態**を**構成**および**維持**するのに役立つ機能です。**Windows**および**Linux**マシンにDSC構成を**作成**および**適用**することが可能です。
攻撃者の視点から見ると、これは**すべての構成されたVMで任意のPSコードを実行する**ことを可能にし、これらのVMのマネージドアイデンティティへの権限昇格を許可し、新しいネットワークへのピボットを可能にするため、興味深いものでした... また、構成には**機密情報**が含まれる可能性があります。
@@ -238,4 +238,4 @@ Get-AzAutomationHybridWorkerGroup -AutomationAccountName <AUTOMATION-ACCOUNT> -R
- [https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview)
- [https://github.com/rootsecdev/Azure-Red-Team#runbook-automation](https://github.com/rootsecdev/Azure-Red-Team#runbook-automation)
{{#include ../../../../banners/hacktricks-training.md}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -1,21 +1,20 @@
# Az - Container Instances
{{#include ../../../../banners/hacktricks-training.md}}
{{#include ../../../banners/hacktricks-training.md}}
## 基本情報
Azure Container Instances (ACI) は、Azure クラウドで **コンテナ** を実行するための **サーバーレスでオンデマンドな方法** を提供します。単一または複数のコンテナを **スケーラブルなコンピュート**、**ネットワーキングオプション**、および **他の Azure サービス**(ストレージ、仮想ネットワーク、またはコンテナレジストリなど)に接続する柔軟性を持つグループで **デプロイ** できます。
これらは **エフェメラル** なワークロードであるため、基盤となる VM インフラストラクチャを管理する必要はありません — Azure がそれを処理します。しかし、**攻撃的セキュリティの観点**からは、**権限**、**アイデンティティ**、**ネットワーク構成**、および **ログ** が攻撃面や潜在的な誤設定を明らかにする可能性があることを理解することが重要です。
これらは **一時的** なワークロードであるため、基盤となる VM インフラストラクチャを管理する必要はありません — Azure がそれを処理します。しかし、**攻撃的セキュリティの観点**からは、**権限**、**アイデンティティ**、**ネットワーク構成**、および **ログ** が攻撃面や潜在的な誤設定を明らかにする可能性があることを理解することが重要です。
### 構成
- コンテナを作成するには、パブリックイメージ、Azure Container Registry からのコンテナイメージ、または外部リポジトリを使用することができ、これには **アクセスするためのパスワード設定する必要がある** かもしれません
- コンテナを作成するには、パブリックイメージ、Azure Container Registry からのコンテナイメージ、または外部リポジトリを使用することができ、これには **パスワード設定** が必要な場合があります
- ネットワーキングに関しては、**パブリック IP** を持つことも、**プライベートエンドポイント** であることもできます。
- 一般的な Docker 設定を構成することも可能です:
- **環境変数**
- **ボリューム**Azure Files から
- **ボリューム**Azure Files からのものも含む
- **ポート**
- **CPU とメモリの制限**
- **再起動ポリシー**
@@ -23,7 +22,6 @@ Azure Container Instances (ACI) は、Azure クラウドで **コンテナ** を
- **実行するコマンドライン**
- ...
## 列挙
> [!WARNING]

View File

@@ -1,6 +1,6 @@
# Az - Container Registry
{{#include ../../../../banners/hacktricks-training.md}}
{{#include ../../../banners/hacktricks-training.md}}
## 基本情報
@@ -20,21 +20,21 @@ Azure Container Registry (ACR) は、**Azure クラウド内でコンテナイ
また、割り当て可能な**組み込みロール**もあり、**カスタムロール**を作成することも可能です。
![](</images/registry_roles.png>)
![](/images/registry_roles.png)
### 認証
> [!WARNING]
> レジストリ名に大文字が含まれていても、**小文字**を使用してログイン、プッシュ、プルすることが非常に重要です。
ACR に認証する方法は 4 つあります:
ACR に認証する方法は 4 つあります
- **Entra ID を使用**: これは ACR に認証するための**デフォルト**の方法です。**`az acr login`** コマンドを使用して ACR に認証します。このコマンドは、**`~/.docker/config.json`** ファイルに**資格情報**を**保存**します。さらに、**クラウドシェル**のように Docker ソケットにアクセスできない環境このコマンドを実行している場合、**`--expose-token`** フラグを使用して ACR に認証するための**トークン**を取得できます。次に、認証するにはユーザー名として `00000000-0000-0000-0000-000000000000` を使用します。例: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN`
- **管理者アカウントを使用**: 管理者ユーザーはデフォルトで無効になっていますが、有効にすることができ、その後、管理者アカウントの**ユーザー名**と**パスワード**を使用してレジストリにアクセスできます。この方法は、いくつかの Azure サービスが使用しているため、まだサポートされています。このユーザーには**2 つのパスワード**が作成され、どちらも有効です。`az acr update -n <acrName> --admin-enabled true` で有効にできます。ユーザー名は通常、レジストリ名(`admin` ではなく)です
- **トークンを使用**: **特定の `scope map`**(権限)を持つ**トークン**を作成してレジストリにアクセスすることができます。次に、このトークン名をユーザー名として使用し、生成されたパスワードのいずれかを使用してレジストリに認証ます。例: `docker login -u <registry-name> -p <password> aregistry-url`
- **サービスプリンシパルを使用**: **サービスプリンシパル**を作成し、イメージをプルするために **`AcrPull`** のようなロールを割り当てることができます。次に、SP appId をユーザー名として、生成されたシークレットをパスワードとして使用して**レジストリにログイン**できます。
- **Entra ID を使用**: これは ACR に認証するための**デフォルト**の方法です。**`az acr login`** コマンドを使用して ACR に認証します。このコマンドは、**`~/.docker/config.json`** ファイルに資格情報を**保存**します。さらに、**クラウドシェル**のように Docker ソケットにアクセスできない環境からこのコマンドを実行している場合、**`--expose-token`** フラグを使用して ACR に認証するための**トークン**を取得できます。次に、ユーザー名として `00000000-0000-0000-0000-000000000000` を使用して認証する必要があります。例: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN`
- **管理者アカウントを使用**: 管理者ユーザーはデフォルトで無効になっていますが、有効にすることができ、その後、管理者アカウントの**ユーザー名**と**パスワード**を使用してレジストリにアクセスできます。この方法は、いくつかの Azure サービスが使用しているため、まだサポートされています。このユーザーには**2 つのパスワード**が作成され、どちらも有効です。`az acr update -n <acrName> --admin-enabled true` で有効にできます。ユーザー名は通常、レジストリ名です`admin` ではありません)
- **トークンを使用**: レジストリにアクセスするための**特定の `scope map`**(権限)を持つ**トークン**を作成することができます。その後、このトークン名をユーザー名として使用し、生成されたパスワードのいずれかを使用してレジストリに認証できます。例: `docker login -u <registry-name> -p <password> aregistry-url`
- **サービスプリンシパルを使用**: **サービスプリンシパル**を作成し、イメージをプルするために **`AcrPull`** のようなロールを割り当てることができます。その後、SP appId をユーザー名として、生成されたシークレットをパスワードとして使用して**レジストリにログイン**できます。
レジストリへのアクセスを持つ SP を生成するための [docs](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) からの例スクリプト:
レジストリへのアクセスを持つ SP を生成するための [docs](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) からの例スクリプト:
```bash
#!/bin/bash
ACR_NAME=$containerRegistry
@@ -55,7 +55,7 @@ echo "Service principal password: $PASSWORD"
### ネットワーキング
**Premium SKU** のみが **プライベートエンドポイント** をサポートしています。他のSKUは **パブリックアクセス** のみをサポートしています。パブリックエンドポイントの形式`<registry-name>.azurecr.io` で、プライベートエンドポイントの形式`<registry-name>.privatelink.azurecr.io` です。このため、レジストリの名前はすべてのAzureで一意である必要があります。
**Premium SKU** のみが **プライベートエンドポイント** をサポートしています。他のSKUは **パブリックアクセス** のみをサポートしています。パブリックエンドポイントは `<registry-name>.azurecr.io` の形式で、プライベートエンドポイントは `<registry-name>.privatelink.azurecr.io` の形式です。このため、レジストリの名前はすべてのAzureで一意である必要があります。
### Microsoft Defender for Cloud
@@ -63,13 +63,13 @@ echo "Service principal password: $PASSWORD"
### ソフトデリート
**ソフトデリート** 機能により、指定された日数内に **削除されたレジストリを復元** できます。この機能は **デフォルトで無効** す。
**ソフトデリート** 機能により、指定された日数内に **削除されたレジストリを復元** できます。この機能は **デフォルトで無効** になっています。
### ウェブフック
レジストリ内 **ウェブフックを作成** することが可能です。このウェブフックでは、**プッシュまたは削除アクションが実行されるたびにリクエストが送信されるURL** を指定する必要があります。さらに、ウェブフックは影響を受けるリポジトリ(画像)を示すスコープを指定できます。例えば、'foo:*' はリポジトリ 'foo' の下のイベントを意味します。
レジストリ内 **ウェブフックを作成** することが可能です。このウェブフックでは、**プッシュまたは削除アクションが実行されるたびにリクエストが送信されるURL** を指定する必要があります。さらに、ウェブフックは影響を受けるリポジトリ(画像)を示すスコープを指定できます。例えば、'foo:\*' はリポジトリ 'foo' の下のイベントを意味します。
攻撃者の視点からは、レジストリ**アクションを実行する前にこれを確認** し、必要に応じて一時的に削除して検出を避けることが興味深いです。
攻撃者の視点からは、レジストリで **アクションを実行する前にこれを確認** し、必要に応じて一時的に削除して検出を避けることが興味深いです。
### 接続されたレジストリ
@@ -154,4 +154,4 @@ az acr cache show --name <cache-name> --registry <registry-name>
- [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli)
- [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager)
{{#include ../../../../banners/hacktricks-training.md}}
{{#include ../../../banners/hacktricks-training.md}}