🔐 Azure Key Vault – Full Creation + Access Workflows¶
🔴 STEP 0: COMMON SETUP (ONCE)¶
Prerequisites¶
- Azure Subscription
- Azure CLI installed
- Logged in to Azure
1️⃣ CREATE RESOURCE GROUP¶
2️⃣ CREATE AZURE KEY VAULT (RBAC MODE)¶
az keyvault create \
--name raidenlabs-kv \
--resource-group RaidenLabs-Website \
--location centralindia \
--enable-rbac-authorization true
✔ Uses Azure RBAC (recommended) ✔ Centralized permission model
3️⃣ CREATE A SECRET¶
az keyvault secret set \
--vault-name raidenlabs-kv \
--name DB-CONNECTION-STRING \
--value "mongodb://raidenUser:p@ssW0rd123@db01.mongo.cloud:27017/raidenDB"
🔑 ACCESS METHODS — FULL WORKFLOWS¶
1️⃣ AZURE PORTAL (Console / UI)¶
Workflow¶
Steps¶
- Assign role:
az role assignment create \
--assignee <USER_OBJECT_ID> \
--role "Key Vault Secrets Officer" \
--scope <KEY_VAULT_ID>
- Portal → Key Vault → Secrets → Show value
2️⃣ AZURE CLI (User Login)¶
Workflow¶
Steps¶
az keyvault secret show \
--vault-name raidenlabs-kv \
--name DB-CONNECTION-STRING \
--query value -o tsv
3️⃣ MANAGED IDENTITY (INSIDE AZURE – BEST)¶
Workflow¶
Steps¶
Enable Managed Identity¶
Grant access¶
az role assignment create \
--assignee <PRINCIPAL_ID> \
--role "Key Vault Secrets User" \
--scope <KEY_VAULT_ID>
Access (App Setting)¶
DB_CONNECTION_STRING=@Microsoft.KeyVault(SecretUri=https://raidenlabs-kv.vault.azure.net/secrets/DB-CONNECTION-STRING/)
In Code¶
4️⃣ AZURE SDKs (APPLICATION CODE)¶
Workflow¶
Steps¶
import { DefaultAzureCredential } from "@azure/identity";
import { SecretClient } from "@azure/keyvault-secrets";
const client = new SecretClient(
"https://raidenlabs-kv.vault.azure.net",
new DefaultAzureCredential()
);
const secret = await client.getSecret("DB-CONNECTION-STRING");
console.log(secret.value);
5️⃣ SERVICE PRINCIPAL (CLIENT ID + SECRET)¶
Workflow¶
Steps¶
Create SP¶
az ad sp create-for-rbac \
--name raiden-kv-sp \
--role "Key Vault Secrets User" \
--scopes <KEY_VAULT_ID>
Export creds¶
export AZURE_CLIENT_ID=11111111-aaaa-bbbb-cccc-222222222222
export AZURE_CLIENT_SECRET=spSecretXyZ987654
export AZURE_TENANT_ID=33333333-dddd-eeee-ffff-444444444444
Access¶
6️⃣ OIDC / FEDERATED IDENTITY (CI/CD – RECOMMENDED)¶
Workflow¶
Steps¶
Create App Registration¶
Add Federated Credential (GitHub)¶
{
"issuer": "https://token.actions.githubusercontent.com",
"subject": "repo:raidenlabs/backend:ref:refs/heads/main",
"audiences": ["api://AzureADTokenExchange"]
}
GitHub Action¶
permissions:
id-token: write
steps:
- uses: azure/login@v1
with:
client-id: 55555555-aaaa-bbbb-cccc-666666666666
tenant-id: 77777777-dddd-eeee-ffff-888888888888
subscription-id: 99999999-1111-2222-3333-444444444444
- run: |
az keyvault secret show \
--vault-name raidenlabs-kv \
--name DB-CONNECTION-STRING
7️⃣ ENVIRONMENT VARIABLE (KEY VAULT REFERENCE)¶
Workflow¶
Steps¶
az webapp config appsettings set \
--name raiden-backend-app \
--resource-group RaidenLabs-Website \
--settings \
DB_CONNECTION_STRING="@Microsoft.KeyVault(SecretUri=https://raidenlabs-kv.vault.azure.net/secrets/DB-CONNECTION-STRING/)"
8️⃣ AZURE VM / AKS (WORKLOAD IDENTITY)¶
Workflow¶
Steps (VM)¶
9️⃣ THIRD-PARTY TOOLS (Terraform)¶
Workflow¶
Steps¶
data "azurerm_key_vault_secret" "db" {
name = "DB-CONNECTION-STRING"
key_vault_id = "/subscriptions/xxx/resourceGroups/RaidenLabs-Website/providers/Microsoft.KeyVault/vaults/raidenlabs-kv"
}
🧠 FINAL MENTAL MODEL (VERY IMPORTANT)¶
✅ REAL-WORLD RECOMMENDATION¶
| Environment | Method |
|---|---|
| Local Dev | Azure CLI |
| Azure App | Managed Identity |
| CI/CD | OIDC |
| Automation | OIDC |
| Emergency | Portal |
| Legacy | Service Principal |
Here are the exact Azure CLI commands to delete a secret and delete the Key Vault, plus recover / purge (very important because of soft delete).
🔐 Azure Key Vault – Delete & Cleanup Commands¶
1️⃣ Delete a Secret (Soft-Deleted)¶
Verify deleted secrets¶
♻️ Recover a Deleted Secret (If Needed)¶
🔥 Permanently Delete (Purge) a Secret¶
⚠️ Irreversible ⚠️ Requires Purge permission
2️⃣ Delete the Key Vault (Soft-Deleted)¶
This soft-deletes the vault.
♻️ Recover the Deleted Key Vault¶
🔥 Permanently Delete (Purge) the Key Vault¶
⚠️ Required when:
- Re-creating a vault with the same name
- Cleaning up labs
🧠 VERY IMPORTANT NOTES¶
Soft Delete Rules¶
- Always enabled
- Applies to secrets, keys, certs, and vaults
Purge Protection¶
- ❌ Disabled → Purge allowed
- ✅ Enabled → Purge blocked until retention ends
✅ QUICK CHEAT SHEET¶
| Action | Command |
|---|---|
| Delete secret | az keyvault secret delete |
| Recover secret | az keyvault secret recover |
| Purge secret | az keyvault secret purge |
| Delete vault | az keyvault delete |
| Recover vault | az keyvault recover |
| Purge vault | az keyvault purge |