Aplikasi, Kunci API, dan rahasia Azure Key Vault
Azure Key Vault adalah layanan Azure yang melindungi kunci kriptografi, rahasia, dan sertifikat. Ini menyediakan repositori terpusat, aman, dan sangat tersedia untuk informasi sensitif seperti kunci API. Salah satu metode untuk menghindari praktik kunci API yang tidak aman menyematkan langsung di kode sumber aplikasi Anda adalah mengonfigurasi aplikasi Anda untuk berinteraksi dengan kunci API yang disimpan dengan aman di Azure Key Vault.
Dalam artikel ini Anda mempelajari cara membuat instans Key Vault, menambahkan kunci API sebagai rahasia ke brankas kunci ini, lalu mengonfigurasi brankas kunci menggunakan praktik terbaik. Praktik terbaik ini termasuk membatasi akses menggunakan kontrol akses berbasis peran (RBAC), mengaktifkan pemantauan, dan membatasi akses jaringan.
Membuat dan mengamankan instans Azure Key Vault
Azure Key Vault memungkinkan Anda menyimpan kunci kriptografi, rahasia, dan sertifikat dengan aman. Anda harus menyebarkan brankas kunci terpisah untuk lingkungan yang berbeda (pengembangan, penahapan, produksi) dan aplikasi.
Membuat grup Sumber Daya dan instans brankas kunci
Untuk membuat instans brankas kunci, Anda dapat menggunakan perintah berikut dari Azure CLI atau Azure Cloud Shell:
Gunakan perintah
az group create
untuk membuat grup sumber daya:az group create --name myResourceGroup --location eastus
Anda dapat mengubah "eastus" ke lokasi yang lebih dekat dengan Anda, jika Anda mau.
Gunakan
az keyvault create
untuk membuat brankas kunci:az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup
Ganti
<your-unique-keyvault-name>
dengan nama yang unik di seluruh Azure. Anda biasanya menggunakan nama pribadi atau perusahaan bersama dengan nomor dan pengidentifikasi lain.
Menambahkan kunci API ke Azure Key Vault sebagai rahasia
Setelah membuat instans Azure Key Vault, Anda dapat menambahkan kunci API sebagai rahasia ke instans Azure Key Vault ini.
Berikut ini menggunakan perintah azure CLI az keyvault secret set untuk menambahkan rahasia bernama MyApiKey ke keyvault dan mengatur rahasia kedaluwarsa setelah 180 hari:
az keyvault secret set \
--vault-name "<YourKeyVaultName>" \
--name "MyApiKey" \
--value "<YourSecretValue>"
--expires "$(date -u -d '+180 days' +'%Y-%m-%dT%H:%M:%SZ')"
Anda harus bertujuan untuk memutar kunci API Anda secara berkala. Bergantung pada kebutuhan keamanan organisasi Anda, Anda dapat memilih untuk memutar kunci lebih sering atau kurang dari setiap 180 hari. Anda dapat mengonfigurasi langganan Event Grid untuk peristiwa "SecretNearExpiry" sebagai metode menerima pemberitahuan tentang rahasia kunci API yang kedaluwarsa.
Membatasi akses ke Key Vault menggunakan RBAC
Anda dapat membatasi akses ke instans Azure Key Vault sehingga hanya identitas aplikasi yang memiliki akses ke Azure Key Vault.
Untuk melakukan ini, konfigurasikan peran Kontrol Akses Berbasis Peran (RBAC) menggunakan perintah az role assignment create Azure CLI:
az role assignment create --role "Key Vault Secrets User" \
--assignee <object-id-of-app-or-user> \
--scope /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<key-vault-name>
Mengaktifkan pengelogan dan pemberitahuan Key Vault
Anda harus mengaktifkan pengelogan dan pemberitahuan pada instans Key Vault Anda sebagai metode mendeteksi aktivitas yang berpotensi mencurigakan.
Untuk mengaktifkan Pengelogan dan Pemberitahuan Azure Key Vault, gunakan perintah buat pengaturan diagnostik monitor az Azure CLI:
az monitor diagnostic-settings create \
--name myDiagnosticSettings \
--resource {key-vault-resource-id} \
--logs '[{"category": "AuditEvent","enabled": true}]' \
--workspace {log-analytics-workspace-id}
Perintah ini membuat pengaturan diagnostik bernama myDiagnosticSettings
, mengonfigurasinya untuk Azure Key Vault yang ditentukan, memungkinkan AuditEvent
kategori log, yang melacak peristiwa terkait keamanan dan akses dan mengirim log ke ruang kerja Analitik Log yang ditentukan untuk pemantauan, analisis, dan pemberitahuan. Ini memungkinkan Anda memantau pola akses, mendeteksi upaya akses yang tidak sah, dan mengonfigurasi pemberitahuan untuk peristiwa keamanan penting (misalnya, seseorang mencoba mengakses rahasia tanpa izin yang tepat).
Anda dapat menjalankan perintah az monitor scheduled-query create Azure CLI untuk memantau log di ruang kerja Log Analytics yang ditentukan untuk upaya akses tidak sah ke rahasia Azure Key Vault dan memicu pemberitahuan jika ada upaya akses yang tidak sah yang cocok terdeteksi:
az monitor scheduled-query create \
--name "Suspicious Access Alert" \
--resource-group myResourceGroup \
--scopes {log-analytics-workspace-resource-id} \
--condition "AzureDiagnostics | where ResourceType == 'VAULTS' | where OperationName == 'SecretGet' | where ResultSignature == 'Unauthorized'"
Membatasi akses jaringan ke Key Vault
Anda harus membatasi akses jaringan ke Azure Key Vault sehingga vault hanya menerima permintaan dari lokasi jaringan yang diketahui. Ada dua metode umum yang dapat Anda gunakan untuk melakukan ini:
- Azure Private Link. Ini membuat titik akhir privat dalam jaringan virtual Anda, memungkinkan aplikasi Anda terhubung ke Azure Key Vault tanpa melintas ke internet publik. Opsi ini adalah yang paling aman karena lalu lintas tetap berada dalam jaringan Anda, tetapi memerlukan pembuatan titik akhir privat dan mengonfigurasi DNS.
- Aturan Firewall. Anda dapat mengonfigurasi pengaturan firewall Azure Key Vault, yang terletak di bawah Jaringan, dengan daftar rentang IP yang diizinkan. Anda juga dapat menggunakan metode ini untuk mengizinkan akses ke jaringan virtual yang ada, tetapi ini mengharuskan Anda mengaktifkan titik akhir layanan untuk Microsoft.KeyVault pada subnet yang dipilih.
Anda dapat membuat titik akhir privat menggunakan perintah buat titik akhir privat jaringan az Azure CLI:
az network private-endpoint create \
--name myPrivateEndpoint \
--resource-group myResourceGroup \
--vnet-name myVNet \
--subnet mySubnet \
--private-connection-resource-id /subscriptions/{subscription}/resourceGroups/{rg}/providers/Microsoft.KeyVault/vaults/{key-vault-name} \
--group-id vault \
--connection-name myConnection
You can create firewall rules on the Azure Key Vault instance using the Azure CLI [az keyvault network-rule add](/cli/azure/keyvault/network-rule#az-keyvault-network-rule-add) command, substituting the appropriate key vault names, resource groups, subnet, and subnet mask information:
```azurecli
az keyvault network-rule add \
--name {key-vault-name} \
--resource-group myResourceGroup \
--ip-address {trusted-ip-address}/32
Azure Key Vault memberlakukan HTTPS untuk semua komunikasi. Ini memastikan bahwa kunci API Anda dan data sensitif lainnya dienkripsi saat transit, melindunginya dari serangan penyadapan dan man-in-the-middle.
Berinteraksi dengan Azure Key Vault menggunakan Python
Untuk berinteraksi dengan Azure Key Vault menggunakan Python, instal pustaka identitas Azure untuk ID Microsoft Entra dan pustaka rahasia Azure Key Vault:
pip install azure-identity
pip install azure-keyvault-secrets
Anda dapat menggunakan pustaka klien Azure Identity dan Azure Key Vault Secrets untuk mengelola rahasia secara terprogram:
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential
key_vault_name = "<your-key-vault-name>"
KVUri = f"https://{key_vault_name}.vault.azure.net"
secret_name = "<your-secret-name>"
credential = DefaultAzureCredential()
client = SecretClient(vault_url=KVUri, credential=credential)
retrieved_secret = client.get_secret(secret_name)
# Now you can use the API key:
api_key = retrieved_secret.value
print(f"The API key is: {api_key}")
Dalam kode sampel ini:
- DefaultAzureCredential: Kelas ini mencoba mengautentikasi menggunakan berbagai metode (variabel lingkungan, identitas terkelola, dll.), membuatnya cocok untuk lingkungan Azure yang berbeda.
- SecretClient: Kelas ini menyediakan metode untuk berinteraksi dengan rahasia di Key Vault.
- get_secret(): Mengambil rahasia dari Key Vault.