Kelola kunci akun penyimpanan dengan Key Vault dan Azure PowerShell (lama)

Penting

Kunci Akun Penyimpanan Terkelola Key Vault (lama) didukung apa adanya tanpa pembaruan lain yang direncanakan. Hanya SAS Akun yang didukung dengan definisi SAS yang ditandatangani versi layanan penyimpanan selambat-lambatnya 28-03-2018.

Penting

Sebaiknya gunakan integrasi Azure Storage dengan ID Microsoft Entra, layanan manajemen identitas dan akses berbasis cloud Microsoft. Integrasi Microsoft Entra tersedia untuk blob dan antrean Azure, dan menyediakan akses berbasis token OAuth2 ke Azure Storage (sama seperti Azure Key Vault). MICROSOFT Entra ID memungkinkan Anda mengautentikasi aplikasi klien dengan menggunakan aplikasi atau identitas pengguna, alih-alih kredensial akun penyimpanan. Anda dapat menggunakan identitas terkelola Microsoft Entra saat menjalankan di Azure. Identitas terkelola menghapus kebutuhan akan autentikasi klien dan menyimpan kredensial di dalam atau dengan aplikasi Anda. Gunakan solusi ini hanya ketika autentikasi Microsoft Entra tidak dimungkinkan.

Akun penyimpanan Azure menggunakan kredensial yang terdiri atas nama akun dan kunci. Kuncinya dibuat secara otomatis dan berfungsi sebagai kata sandi, bukan sebagai kunci kriptografi. Key Vault mengelola kunci akun penyimpanan dengan meregenerasinya secara berkala di akun penyimpanan dan menyediakan token tanda tangan akses bersama untuk akses yang didelegasikan ke sumber daya di akun penyimpanan Anda.

Anda dapat menggunakan fitur kunci akun penyimpanan terkelola Key Vault untuk mencantumkan (menyinkronkan) kunci dengan akun penyimpanan Azure, dan meregenerasi (memutar) kunci secara berkala. Anda dapat mengelola kunci untuk akun penyimpanan dan akun penyimpanan Klasik.

Saat Anda menggunakan fitur kunci akun penyimpanan terkelola, pertimbangkan poin berikut:

  • Nilai kunci tidak pernah dikembalikan dalam menanggapi penelepon.
  • Hanya Key Vault yang harus mengelola kunci akun penyimpanan Anda. Jangan mengelola sendiri kunci dan hindari mengganggu proses Key Vault.
  • Hanya satu objek Key Vault yang harus mengelola kunci akun penyimpanan. Jangan mengizinkan pengelolaan kunci dari beberapa objek.
  • Regenerasi kunci dengan hanya menggunakan Key Vault. Jangan meregenerasi kunci akun penyimpanan Anda secara manual.

Penting

Regenerasi kunci langsung di akun penyimpanan merusak pengaturan akun penyimpanan terkelola dan dapat membatalkan token SAS yang digunakan serta menyebabkan pemadaman.

Catatan

Sebaiknya Anda menggunakan modul Azure Az PowerShell untuk berinteraksi dengan Azure. Lihat Menginstal Azure PowerShell untuk memulai. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.

ID aplikasi perwakilan layanan

Penyewa Microsoft Entra menyediakan setiap aplikasi terdaftar dengan perwakilan layanan. Perwakilan layanan berfungsi sebagai ID Aplikasi, yang digunakan selama pengaturan otorisasi untuk akses ke sumber daya Azure lainnya melalui Azure RBAC.

Key Vault adalah aplikasi Microsoft yang telah terdaftar sebelumnya di semua penyewa Microsoft Entra. Key Vault terdaftar di bawah ID Aplikasi yang sama di setiap cloud Azure.

Penyewa Cloud ID Aplikasi
Microsoft Entra ID Azure Government 7e7c393b-45d0-48b1-a35e-2905ddf8183c
Microsoft Entra ID Azure publik cfa8b339-82a2-471a-a3c9-0fc0be7a4093
Lainnya Mana pun cfa8b339-82a2-471a-a3c9-0fc0be7a4093

Prasyarat

Untuk menyelesaikan panduan ini, Anda harus terlebih dahulu melakukan hal berikut:

Mengelola kunci akun penyimpanan.

Menyambungkan ke akun Azure Anda

Otentikasi sesi PowerShell Anda menggunakan cmdlet Connect-AzAccount.

Connect-AzAccount

Jika Anda memiliki beberapa langganan Azure, Anda bisa mencantumkannya menggunakan cmdlet Get-AzSubscription dan menentukan langganan yang ingin Anda gunakan dengan cmdlet Set-AzContext.

Set-AzContext -SubscriptionId <subscriptionId>

Mengatur variabel

Pertama, atur variabel yang akan digunakan oleh cmdlet PowerShell dalam langkah-langkah berikut. Pastikan untuk memperbarui tempat penampung "YourResourceGroupName", "YourStorageAccountName", dan "YourKeyVaultName", dan atur $keyVaultSpAppId ke cfa8b339-82a2-471a-a3c9-0fc0be7a4093 (seperti yang ditentukan dalam ID aplikasi perwakilan layanan).

Kami juga akan menggunakan cmdlet Azure PowerShell Get-AzContext dan Get-AzStorageAccount untuk mendapatkan ID pengguna dan konteks akun penyimpanan Azure Anda.

$resourceGroupName = <YourResourceGroupName>
$storageAccountName = <YourStorageAccountName>
$keyVaultName = <YourKeyVaultName>
$keyVaultSpAppId = "cfa8b339-82a2-471a-a3c9-0fc0be7a4093"
$storageAccountKey = "key1" #(key1 or key2 are allowed)

# Get your User Id
$userId = (Get-AzContext).Account.Id

# Get a reference to your Azure storage account
$storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName

Catatan

Untuk Akun Penyimpanan Klasik, gunakan "primer" dan "sekunder" untuk $storageAccountKey
Gunakan 'Get-AzResource -Name "ClassicStorageAccountName" -ResourceGroupName $resourceGroupName' alih-alih'Get-AzStorageAccount' untuk Akun Penyimpanan Klasik

Memberikan akses Key Vault ke akun penyimpanan Anda

Sebelum Key Vault dapat mengakses dan mengelola kunci akun penyimpanan, Anda harus mengizinkan aksesnya ke akun penyimpanan Anda. Aplikasi Key Vault memerlukan izin untuk mencantumkan daftar dan meregenerasi kunci untuk akun penyimpanan Anda. Izin ini diaktifkan melalui peran bawaan Azure Peran Layanan Operator Kunci Akun Penyimpanan.

Tetapkan peran ini ke perwakilan layanan Key Vault, membatasi cakupan ke akun penyimpanan Anda, menggunakan cmdlet Azure PowerShell New-AzRoleAssignment.

# Assign Azure role "Storage Account Key Operator Service Role" to Key Vault, limiting the access scope to your storage account. For a classic storage account, use "Classic Storage Account Key Operator Service Role."
New-AzRoleAssignment -ApplicationId $keyVaultSpAppId -RoleDefinitionName 'Storage Account Key Operator Service Role' -Scope $storageAccount.Id

Setelah penetapan peran yang berhasil, Anda harus melihat output yang mirip dengan contoh berikut:

RoleAssignmentId   : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso/providers/Microsoft.Authorization/roleAssignments/189cblll-12fb-406e-8699-4eef8b2b9ecz
Scope              : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso
DisplayName        : Azure Key Vault
SignInName         :
RoleDefinitionName : storage account Key Operator Service Role
RoleDefinitionId   : 81a9662b-bebf-436f-a333-f67b29880f12
ObjectId           : 93c27d83-f79b-4cb2-8dd4-4aa716542e74
ObjectType         : ServicePrincipal
CanDelegate        : False

Jika Key Vault telah ditambahkan ke peran di akun penyimpanan Anda, Anda akan menerima kesalahan "Penetapan peran sudah ada.". Anda juga dapat memverifikasi penetapan peran, menggunakan halaman "Kontrol akses (IAM)" akun penyimpanan di portal Microsoft Azure.

Menberikan izin akun pengguna Anda ke akun penyimpanan terkelola

Gunakan cmdlet Azure PowerShell Set-AzKeyVaultAccessPolicy untuk memperbarui kebijakan akses Key Vault dan memberikan izin akun penyimpanan ke akun pengguna Anda.

# Give your user principal access to all storage account permissions, on your Key Vault instance

Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -UserPrincipalName $userId -PermissionsToStorage get, list, delete, set, update, regeneratekey, getsas, listsas, deletesas, setsas, recover, backup, restore, purge

Izin untuk akun penyimpanan tidak tersedia di halaman "Kebijakan akses" akun penyimpanan di portal Azure.

Menambahkan akun penyimpanan terkelola ke instans Key Vault Anda

Gunakan cmdlet Add-AzKeyVaultManagedStorageAccount Azure PowerShell untuk membuat akun penyimpanan terkelola di instans Key Vault Anda. Switch -DisableAutoRegenerateKey menentukan TIDAK untuk meregenerasi kunci akun penyimpanan.

# Add your storage account to your Key Vault's managed storage accounts

Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName $storageAccountKey -DisableAutoRegenerateKey

Setelah berhasil menambahkan akun penyimpanan tanpa regenerasi kunci, Anda akan melihat output yang mirip dengan contoh berikut:

Id                  : https://kvcontoso.vault.azure.net:443/storage/sacontoso
Vault Name          : kvcontoso
AccountName         : sacontoso
Account Resource Id : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso
Active Key Name     : key1
Auto Regenerate Key : False
Regeneration Period : 90.00:00:00
Enabled             : True
Created             : 11/19/2018 11:54:47 PM
Updated             : 11/19/2018 11:54:47 PM
Tags                :

Aktifkan regenerasi kunci

Jika Anda ingin Key Vault meregenerasi kunci akun penyimpanan Anda secara berkala, Anda dapat menggunakan cmdlet Azure PowerShell Add-AzKeyVaultManagedStorageAccount untuk mengatur periode regenerasi. Dalam contoh ini, kami menetapkan periode regenerasi 30 hari. Saat waktunya untuk memutar, Key Vault meregenerasi kunci yang tidak aktif lalu mengatur kunci yang baru dibuat sebagai aktif. Kunci yang digunakan untuk mengeluarkan token SAS adalah kunci aktif.

$regenPeriod = [System.Timespan]::FromDays(30)

Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName $storageAccountKey -RegenerationPeriod $regenPeriod

Setelah berhasil menambahkan akun penyimpanan tanpa regenerasi kunci, Anda akan melihat output yang mirip dengan contoh berikut:

Id                  : https://kvcontoso.vault.azure.net:443/storage/sacontoso
Vault Name          : kvcontoso
AccountName         : sacontoso
Account Resource Id : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso
Active Key Name     : key1
Auto Regenerate Key : True
Regeneration Period : 30.00:00:00
Enabled             : True
Created             : 11/19/2018 11:54:47 PM
Updated             : 11/19/2018 11:54:47 PM
Tags                :

Token tanda tangan akses bersama

Anda juga dapat meminta Key Vault untuk menghasilkan token tanda tangan akses bersama. Tanda tangan akses bersama menyediakan akses yang didelegasikan ke sumber daya di akun penyimpanan Anda. Anda dapat memberi klien akses ke sumber daya di akun penyimpanan Anda tanpa membagikan kunci akun Anda. Tanda tangan akses bersama memberi Anda cara yang aman untuk berbagi sumber daya penyimpanan tanpa mengorbankan kunci akun Anda.

Perintah di bagian ini menyelesaikan tindakan berikut:

  • Mengatur definisi tanda tangan akses bersama akun.
  • Atur definisi tanda tangan akses bersama penyimpanan terkelola Key Vault di brankas. Definisi memiliki URI templat token tanda tangan akses bersama yang dibuat. Definisi memiliki jenis tanda tangan akses bersama account dan berlaku selama N hari.
  • Verifikasi bahwa tanda tangan akses bersama disimpan di brankas kunci Anda sebagai rahasia.

Mengatur variabel

Pertama, atur variabel yang akan digunakan oleh cmdlet PowerShell dalam langkah-langkah berikut. Pastikan untuk memperbarui tempat penampung <YourStorageAccountName> dan <YourKeyVaultName>.

$storageAccountName = <YourStorageAccountName>
$keyVaultName = <YourKeyVaultName>

Tetapkan templat definisi tanda tangan akses bersama

Key Vault menggunakan templat definisi SAS untuk menghasilkan token bagi aplikasi klien.

Contoh templat definisi SAS:

$sasTemplate="sv=2018-03-28&ss=bfqt&srt=sco&sp=rw&spr=https"

Parameter SAS akun yang diperlukan dalam templat definisi SAS untuk Key Vault

Parameter Kueri SAS Deskripsi
SignedVersion (sv) Harus diisi. Menentukan versi layanan penyimpanan yang ditandatangani untuk digunakan untuk mengotorisasi permintaan yang dibuat dengan SAS akun ini. Harus diatur ke versi 05-04-2015 atau yang lebih baru. Key Vault mendukung versi yang tidak lebih baru dari 28-03-2018
SignedServices (ss) Harus diisi. Menentukan layanan yang ditandatangani dapat diakses dengan SAS akun. Nilai yang mungkin termasuk:

- Blob (b)
- Antrean (q)
- Tabel (t)
- File (f)

Anda dapat menggabungkan nilai untuk menyediakan akses ke lebih dari satu layanan. Misalnya, ss=bf menentukan akses ke titik akhir Blob dan File.
SignedResourceTypes (srt) Harus diisi. Menentukan jenis sumber daya ditandatangani yang dapat diakses dengan SAS akun.

- Layanan (s): Akses ke API tingkat layanan (misalnya, Dapatkan/Atur Properti Layanan, Dapatkan Statistik Layanan, Buat Daftar Kontainer/Antrean/Tabel/Berbagi)
- Kontainer (c): Akses ke API tingkat kontainer (misalnya, Buat/Hapus Kontainer, Buat/Hapus Antrean, Buat/Hapus Tabel, Buat/Hapus Berbagi, Buat Daftar Blob/File dan Direktori)
- Objek (o): Akses ke API tingkat objek untuk blob, pesan antrean, entitas tabel, dan file (misalnya, Letakkan Blob, Entitas Kueri, Dapatkan Pesan, Buat File, dll.)

Anda dapat menggabungkan nilai untuk menyediakan akses ke lebih dari satu jenis sumber daya. Misalnya, srt=sc menentukan akses ke sumber daya layanan dan kontainer.
SignedPermission (sp) Harus diisi. Menentukan izin yang ditandatangani untuk SAS akun. Izin hanya valid jika cocok dengan jenis sumber daya ditandatangani yang ditentukan; jika tidak, izin diabaikan.

- Baca (r): Berlaku untuk semua jenis sumber daya yang ditandatangani (Layanan, Kontainer, dan Objek). Mengizinkan izin baca ke jenis sumber daya yang ditentukan.
- Tulis (w): Berlaku untuk semua jenis sumber daya yang ditandatangani (Layanan, Kontainer, dan Objek). Mengizinkan izin tulis ke jenis sumber daya yang ditentukan.
- Hapus (d): Berlaku untuk jenis sumber daya Kontainer dan Objek, kecuali untuk pesan antrean.
- Hapus Permanen (y): Berlaku untuk jenis sumber daya Objek blob saja.
- Daftar (l): Berlaku untuk jenis sumber daya Layanan dan Kontainer saja.
- Tambah (a): Berlaku untuk jenis sumber daya Objek berikut saja: pesan antrean, entitas tabel, dan blob penambahan.
- Buat (c): Berlaku untuk jenis sumber daya Objek berikut saja: blob dan file. Pengguna dapat membuat blob atau file baru, tetapi mungkin tidak menimpa blob atau file yang ada.
- Perbarui (u): Berlaku untuk jenis sumber daya Objek berikut saja: pesan antrean dan entitas tabel.
- Proses (p): Berlaku untuk jenis sumber daya Objek berikut saja: pesan antrean.
- Tag (t): Berlaku untuk jenis sumber daya Objek berikut saja: blob. Mengizinkan operasi tag blob.
- Filter (f): Berlaku untuk jenis sumber daya Objek berikut saja: blob. Mengizinkan pemfilteran menurut tag blob.
- Atur Azure Policy Imutabilitas (i): Berlaku untuk jenis sumber daya Objek berikut saja: blob. Mengizinkan kebijakan imutabilitas set/hapus dan penahanan legal pada blob.
SignedProtocol (spr) Opsional. Menetapkan protokol yang diizinkan untuk permintaan yang dibuat dengan SAS akun. Nilai yang mungkin adalah HTTPS dan HTTP (https,http) atau HTTPS saja (https). Nilai defaultnya adalah https,http.

HTTP saja bukan nilai yang diizinkan.

Untuk mengetahui informasi lebih lanjut tentang SAS akun, lihat Membuat SAS akun.

Catatan

Key Vault mengabaikan parameter seumur hidup seperti 'Signed Expiry', 'Signed Start' dan parameter yang diperkenalkan setelah versi 28-03-2018

Mengatur definisi tanda tangan akses bersama dalam Key Vault

Gunakan cmdlet Azure PowerShell Set-AzKeyVaultManagedStorageSasDefinition untuk membuat definisi tanda tangan akses bersama. Anda dapat memberikan nama pilihan Anda ke parameter -Name.

Set-AzKeyVaultManagedStorageSasDefinition -AccountName $storageAccountName -VaultName $keyVaultName -Name <YourSASDefinitionName> -TemplateUri $sasTemplate -SasType 'account' -ValidityPeriod ([System.Timespan]::FromDays(1))

Memverifikasi definisi tanda tangan akses bersama

Anda dapat memverifikasi bahwa definisi tanda tangan akses bersama telah disimpan di brankas kunci Anda menggunakan cmdlet Azure PowerShell Get-AzKeyVaultSecret.

Pertama, temukan definisi tanda tangan akses bersama di brankas kunci Anda.

Get-AzKeyVaultSecret -VaultName <YourKeyVaultName>

Rahasia yang sesuai dengan definisi SAS Anda akan memiliki properti ini:

Vault Name   : <YourKeyVaultName>
Name         : <SecretName>
...
Content Type : application/vnd.ms-sastoken-storage
Tags         :

Anda sekarang dapat menggunakan cmdlet Get-AzKeyVaultSecretdengan VaultName dan Name parameter untuk melihat konten rahasia itu.

$secretValueText = Get-AzKeyVaultSecret -VaultName <YourKeyVaultName> -Name <SecretName> -AsPlainText
Write-Output $secretValueText

Output dari perintah ini akan menunjukkan string definisi SAS Anda.

Langkah berikutnya