# Az - Key Vault {{#include ../../../banners/hacktricks-training.md}} ## 基本情報 **Azure Key Vault**は、Microsoft Azureが提供するクラウドサービスで、**シークレット、キー、証明書、パスワード**などの機密情報を安全に保存および管理します。これは中央集権的なリポジトリとして機能し、Azure Active Directory (Azure AD)を使用して安全なアクセスと細かな制御を提供します。セキュリティの観点から、Key Vaultは暗号鍵のための**ハードウェアセキュリティモジュール (HSM) 保護**を提供し、シークレットが静止時および転送中に暗号化されることを保証し、**ロールベースのアクセス制御 (RBAC)**およびポリシーを通じて堅牢なアクセス管理を提供します。また、**監査ログ**、アクセス追跡のためのAzure Monitorとの統合、および長期間の鍵露出によるリスクを軽減するための自動鍵ローテーション機能も備えています。 完全な詳細については、[Azure Key Vault REST APIの概要](https://learn.microsoft.com/en-us/azure/key-vault/general/about-keys-secrets-certificates)を参照してください。 [**ドキュメント**](https://learn.microsoft.com/en-us/azure/key-vault/general/basic-concepts)によると、VaultはソフトウェアおよびHSMバックのキー、シークレット、証明書の保存をサポートしています。管理されたHSMプールはHSMバックのキーのみをサポートします。 **ボールト**の**URL形式**は`https://{vault-name}.vault.azure.net/{object-type}/{object-name}/{object-version}`で、管理されたHSMプールの場合は`https://{hsm-name}.managedhsm.azure.net/{object-type}/{object-name}/{object-version}`です。 ここで: - `vault-name`はキー ボールトのグローバルに**一意**な名前です。 - `object-type`は「keys」、「secrets」または「certificates」です。 - `object-name`はキー ボールト内の**一意**なオブジェクト名です。 - `object-version`はシステム生成され、**オブジェクトの一意のバージョン**を指定するためにオプションで使用されます。 ボールトに保存されたシークレットにアクセスするためには、ボールト作成時に2つの権限モデルのいずれかを選択できます: - **ボールトアクセスポリシー** - **Azure RBAC**(最も一般的で推奨される) - サポートされているすべての詳細な権限は、[https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/security#microsoftkeyvault](https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/security#microsoftkeyvault)で確認できます。 ### アクセス制御 Key Vaultリソースへのアクセスは、2つのプレーンによって制御されます: - **管理プレーン**、そのターゲットは[management.azure.com](http://management.azure.com/)です。 - これはキー ボールトと**アクセスポリシー**を管理するために使用されます。Azureロールベースのアクセス制御(**RBAC**)のみがサポートされています。 - **データプレーン**、そのターゲットは**`.vault.azure.com`**です。 - これはキー ボールト内の**データ**(キー、シークレット、証明書)を管理およびアクセスするために使用されます。これには**キー ボールトアクセスポリシー**またはAzure **RBAC**がサポートされています。 **Contributor**のような役割は、管理プレーンでアクセスポリシーを管理する権限を持っている場合、アクセスポリシーを変更することでシークレットにアクセスできます。 ### Key Vault RBAC組み込みロール
### ネットワークアクセス Azure Key Vaultでは、**ファイアウォール**ルールを設定して、**指定された仮想ネットワークまたはIPv4アドレス範囲からのみデータプレーン操作を許可**することができます。この制限はAzure管理ポータルを通じたアクセスにも影響し、ログインIPアドレスが承認された範囲内でない場合、ユーザーはキー、シークレット、または証明書をキー ボールト内でリストすることができません。 これらの設定を分析および管理するために、**Azure CLI**を使用できます: ```bash az keyvault show --name name-vault --query networkAcls ``` 前のコマンドは`name-vault`**のファイアウォール設定を表示します**。これには、有効なIP範囲と拒否されたトラフィックのポリシーが含まれます。 さらに、**プライベートエンドポイント**を作成して、ボールトへのプライベート接続を許可することが可能です。 ### 削除保護 キー ボールトが作成されると、削除を許可する最小日数は7日です。つまり、そのキー ボールトを削除しようとすると、**削除には少なくとも7日かかります**。 ただし、**パージ保護が無効**のボールトを作成することが可能で、これによりキー ボールトとオブジェクトは保持期間中にパージされることができます。ただし、一度この保護がボールトに対して有効にされると、無効にすることはできません。 ## 列挙 {{#tabs }} {{#tab name="az" }} ```bash # List all Key Vaults in the subscription az keyvault list # List Key Vaults in a specific Resource Group az keyvault list --resource-group # Show details of a specific Key Vault az keyvault show --name # If accessPolicies, you can see them here # List all keys in a Key Vault az keyvault key list --vault-name # List all secrets in a Key Vault az keyvault secret list --vault-name # Get versions of a secret az keyvault secret list-versions --vault-name --name # List all certificates in a Key Vault az keyvault certificate list --vault-name # List all deleted Key Vaults in the subscription az keyvault list-deleted # Get properties of a deleted Key Vault az keyvault show-deleted --name # Get assigned roles az role assignment list --include-inherited --scope "/subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/" # Get secret value az keyvault secret show --vault-name --name # Get old versions secret value az keyvault secret show --id https://.vault.azure.net/secrets// ``` {{#endtab }} {{#tab name="Az Powershell" }} ```bash # Get keyvault token curl "$IDENTITY_ENDPOINT?resource=https://vault.azure.net&api-version=2017-09-01" -H secret:$IDENTITY_HEADER # Connect with PS AzureAD ## $token from management API Connect-AzAccount -AccessToken $token -AccountId 1937ea5938eb-10eb-a365-10abede52387 -KeyVaultAccessToken $keyvaulttoken # Get details of a specific Key Vault Get-AzKeyVault -VaultName # List all keys in a Key Vault Get-AzKeyVaultKey -VaultName # List all secrets in a Key Vault Get-AzKeyVaultSecret -VaultName # List all certificates in a Key Vault Get-AzKeyVaultCertificate -VaultName # List all deleted Key Vaults in the subscription Get-AzKeyVault -InRemovedState # Get properties of a deleted Key Vault Get-AzKeyVault -VaultName -InRemovedState # Get secret values Get-AzKeyVaultSecret -VaultName -Name -AsPlainText ``` {{#endtab }} {{#tab name="az script" }} ```bash #!/bin/bash # Dump all keyvaults from the subscription # Define Azure subscription ID AZ_SUBSCRIPTION_ID="your-subscription-id" # Specify the filename for output CSV_OUTPUT="vault-names-list.csv" # Login to Azure account az login # Select the desired subscription az account set --subscription $AZ_SUBSCRIPTION_ID # Retrieve all resource groups within the subscription AZ_RESOURCE_GROUPS=$(az group list --query "[].name" -o tsv) # Initialize the CSV file with headers echo "Vault Name,Associated Resource Group" > $CSV_OUTPUT # Iterate over each resource group for GROUP in $AZ_RESOURCE_GROUPS do # Fetch key vaults within the current resource group VAULT_LIST=$(az keyvault list --resource-group $GROUP --query "[].name" -o tsv) # Process each key vault for VAULT in $VAULT_LIST do # Extract the key vault's name VAULT_NAME=$(az keyvault show --name $VAULT --resource-group $GROUP --query "name" -o tsv) # Append the key vault name and its resource group to the file echo "$VAULT_NAME,$GROUP" >> $CSV_OUTPUT done done ``` {{#endtab }} {{#endtabs }} ## 権限昇格 {{#ref}} ../az-privilege-escalation/az-key-vault-privesc.md {{#endref}} ## ポストエクスプロイト {{#ref}} ../az-post-exploitation/az-key-vault-post-exploitation.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}}