Otomatiskan rotasi rahasia untuk sumber daya yang menggunakan dua set mandat autentikasi
Cara terbaik mengautentikasi ke layanan Azure adalah menggunakan identitas terkelola, tetapi ada beberapa skenario yang bukan jadi pilihan. Dalam kasus tersebut, kunci akses atau kata sandi digunakan. Anda harus sering memutar tombol akses dan kata sandi.
Tutorial ini menunjukkan cara mengotomatiskan rotasi berkala rahasia untuk database dan layanan yang menggunakan dua set mandat autentikasi. Secara khusus, tutorial ini menunjukkan cara memutar kunci akun Azure Storage yang disimpan di Azure Key Vault sebagai rahasia. Anda akan menggunakan fungsi yang dipicu oleh pemberitahuan Azure Event Grid.
Catatan
Untuk layanan akun Penyimpanan, disarankan menggunakan ID Microsoft Entra untuk mengotorisasi permintaan. Untuk informasi selengkapnya, lihat Mengotorisasi akses ke blob menggunakan ID Microsoft Entra. Ada layanan yang memerlukan string koneksi akun penyimpanan dengan kunci akses. Untuk skenario itu, kami merekomendasikan solusi ini.
Berikut adalah solusi rotasi yang dijelaskan dalam tutorial ini:
Dalam solusi ini, Azure Key Vault menyimpan kunci akses individual akun penyimpanan sebagai versi rahasia yang sama, bergantian antara kunci utama dan sekunder dalam versi berikutnya. Ketika satu kunci akses disimpan dalam versi terbaru rahasia, kunci alternatif diregenerasi dan ditambahkan ke Key Vault sebagai versi terbaru baru dari rahasia. Solusi ini menyediakan seluruh siklus rotasi aplikasi untuk menyegarkan ke kunci regenerasi terbaru.
- Tiga puluh hari sebelum rahasia kedaluwarsa, Key Vault menerbitkan peristiwa hampir kedaluwarsa ke Event Grid.
- Event Grid memeriksa langganan peristiwa dan menggunakan HTTP POST untuk memanggil titik akhir aplikasi fungsi berlangganan acara.
- Aplikasi fungsi mengidentifikasi kunci alternatif (bukan yang terbaru) dan memanggil akun penyimpanan untuk meregenerasinya.
- Aplikasi fungsi menambahkan kunci baru yang diregenerasi ke Azure Key Vault sebagai versi baru rahasia.
Prasyarat
- Langganan Azure. Buat akun gratis.
- Azure Cloud Shell. Tutorial ini menggunakan portal Cloud Shell dengan PowerShell env
- Azure Key Vault.
- Dua akun penyimpanan Azure.
Catatan
Rotasi kunci akun penyimpanan bersama mencabut tanda tangan akses bersama (SAS) tingkat akun yang dihasilkan berdasarkan kunci tersebut. Setelah rotasi kunci akun penyimpanan, Anda harus meregenerasi token SAS tingkat akun untuk menghindari gangguan pada aplikasi.
Anda dapat menggunakan tautan penyebaran ini jika Anda tidak memiliki brankas kunci yang ada dan akun penyimpanan yang sudah ada:
Pada Grup Sumber Daya, pilih Buat baru. Beri nama rotasi vault grup lalu pilih OK.
Pilih Tinjau + buat.
Pilih Buat.
Anda sekarang akan memiliki brankas kunci dan dua akun penyimpanan. Anda bisa memverifikasi penyetelan ini di CLI Azure atau Azure PowerShell dengan menjalankan perintah ini:
az resource list -o table -g vaultrotation
Hasilnya akan terlihat seperti output berikut:
Name ResourceGroup Location Type Status
----------------------- -------------------- ---------- --------------------------------- --------
vaultrotation-kv vaultrotation westus Microsoft.KeyVault/vaults
vaultrotationstorage vaultrotation westus Microsoft.Storage/storageAccounts
vaultrotationstorage2 vaultrotation westus Microsoft.Storage/storageAccounts
Membuat dan menerapkan fungsi rotasi tombol
Selanjutnya, Anda akan membuat aplikasi fungsi dengan identitas yang dikelola sistem, selain komponen lain yang diperlukan. Anda juga akan menerapkan fungsi rotasi untuk kunci akun penyimpanan.
Fungsi rotasi aplikasi fungsi memerlukan komponen dan konfigurasi berikut:
- Paket Azure App Service
- Akun penyimpanan untuk mengelola pemicu aplikasi fungsi
- Kebijakan pada akses untuk mengakses rahasia di Key Vault
- Peran Layanan Operator Kunci Akun Penyimpanan yang ditetapkan ke aplikasi fungsi sehingga dapat mengakses kunci akses akun penyimpanan
- Fungsi rotasi tombol dengan pemicu kejadian dan pemicu HTTP (rotasi sesuai permintaan)
- Langganan peristiwa Azure Event Grid untuk peristiwa SecretNearExpiry
Pilih tautan penerapan templat Azure:
Di daftar Grup sumber daya, pilih vaultrotation.
Dalam kotak Akun Azure Storage RG, masukkan nama grup sumber daya tempat akun penyimpanan Anda berada. Pertahankan nilai default [resourceGroup().name] jika akun Azure Storage Anda sudah berada di grup sumber daya yang sama dengan tempat Anda akan menerapkan fungsi rotasi kunci.
Dalam kotak Nama Akun Azure Storagemasukkan nama akun penyimpanan yang berisi kunci akses untuk diputar. Pertahankan nilai default [concat(resourceGroup().name, 'storage')] jika Anda menggunakan akun penyimpanan yang dibuat di Prasyarat.
Dalam kotak RG Key Vault, masukkan nama grup sumber daya tempat brankas kunci Anda berada. Pertahankan nilai default [resourceGroup().name] jika brankas kunci Anda sudah ada di grup sumber daya yang sama tempat Anda akan menerapkan fungsi rotasi kunci.
Dalam kotak Nama Key Vault, masukkan nama brankas kunci. Pertahankan nilai default [concat(resourceGroup().name, '-kv')] jika Anda menggunakan brankas kunci yang dibuat di Prasyarat.
Dalam kotak Tipe Paket Azure App Service, pilih paket hosting. Paket Premium hanya diperlukan ketika brankas kunci Anda berada di belakang firewall.
Dalam kotak Nama Aplikasi fungsi, masukkan nama aplikasi fungsi.
Dalam kotak Nama Rahasia, masukkan nama rahasia tempat Anda akan menyimpan kunci akses.
Dalam kotak URL Repo, masukkan lokasi kode fungsi GitHub. Dalam tutorial ini, Anda dapat menggunakan https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git .
Pilih Tinjau + buat.
Pilih Buat.
Setelah menyelesaikan langkah-langkah sebelumnya, Anda akan memiliki akun penyimpanan, farm server, aplikasi fungsi dan Application Insights. Setelah penerapan selesai, Anda akan melihat halaman ini:
Catatan
Jika mengalami kegagalan, Anda dapat memilih Menerapkan Kembali untuk menyelesaikan penerapan komponen.
Anda dapat menemukan penerapan templat dan kode untuk fungsi rotasi di Sampel Azure.
Menambahkan kunci akses akun penyimpanan ke rahasia Key Vault
Atur kebijakan akses Anda untuk memberikan izin kelola rahasia kepada pengguna:
az keyvault set-policy --upn <email-address-of-user> --name vaultrotation-kv --secret-permissions set delete get list
Kini Anda dapat membuat rahasia baru dengan kunci akses akun penyimpanan sebagai nilainya. Anda juga memerlukan ID sumber daya akun penyimpanan, periode validitas rahasia, dan ID kunci untuk ditambahkan ke rahasia sehingga fungsi rotasi dapat meregenerasi kunci di akun penyimpanan.
Tentukan ID sumber daya akun penyimpanan. Anda dapat menemukan nilai ini di id
properti.
az storage account show -n vaultrotationstorage
Daftar kunci akses akun penyimpanan sehingga Anda bisa mendapatkan nilai kunci:
az storage account keys list -n vaultrotationstorage
Tambahkan rahasia ke brankas kunci dengan periode validitas selama 60 hari, ID sumber daya akun penyimpanan, dan untuk tujuan demonstrasi guna memicu rotasi segera atur tanggal kedaluwarsa ke besok. Jalankan perintah ini dengan menggunakan nilai yang diambil untuk key1Value
dan storageAccountResourceId
:
tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey --vault-name vaultrotation-kv --value <key1Value> --tags "CredentialId=key1" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate
Rahasia ini akan memicu SecretNearExpiry
peristiwa dalam beberapa menit. Peristiwa ini pada gilirannya akan memicu fungsi untuk memutar rahasia dengan kedaluwarsa diatur ke 60 hari. Dalam konfigurasi itu, peristiwa 'SecretNearExpiry' akan dipicu setiap 30 hari (30 hari sebelum kedaluwarsa) dan fungsi rotasi akan bergantian rotasi antara key1 dan key2.
Anda dapat memverifikasi bahwa kunci akses telah diregenerasi melalui pengembalian kunci akun penyimpanan dan rahasia Key Vault dan membandingkannya.
Gunakan perintah ini untuk mendapatkan informasi rahasia:
az keyvault secret show --vault-name vaultrotation-kv --name storageKey
Pemberitahuan yang CredentialId
diperbarui ke alternatif keyName
dan yang value
diregenerasi:
Ambil kunci akses untuk membandingkan nilai:
az storage account keys list -n vaultrotationstorage
Perhatikan bahwa value
kunci sama dengan rahasia dalam brankas kunci:
Menggunakan fungsi rotasi yang sudah ada untuk beberapa akun penyimpanan
Anda dapat menggunakan kembali aplikasi fungsi yang sama untuk memutar kunci untuk beberapa akun penyimpanan.
Untuk menambahkan kunci akun penyimpanan ke fungsi yang sudah ada untuk rotasi, Anda perlu:
- Peran Storage Account Key Operator Service yang ditetapkan ke aplikasi fungsi sehingga dapat mengakses kunci akses akun penyimpanan
- Langganan peristiwa Event Grid untuk peristiwa SecretNearExpiry
Pilih tautan penerapan templat Azure:
Di daftar Grup sumber daya, pilih vaultrotation.
Dalam kotak Akun Azure Storage RG, masukkan nama grup sumber daya tempat akun penyimpanan Anda berada. Pertahankan nilai default [resourceGroup().name] jika akun Azure Storage Anda sudah berada di grup sumber daya yang sama dengan tempat Anda akan menerapkan fungsi rotasi kunci.
Dalam kotak Nama Akun Azure Storagemasukkan nama akun penyimpanan yang berisi kunci akses untuk diputar.
Dalam kotak RG Key Vault, masukkan nama grup sumber daya tempat brankas kunci Anda berada. Pertahankan nilai default [resourceGroup().name] jika brankas kunci Anda sudah ada di grup sumber daya yang sama tempat Anda akan menerapkan fungsi rotasi kunci.
Dalam kotak Nama Key Vault, masukkan nama brankas kunci.
Dalam kotak Nama Aplikasi fungsi, masukkan nama aplikasi fungsi.
Dalam kotak Nama Rahasia, masukkan nama rahasia tempat Anda akan menyimpan kunci akses.
Pilih Tinjau + buat.
Pilih Buat.
Menambahkan kunci akses akun penyimpanan lain ke rahasia Key Vault
Tentukan ID sumber daya akun penyimpanan. Anda dapat menemukan nilai ini di id
properti.
az storage account show -n vaultrotationstorage2
Daftar kunci akses akun penyimpanan sehingga Anda bisa mendapatkan nilai key2:
az storage account keys list -n vaultrotationstorage2
Tambahkan rahasia ke brankas kunci dengan periode validitas selama 60 hari, ID sumber daya akun penyimpanan, dan untuk tujuan demonstrasi guna memicu rotasi segera atur tanggal kedaluwarsa ke besok. Jalankan perintah ini dengan menggunakan nilai yang diambil untuk key2Value
dan storageAccountResourceId
:
tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey2 --vault-name vaultrotation-kv --value <key2Value> --tags "CredentialId=key2" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate
Gunakan perintah ini untuk mendapatkan informasi rahasia:
az keyvault secret show --vault-name vaultrotation-kv --name storageKey2
Pemberitahuan yang CredentialId
diperbarui ke alternatif keyName
dan yang value
diregenerasi:
Ambil kunci akses untuk membandingkan nilai:
az storage account keys list -n vaultrotationstorage
Perhatikan bahwa value
kunci sama dengan rahasia dalam brankas kunci:
Menonaktifkan rotasi rahasia
Anda dapat menonaktifkan rotasi rahasia hanya dengan menghapus langganan Event Grid untuk rahasia tersebut. Gunakan cmdlet Azure PowerShell Remove-AzEventGridSubscription atau perintah Azure CLI az event grid event--subscription delete.
Fungsi rotasi Key Vault untuk dua set mandat
Templat fungsi rotasi untuk dua set mandat dan beberapa fungsi siap digunakan:
Catatan
Fungsi rotasi ini dibuat oleh anggota komunitas dan bukan oleh Microsoft. Fungsi komunitas tidak didukung di bawah program atau layanan dukungan Microsoft apa pun, dan tersedia SEBAGAI IS tanpa jaminan apa pun.