9.2 KiB
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の概要を参照してください。
ドキュメントによると、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で確認できます。
アクセス制御
Key Vaultリソースへのアクセスは、2つのプレーンによって制御されます:
- 管理プレーン、そのターゲットはmanagement.azure.comです。
- これはキー ボールトとアクセスポリシーを管理するために使用されます。Azureロールベースのアクセス制御(RBAC)のみがサポートされています。
- データプレーン、そのターゲットは**
<vault-name>.vault.azure.com**です。 - これはキー ボールト内のデータ(キー、シークレット、証明書)を管理およびアクセスするために使用されます。これにはキー ボールトアクセスポリシーまたはAzure RBACがサポートされています。
Contributorのような役割は、管理プレーンでアクセスポリシーを管理する権限を持っている場合、アクセスポリシーを変更することでシークレットにアクセスできます。
Key Vault RBAC組み込みロール

ネットワークアクセス
Azure Key Vaultでは、ファイアウォールルールを設定して、指定された仮想ネットワークまたはIPv4アドレス範囲からのみデータプレーン操作を許可することができます。この制限はAzure管理ポータルを通じたアクセスにも影響し、ログインIPアドレスが承認された範囲内でない場合、ユーザーはキー、シークレット、または証明書をキー ボールト内でリストすることができません。
これらの設定を分析および管理するために、Azure CLIを使用できます:
az keyvault show --name name-vault --query networkAcls
前のコマンドはname-vaultのファイアウォール設定を表示します。これには、有効なIP範囲と拒否されたトラフィックのポリシーが含まれます。
さらに、プライベートエンドポイントを作成して、ボールトへのプライベート接続を許可することが可能です。
削除保護
キー ボールトが作成されると、削除を許可する最小日数は7日です。つまり、そのキー ボールトを削除しようとすると、削除には少なくとも7日かかります。
ただし、パージ保護が無効のボールトを作成することが可能で、これによりキー ボールトとオブジェクトは保持期間中にパージされることができます。ただし、一度この保護がボールトに対して有効にされると、無効にすることはできません。
列挙
{{#tabs }} {{#tab name="az" }}
# List all Key Vaults in the subscription
az keyvault list
# List Key Vaults in a specific Resource Group
az keyvault list --resource-group <ResourceGroupName>
# Show details of a specific Key Vault
az keyvault show --name <KeyVaultName> # If accessPolicies, you can see them here
# List all keys in a Key Vault
az keyvault key list --vault-name <KeyVaultName>
# List all secrets in a Key Vault
az keyvault secret list --vault-name <KeyVaultName>
# Get versions of a secret
az keyvault secret list-versions --vault-name <KeyVaultName> --name <SecretName>
# List all certificates in a Key Vault
az keyvault certificate list --vault-name <KeyVaultName>
# List all deleted Key Vaults in the subscription
az keyvault list-deleted
# Get properties of a deleted Key Vault
az keyvault show-deleted --name <KeyVaultName>
# Get assigned roles
az role assignment list --include-inherited --scope "/subscriptions/<subscription-uuid>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>"
# Get secret value
az keyvault secret show --vault-name <KeyVaultName> --name <SecretName>
# Get old versions secret value
az keyvault secret show --id https://<KeyVaultName>.vault.azure.net/secrets/<KeyVaultName>/<idOldVersion>
{{#endtab }}
{{#tab name="Az Powershell" }}
# 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 <KeyVaultName>
# List all keys in a Key Vault
Get-AzKeyVaultKey -VaultName <KeyVaultName>
# List all secrets in a Key Vault
Get-AzKeyVaultSecret -VaultName <KeyVaultName>
# List all certificates in a Key Vault
Get-AzKeyVaultCertificate -VaultName <KeyVaultName>
# List all deleted Key Vaults in the subscription
Get-AzKeyVault -InRemovedState
# Get properties of a deleted Key Vault
Get-AzKeyVault -VaultName <KeyVaultName> -InRemovedState
# Get secret values
Get-AzKeyVaultSecret -VaultName <vault_name> -Name <secret_name> -AsPlainText
{{#endtab }}
{{#tab name="az script" }}
#!/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}}