Bagikan melalui


Membuat SAS delegasi pengguna untuk kontainer atau blob dengan PowerShell

Tanda tangan akses bersama (SAS) memungkinkan Anda memberikan akses terbatas ke kontainer dan blob di akun penyimpanan Anda. Saat Anda membuat SAS, Anda menentukan batasannya, termasuk sumber daya Azure Storage mana yang diizinkan untuk diakses klien, izin apa yang mereka miliki pada sumber daya tersebut, dan berapa lama SAS valid.

Setiap SAS ditandatangani dengan kunci. Anda dapat menandatangani SAS dengan salah satu dari dua cara:

  • Dengan kunci yang dibuat menggunakan kredensial Microsoft Entra. SAS yang ditandatangani dengan kredensial Microsoft Entra adalah SAS delegasi pengguna. Klien yang membuat SAS delegasi pengguna harus diberi peran Azure RBAC yang menyertakan tindakan Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Untuk mempelajari selengkapnya, lihat Membuat SAS Delegasi Pengguna.
  • Dengan menggunakan kunci akun penyimpanan. SAS layanan dan SAS akun ditandatangani dengan kunci akun penyimpanan. Klien yang membuat SAS layanan harus memiliki akses langsung ke kunci akun atau ditetapkan izin Microsoft.Storage/storageAccounts/listkeys/action. Untuk mempelajari selengkapnya, lihat Membuat layanan SAS atau Membuat SAS akun.

Nota

Delegasi pengguna SAS menawarkan keamanan yang unggul untuk SAS yang ditandatangani dengan kunci akun penyimpanan. Microsoft merekomendasikan menggunakan SAS delegasi pengguna jika memungkinkan. Untuk mengetahui informasi selengkapnya, lihat Memberikan akses terbatas ke data dengan tanda tangan akses bersama (SAS).

Artikel ini memperlihatkan cara menggunakan kredensial Microsoft Entra untuk membuat SAS delegasi pengguna untuk kontainer atau blob dengan Azure PowerShell.

Tentang pendelegasian pengguna SAS

Token SAS untuk akses ke kontainer atau blob dapat diamankan dengan menggunakan kredensial Microsoft Entra atau kunci akun. SAS yang diamankan dengan kredensial Microsoft Entra disebut SAS delegasi pengguna, sebab token OAuth 2.0 yang digunakan untuk menandatangani SAS diminta atas nama pengguna.

Microsoft menyarankan agar Anda menggunakan kredensial Microsoft Entra jika memungkinkan sebagai praktik terbaik keamanan, daripada menggunakan kunci akun, yang dapat lebih mudah disusupi. Saat desain aplikasi Anda memerlukan tanda tangan akses bersama, gunakan kredensial Microsoft Entra untuk membuat SAS delegasi pengguna demi keamanan lebih unggul. Untuk informasi selengkapnya tentang delegasi pengguna SAS, lihat Membuat delegasi pengguna SAS.

Perhatian

Setiap klien yang memiliki SAS yang valid dapat mengakses data di akun penyimpanan Anda sebagaimana diizinkan oleh SAS tersebut. Penting untuk melindungi SAS dari penggunaan berbahaya atau tidak diinginkan. Gunakan kebijaksanaan dalam mendistribusikan SAS, dan siapkan rencana untuk mencabut SAS yang dikompromikan.

Untuk informasi selengkapnya tentang tanda tangan akses bersama, lihat Berikan akses terbatas ke sumber daya Azure Storage dengan menggunakan tanda tangan akses berbagi (SAS).

Menginstal modul PowerShell

Untuk membuat SAS delegasi pengguna dengan PowerShell, instal modul Az.Storage versi 1.10.0 atau yang lebih baru. Ikuti langkah-langkah berikut untuk menginstal versi terbaru modul:

  1. Hapus instalasi Azure PowerShell sebelumnya:

    • Hapus penginstalan Azure PowerShell sebelumnya dari Windows menggunakan pengaturan Aplikasi & fitur di bawah Pengaturan.
    • Hapus semua modul Azure dari %Program Files%\WindowsPowerShell\Modules.
  2. Pastikan Anda telah menginstal PowerShellGet versi terbaru. Buka jendela Windows PowerShell, dan jalankan perintah berikut untuk menginstal versi terbaru:

    Install-Module PowerShellGet -Repository PSGallery -Force
    
  3. Tutup dan buka kembali jendela PowerShell setelah menginstal PowerShellGet.

  4. Instal versi terbaru Azure PowerShell:

    Install-Module Az -Repository PSGallery -AllowClobber
    
  5. Pastikan Anda telah menginstal Azure PowerShell versi 3.2.0 atau yang lebih baru. Jalankan perintah berikut untuk menginstal versi terbaru modul Azure Storage PowerShell:

    Install-Module -Name Az.Storage -Repository PSGallery -Force
    
  6. Tutup dan buka kembali jendela PowerShell.

Untuk memeriksa versi modul Az.Storage mana yang diinstal, jalankan perintah berikut:

Get-Module -ListAvailable -Name Az.Storage -Refresh

Untuk informasi selengkapnya tentang instalasi PowerShell, lihat Instal Azure PowerShell di Windows dengan PowerShellGet.

Masuk ke Azure PowerShell dengan ID Microsoft Entra

Panggil perintah Connect-AzAccount untuk masuk dengan akun Microsoft Entra Anda:

Connect-AzAccount

Untuk informasi selengkapnya tentang masuk dengan PowerShell, lihat Masuk dengan Azure PowerShell.

Menetapkan izin dengan Azure RBAC

Untuk membuat SAS delegasi pengguna dari Azure PowerShell, akun Microsoft Entra yang digunakan untuk masuk ke PowerShell harus diberi peran yang menyertakan tindakan Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey . Izin ini memungkinkan akun Microsoft Entra untuk meminta kunci delegasi pengguna. Kunci delegasi pengguna digunakan untuk menandatangani SAS delegasi pengguna. Peran yang menyediakan tindakan Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey harus ditetapkan di tingkat akun penyimpanan, grup sumber daya, atau langganan. Untuk informasi selengkapnya tentang izin Azure RBAC untuk membuat SAS delegasi pengguna, lihat bagian Menetapkan izin dengan Azure RBAC di Membuat SAS delegasi pengguna.

Jika Anda tidak memiliki izin yang memadai untuk menetapkan peran Azure ke perwakilan keamanan Microsoft Entra, Anda mungkin perlu meminta pemilik atau administrator akun untuk menetapkan izin yang diperlukan.

Contoh berikut menetapkan peran Kontributor Data Blob Penyimpanan yang mencakup tindakan Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Peran ini dibatasi pada tingkat akun penyimpanan.

Ingatlah untuk mengganti nilai placeholder dalam tanda kurung sudut dengan nilai Anda sendiri.

New-AzRoleAssignment -SignInName <email> `
    -RoleDefinitionName "Storage Blob Data Contributor" `
    -Scope  "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>"

Untuk informasi selengkapnya tentang peran bawaan yang menyertakan tindakan Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey , lihat Peran bawaan Azure.

Menggunakan kredensial Microsoft Entra untuk mengamankan SAS

Saat Anda membuat SAS dengan delegasi pengguna menggunakan Azure PowerShell, secara implisit kunci delegasi pengguna yang dipakai untuk menandatangani SAS itu dibuat untuk Anda. Waktu mulai dan waktu kedaluwarsa yang Anda tentukan untuk SAS juga digunakan sebagai waktu mulai dan waktu kedaluwarsa untuk kunci delegasi pengguna.

Karena interval maksimum di mana kunci delegasi pengguna valid adalah 7 hari sejak tanggal mulai, Anda harus menentukan waktu kedaluwarsa untuk SAS yang dalam waktu 7 hari sejak waktu mulai. SAS tidak valid setelah kunci delegasi pengguna kedaluwarsa, sehingga SAS dengan waktu kedaluwarsa lebih dari 7 hari masih hanya akan berlaku selama 7 hari.

Untuk membuat SAS delegasi pengguna untuk kontainer atau blob dengan Azure PowerShell, pertama-tama buat objek konteks Azure Storage baru, tentukan parameter -UseConnectedAccount. Parameter -UseConnectedAccount menentukan bahwa perintah membuat objek konteks di bawah akun Microsoft Entra tempat Anda masuk.

Ingatlah untuk mengganti nilai placeholder dalam tanda kurung sudut dengan nilai Anda sendiri.

$ctx = New-AzStorageContext -StorageAccountName <storage-account> -UseConnectedAccount

Membuat SAS delegasi pengguna untuk kontainer

Untuk mengembalikan token SAS delegasi pengguna untuk kontainer, panggil perintah New-AzStorageContainerSASToken , meneruskan objek konteks Azure Storage yang Anda buat sebelumnya.

Contoh berikut mengembalikan token SAS delegasi pengguna untuk kontainer. Ingatlah untuk mengganti nilai pada tanda kurung dengan nilai Anda sendiri:

New-AzStorageContainerSASToken -Context $ctx `
    -Name <container> `
    -Permission racwdl `
    -ExpiryTime <date-time>

Token SAS delegasi pengguna yang dikembalikan akan mirip dengan:

?sv=2018-11-09&sr=c&sig=<sig>&skoid=<skoid>&sktid=<sktid>&skt=2019-08-05T22%3A24%3A36Z&ske=2019-08-07T07%3A
00%3A00Z&sks=b&skv=2018-11-09&se=2019-08-07T07%3A00%3A00Z&sp=rwdl

Membuat delegasi pengguna SAS untuk blob.

Untuk mengembalikan token SAS delegasi pengguna untuk blob, panggil perintah New-AzStorageBlobSASToken , meneruskan objek konteks Azure Storage yang Anda buat sebelumnya.

Sintaks berikut mengembalikan SAS delegasi pengguna untuk blob. Contoh menentukan -FullUri parameter, yang mengembalikan URI blob dengan token SAS ditambahkan. Ingatlah untuk mengganti nilai pada tanda kurung dengan nilai Anda sendiri:

New-AzStorageBlobSASToken -Context $ctx `
    -Container <container> `
    -Blob <blob> `
    -Permission racwd `
    -ExpiryTime <date-time>
    -FullUri

Delegasi pengguna SAS URI yang dikembalikan akan mirip dengan:

https://storagesamples.blob.core.windows.net/sample-container/blob1.txt?sv=2018-11-09&sr=b&sig=<sig>&skoid=<skoid>&sktid=<sktid>&skt=2019-08-06T21%3A16%3A54Z&ske=2019-08-07T07%3A00%3A00Z&sks=b&skv=2018-11-09&se=2019-08-07T07%3A00%3A00Z&sp=racwd

Nota

Delegasi pengguna SAS tidak mendukung penentuan izin dengan kebijakan akses yang disimpan.

Mencabut SAS delegasi pengguna

Untuk mencabut SAS delegasi pengguna dari Azure PowerShell, gunakan perintah Revoke-AzStorageAccountUserDelegationKeys. Perintah ini mencabut semua kunci delegasi pengguna yang terkait dengan akun penyimpanan yang ditentukan. Setiap tanda tangan akses bersama yang terkait dengan kunci tersebut tidak valid.

Ingatlah untuk mengganti nilai placeholder dalam tanda kurung sudut dengan nilai Anda sendiri.

Revoke-AzStorageAccountUserDelegationKeys -ResourceGroupName <resource-group> `
    -StorageAccountName <storage-account>

Penting

Kunci delegasi pengguna dan penetapan peran Azure di-cache oleh Azure Storage, sehingga mungkin ada penundaan antara saat Anda memulai proses pencabutan dan ketika SAS delegasi pengguna yang ada menjadi tidak valid.

Langkah berikutnya