Azure Key Vault는 Microsoft Azure에서 제공하는 클라우드 서비스로, 비밀, 키, 인증서 및 비밀번호와 같은 민감한 정보를 안전하게 저장하고 관리하는 데 사용됩니다. 이는 중앙 집중식 저장소 역할을 하며, Azure Active Directory (Azure AD)를 사용하여 안전한 액세스와 세밀한 제어를 제공합니다. 보안 관점에서 Key Vault는 암호화 키에 대한 하드웨어 보안 모듈 (HSM) 보호를 제공하고, 비밀이 저장 중 및 전송 중 모두 암호화되도록 보장하며, 역할 기반 액세스 제어 (RBAC) 및 정책을 통해 강력한 액세스 관리를 제공합니다. 또한 감사 로그, 액세스 추적을 위한 Azure Monitor와의 통합, 장기 키 노출로 인한 위험을 줄이기 위한 자동 키 회전 기능도 제공합니다.
문서에 따르면, Vault는 소프트웨어 및 HSM 지원 키, 비밀 및 인증서를 저장하는 것을 지원합니다. 관리형 HSM 풀은 HSM 지원 키만 지원합니다.
Vaults의 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)만 지원됩니다.
데이터 평면, 대상은 **<vault-name>.vault.azure.com**입니다.
키 볼트 내의 데이터 (키, 비밀 및 인증서)를 관리하고 액세스하는 데 사용됩니다. 이는 키 볼트 액세스 정책 또는 Azure RBAC를 지원합니다.
Contributor와 같은 역할은 관리 평면에서 액세스 정책을 관리할 수 있는 권한을 가지고 있으며, 액세스 정책을 수정하여 비밀에 액세스할 수 있습니다.
Key Vault RBAC Built-In Roles
Network Access
Azure Key Vault에서는 방화벽 규칙을 설정하여 지정된 가상 네트워크 또는 IPv4 주소 범위에서만 데이터 평면 작업을 허용할 수 있습니다. 이 제한은 Azure 관리 포털을 통한 액세스에도 영향을 미치며, 사용자의 로그인 IP 주소가 허가된 범위 내에 있지 않으면 키 볼트에서 키, 비밀 또는 인증서를 나열할 수 없습니다.
이 설정을 분석하고 관리하기 위해 Azure CLI를 사용할 수 있습니다:
azkeyvaultshow--namename-vault--querynetworkAcls
The previous command will display the firewall settings of name-vault, including enabled IP ranges and policies for denied traffic.
Moreover, it's possible to create a private endpoint to allow a private connection to a vault.
Deletion Protection
When a key vault is created the minimum number of days to allow for deletion is 7. Which means that whenever you try to delete that key vault it'll need at least 7 days to be deleted.
However, it's possible to create a vault with purge protection disabled which allow key vault and objects to be purged during retention period. Although, once this protection is enabled for a vault it cannot be disabled.
Enumeration
# List all Key Vaults in the subscriptionazkeyvaultlist# List Key Vaults in a specific Resource Groupazkeyvaultlist--resource-group<ResourceGroupName># Show details of a specific Key Vaultazkeyvaultshow--name<KeyVaultName># If accessPolicies, you can see them here# List all keys in a Key Vaultazkeyvaultkeylist--vault-name<KeyVaultName># List all secrets in a Key Vaultazkeyvaultsecretlist--vault-name<KeyVaultName># Get versions of a secretazkeyvaultsecretlist-versions--vault-name<KeyVaultName>--name<SecretName># List all certificates in a Key Vaultazkeyvaultcertificatelist--vault-name<KeyVaultName># List all deleted Key Vaults in the subscriptionazkeyvaultlist-deleted# Get properties of a deleted Key Vaultazkeyvaultshow-deleted--name<KeyVaultName># Get assigned rolesaz role assignment list --include-inherited --scope "/subscriptions/<subscription-uuid>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>"
# Get secret valueazkeyvaultsecretshow--vault-name<KeyVaultName>--name<SecretName># Get old versions secret valueazkeyvaultsecretshow--idhttps://<KeyVaultName>.vault.azure.net/secrets/<KeyVaultName>/<idOldVersion>
# Get keyvault tokencurl "$IDENTITY_ENDPOINT?resource=https://vault.azure.net&api-version=2017-09-01"-H secret:$IDENTITY_HEADER# Connect with PS AzureAD## $token from management APIConnect-AzAccount -AccessToken $token -AccountId 1937ea5938eb-10eb-a365-10abede52387 -KeyVaultAccessToken $keyvaulttoken
# Get details of a specific Key VaultGet-AzKeyVault-VaultName <KeyVaultName># List all keys in a Key VaultGet-AzKeyVaultKey-VaultName <KeyVaultName># List all secrets in a Key VaultGet-AzKeyVaultSecret-VaultName <KeyVaultName># List all certificates in a Key VaultGet-AzKeyVaultCertificate-VaultName <KeyVaultName># List all deleted Key Vaults in the subscriptionGet-AzKeyVault-InRemovedState# Get properties of a deleted Key VaultGet-AzKeyVault-VaultName <KeyVaultName>-InRemovedState# Get secret valuesGet-AzKeyVaultSecret-VaultName <vault_name>-Name <secret_name>-AsPlainText
#!/bin/bash# Dump all keyvaults from the subscription# Define Azure subscription IDAZ_SUBSCRIPTION_ID="your-subscription-id"# Specify the filename for outputCSV_OUTPUT="vault-names-list.csv"# Login to Azure accountazlogin# Select the desired subscriptionazaccountset--subscription $AZ_SUBSCRIPTION_ID# Retrieve all resource groups within the subscriptionAZ_RESOURCE_GROUPS=$(azgrouplist--query"[].name"-otsv)# Initialize the CSV file with headersecho"Vault Name,Associated Resource Group"> $CSV_OUTPUT# Iterate over each resource groupfor GROUP in $AZ_RESOURCE_GROUPSdo# Fetch key vaults within the current resource groupVAULT_LIST=$(azkeyvaultlist--resource-group $GROUP --query"[].name"-otsv)# Process each key vaultfor VAULT in $VAULT_LISTdo# Extract the key vault's nameVAULT_NAME=$(azkeyvaultshow--name $VAULT --resource-group $GROUP --query"name"-otsv)# Append the key vault name and its resource group to the fileecho"$VAULT_NAME,$GROUP">> $CSV_OUTPUTdonedone