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:

Diagram that shows the rotation solution.

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.

  1. Tiga puluh hari sebelum rahasia kedaluwarsa, Key Vault menerbitkan peristiwa hampir kedaluwarsa ke Event Grid.
  2. Event Grid memeriksa langganan peristiwa dan menggunakan HTTP POST untuk memanggil titik akhir aplikasi fungsi berlangganan acara.
  3. Aplikasi fungsi mengidentifikasi kunci alternatif (bukan yang terbaru) dan memanggil akun penyimpanan untuk meregenerasinya.
  4. 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:

Link that's labelled Deploy to Azure.

  1. Pada Grup Sumber Daya, pilih Buat baru. Beri nama rotasi vault grup lalu pilih OK.

  2. Pilih Tinjau + buat.

  3. Pilih Buat.

    Screenshot that shows how to create a resource group.

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
  1. Pilih tautan penerapan templat Azure:

    Azure template deployment link.

  2. Di daftar Grup sumber daya, pilih vaultrotation.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. Dalam kotak Tipe Paket Azure App Service, pilih paket hosting. Paket Premium hanya diperlukan ketika brankas kunci Anda berada di belakang firewall.

  8. Dalam kotak Nama Aplikasi fungsi, masukkan nama aplikasi fungsi.

  9. Dalam kotak Nama Rahasia, masukkan nama rahasia tempat Anda akan menyimpan kunci akses.

  10. 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 .

  11. Pilih Tinjau + buat.

  12. Pilih Buat.

    Screenshot that shows how to create and deploy function.

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:

Screenshot that shows the Your deployment is complete page.

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 = (get-date).AddDays(+1).ToString("yyyy-MM-ddTHH:mm:ssZ")
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:

Screenshot that shows the output of the A Z keyvault secret show command for the first storage account.

Ambil kunci akses untuk membandingkan nilai:

az storage account keys list -n vaultrotationstorage 

Perhatikan bahwa value kunci sama dengan rahasia dalam brankas kunci:

Screenshot that shows the output of the A Z storage account keys list command for the first storage account.

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
  1. Pilih tautan penerapan templat Azure:

    Azure template deployment link.

  2. Di daftar Grup sumber daya, pilih vaultrotation.

  3. 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.

  4. Dalam kotak Nama Akun Azure Storagemasukkan nama akun penyimpanan yang berisi kunci akses untuk diputar.

  5. 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.

  6. Dalam kotak Nama Key Vault, masukkan nama brankas kunci.

  7. Dalam kotak Nama Aplikasi fungsi, masukkan nama aplikasi fungsi.

  8. Dalam kotak Nama Rahasia, masukkan nama rahasia tempat Anda akan menyimpan kunci akses.

  9. Pilih Tinjau + buat.

  10. Pilih Buat.

    Screenshot that shows how to create an additional storage account.

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 = (Get-Date).AddDays(+1).ToString('yyyy-MM-ddTHH:mm:ssZ')
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:

Screenshot that shows the output of the A Z keyvault secret show command for the second storage account.

Ambil kunci akses untuk membandingkan nilai:

az storage account keys list -n vaultrotationstorage 

Perhatikan bahwa value kunci sama dengan rahasia dalam brankas kunci:

Screenshot that shows the output of the A Z storage account keys list command for the second storage account.

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.

Langkah berikutnya