Buat SAS delegasi pengguna:

Anda dapat mengamankan token tanda tangan akses bersama (SAS) untuk akses ke kontainer, direktori, atau blob dengan menggunakan kredensial Microsoft Entra atau kunci akun. SAS yang diamankan dengan kredensial Microsoft Entra disebut SAS delegasi pengguna. Sebagai praktik terbaik keamanan, kami sarankan Anda menggunakan kredensial Microsoft Entra jika memungkinkan, daripada 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 untuk membantu memastikan keamanan yang lebih baik.

Setiap SAS ditandatangani dengan kunci. Untuk membuat SAS delegasi pengguna, Anda harus terlebih dahulu meminta kunci delegasi pengguna, yang kemudian Anda gunakan untuk menandatangani SAS. Kunci delegasi pengguna dianalogikan dengan kunci akun yang digunakan untuk menandatangani layanan SAS atau AKUN SAS, kecuali bahwa kunci tersebut bergantung pada kredensial Microsoft Entra Anda. Untuk meminta kunci delegasi pengguna, panggil operasi Dapatkan Kunci Delegasi Pengguna . Anda kemudian dapat menggunakan kunci delegasi pengguna untuk membuat SAS.

DELEGASI pengguna SAS didukung untuk Azure Blob Storage dan Azure Data Lake Storage Gen2. Kebijakan akses tersimpan tidak didukung untuk SAS delegasi pengguna.

Perhatian

Tanda tangan akses bersama adalah kunci yang memberikan izin ke sumber daya penyimpanan, dan Anda harus melindunginya sama seperti Anda akan melindungi kunci akun. Penting untuk melindungi SAS dari penggunaan berbahaya atau tidak diinginkan. Gunakan kebijaksanaan dalam mendistribusikan SAS, dan memiliki rencana untuk mencabut SAS yang disusupi. Operasi yang menggunakan tanda tangan akses bersama harus dilakukan hanya melalui koneksi HTTPS, dan URI tanda tangan akses bersama hanya boleh didistribusikan pada koneksi aman seperti HTTPS.

Untuk informasi tentang menggunakan kunci akun Anda untuk mengamankan SAS, lihat Membuat layanan SAS dan Membuat SAS akun.

Dukungan SAS delegasi pengguna untuk akses cakupan direktori

SAS delegasi pengguna mendukung cakupan direktori (sr=d) ketika versi otorisasi (sv) adalah 2020-02-10 atau yang lebih baru dan namespace hierarkis (HNS) diaktifkan. Semantik untuk cakupan direktori (sr=d) mirip dengan cakupan kontainer (sr=c), kecuali bahwa akses dibatasi untuk direktori dan file dan subdirektori apa pun di dalamnya. Ketika sr=d ditentukan, sdd parameter kueri juga diperlukan.

Format string-to-sign untuk versi otorisasi 2020-02-10 tidak berubah.

Dukungan SAS delegasi pengguna untuk OID pengguna

SAS delegasi pengguna mendukung pengidentifikasi objek pengguna opsional (OID) yang dibawa baik saoid dalam parameter atau suoid saat versi otorisasi (sv) adalah 2020-02-10 atau yang lebih baru. Parameter opsional ini menyediakan model otorisasi yang ditingkatkan untuk beban kerja kluster multi-pengguna seperti Hadoop dan Spark.

Token SAS dapat dibatasi untuk operasi sistem file dan pengguna tertentu, yang menyediakan token akses yang kurang rentan yang lebih aman untuk didistribusikan di seluruh kluster multi-pengguna. Salah satu kasus penggunaan untuk fitur-fitur ini adalah integrasi driver Hadoop ABFS dengan Apache Ranger.

Mengotorisasi SAS delegasi pengguna

Saat klien mengakses sumber daya Blob Storage dengan SAS delegasi pengguna, permintaan ke Azure Storage diotorisasi dengan kredensial Microsoft Entra yang digunakan untuk membuat SAS. Izin kontrol akses berbasis peran (RBAC) yang diberikan untuk akun Microsoft Entra tersebut, bersama dengan izin yang secara eksplisit diberikan pada SAS, menentukan akses klien ke sumber daya. Pendekatan ini memberikan tingkat keamanan tambahan dan membantu Anda menghindari penyimpanan kunci akses akun dengan kode aplikasi Anda. Untuk alasan ini, membuat SAS dengan menggunakan kredensial Microsoft Entra adalah praktik terbaik keamanan.

Izin yang diberikan kepada klien yang memiliki SAS adalah persimpangan izin yang diberikan kepada prinsip keamanan yang meminta kunci delegasi pengguna dan izin yang diberikan ke sumber daya pada token SAS menggunakan signedPermissions bidang (sp). Jika izin yang diberikan kepada prinsipal keamanan melalui RBAC tidak juga diberikan pada token SAS, izin tersebut tidak diberikan kepada klien yang mencoba menggunakan SAS untuk mengakses sumber daya. Saat Anda membuat SAS delegasi pengguna, pastikan bahwa izin yang diberikan melalui RBAC dan izin yang diberikan melalui token SAS sama-sama selaras dengan tingkat akses yang diperlukan oleh klien.

Untuk membuat SAS delegasi pengguna, lakukan hal berikut:

  1. Gunakan RBAC untuk memberikan izin yang diinginkan kepada prinsip keamanan yang akan meminta kunci delegasi pengguna.
  2. Dapatkan token OAuth 2.0 dari Microsoft Entra ID.
  3. Gunakan token untuk meminta kunci delegasi pengguna dengan memanggil operasi Dapatkan Kunci Delegasi Pengguna .
  4. Gunakan kunci delegasi pengguna untuk membuat token SAS dengan bidang yang sesuai.

Menetapkan izin dengan RBAC

Prinsip keamanan yang meminta kunci delegasi pengguna harus memiliki izin yang sesuai untuk melakukannya. Prinsip keamanan Microsoft Entra ID dapat berupa pengguna, grup, perwakilan layanan, atau identitas terkelola.

Untuk meminta kunci delegasi pengguna, Anda harus menetapkan ke prinsip keamanan tindakan Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey . Peran RBAC bawaan berikut ini mencakup tindakan Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey , baik secara eksplisit atau sebagai bagian dari definisi wildcard:

Karena operasi Dapatkan Kunci Delegasi Pengguna bertindak di tingkat akun penyimpanan, tindakan Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey harus dilingkup di tingkat akun penyimpanan, grup sumber daya, atau langganan. Jika prinsip keamanan diberi salah satu peran bawaan yang tercantum sebelumnya atau peran kustom yang menyertakan tindakan Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey , pada tingkat akun penyimpanan, grup sumber daya, atau langganan, prinsip keamanan kemudian dapat meminta kunci delegasi pengguna.

Jika prinsip keamanan diberi peran yang mengizinkan akses data tetapi terlingkup ke tingkat kontainer, Anda juga dapat menetapkan peran Delegator Blob Penyimpanan ke prinsip keamanan di tingkat akun penyimpanan, grup sumber daya, atau langganan. Peran Delegator Blob Penyimpanan memberikan izin utama keamanan untuk meminta kunci delegasi pengguna.

Untuk informasi selengkapnya tentang peran RBAC untuk Azure Storage, lihat Mengotorisasi dengan Azure Active Directory.

Memperoleh token OAuth 2.0

Untuk mendapatkan kunci delegasi pengguna, pertama-tama minta token OAuth 2.0 dari Microsoft Entra ID. Berikan token dengan skema Pembawa untuk mengotorisasi panggilan ke operasi Dapatkan Kunci Delegasi Pengguna . Untuk informasi selengkapnya tentang meminta token OAuth dari Microsoft Entra ID, lihat Alur autentikasi dan skenario aplikasi.

Meminta kunci delegasi pengguna

Panggilan ke operasi Dapatkan Kunci Delegasi Pengguna mengembalikan kunci sebagai sekumpulan nilai yang digunakan sebagai parameter pada token SAS delegasi pengguna. Parameter ini dijelaskan dalam referensi Dapatkan Kunci Delegasi Pengguna dan di bagian berikutnya, "Buat SAS delegasi pengguna."

Saat klien meminta kunci delegasi pengguna dengan menggunakan token OAuth 2.0, Azure Storage mengembalikan kunci delegasi pengguna atas nama prinsip keamanan. SAS yang dibuat dengan kunci delegasi pengguna diberikan izin yang telah diberikan kepada prinsip keamanan.

Setelah Anda memiliki kunci delegasi pengguna, Anda dapat menggunakannya untuk membuat sejumlah tanda tangan akses bersama delegasi pengguna selama masa pakai kunci. Kunci delegasi pengguna tidak bergantung pada token OAuth 2.0 yang Anda gunakan untuk memperolehnya, sehingga token tidak perlu diperbarui selama kunci masih valid. Anda dapat menentukan bahwa kunci berlaku untuk jangka waktu hingga tujuh hari.

Membuat SAS delegasi pengguna

Tabel berikut ini meringkas bidang yang didukung untuk token SAS delegasi pengguna. Bagian berikutnya memberikan detail tambahan tentang cara menentukan parameter ini.

Nama bidang SAS Parameter token SAS Diperlukan atau opsional Dukungan versi Deskripsi
signedVersion sv Diperlukan 2018-11-09 dan yang lebih baru Menunjukkan versi layanan yang digunakan untuk membuat bidang tanda tangan. Ini juga menentukan versi layanan yang menangani permintaan yang dibuat dengan SAS ini.
signedResource sr Diperlukan Semua Menentukan sumber daya blob mana yang dapat diakses melalui tanda tangan akses bersama.
signedStart st Opsional Semua Pilihan. Waktu ketika tanda tangan akses bersama menjadi valid, dinyatakan dalam salah satu format UTC ISO 8601 yang diterima. Jika nilai ini dihilangkan, waktu UTC saat ini digunakan sebagai waktu mulai. Untuk informasi selengkapnya tentang format UTC yang diterima, lihat Memformat nilai DateTime.
signedExpiry se Diperlukan Semua Waktu ketika tanda tangan akses bersama menjadi tidak valid, dinyatakan dalam salah satu format UTC ISO 8601 yang diterima. Untuk informasi selengkapnya tentang format UTC yang diterima, lihat Memformat nilai DateTime.
signedPermissions sp Diperlukan Semua Menunjukkan operasi mana yang dapat dilakukan klien yang memiliki SAS pada sumber daya. Izin dapat digabungkan.
signedIp sip Opsional 2015-04-05 dan yang lebih baru Menentukan alamat IP atau rentang alamat IP inklusif untuk menerima permintaan. Saat Anda menentukan rentang, perlu diingat bahwa rentangnya inklusif. Hanya alamat IPv4 yang didukung.

Misalnya, sip=168.1.5.65 atau sip=168.1.5.60-168.1.5.70.
signedProtocol spr Opsional 2015-04-05 dan yang lebih baru Menentukan protokol yang diizinkan untuk permintaan yang dibuat dengan SAS. Sertakan bidang ini untuk mengharuskan permintaan yang dibuat dengan token SAS menggunakan HTTPS.
signedObjectId skoid Diperlukan 2018-11-09 dan yang lebih baru Mengidentifikasi prinsip keamanan Microsoft Entra.
signedTenantId sktid Diperlukan 2018-11-09 dan yang lebih baru Menentukan penyewa Microsoft Entra di mana prinsip keamanan ditentukan.
signedKeyStartTime skt Opsional. 2018-11-09 dan yang lebih baru Nilai dikembalikan oleh operasi Dapatkan Kunci Delegasi Pengguna . Menunjukkan awal masa pakai kunci delegasi pengguna, yang dinyatakan dalam salah satu format UTC ISO 8601 yang diterima. Jika nilai dihilangkan, waktu saat ini diasumsikan. Untuk informasi selengkapnya tentang format UTC yang diterima, lihat Memformat nilai DateTime.
signedKeyExpiryTime ske Diperlukan 2018-11-09 dan yang lebih baru Nilai dikembalikan oleh operasi Dapatkan Kunci Delegasi Pengguna . Menunjukkan akhir masa pakai kunci delegasi pengguna, yang dinyatakan dalam salah satu format UTC ISO 8601 yang diterima. Untuk informasi selengkapnya tentang format UTC yang diterima, lihat Memformat nilai DateTime.
signedKeyVersion skv Diperlukan 2018-11-09 dan yang lebih baru Nilai dikembalikan oleh operasi Dapatkan Kunci Delegasi Pengguna . Menentukan versi layanan penyimpanan yang digunakan untuk mendapatkan kunci delegasi pengguna. Bidang ini harus menentukan versi 2018-11-09 atau yang lebih baru.
signedKeyService sks Diperlukan 2018-11-09 dan yang lebih baru Menunjukkan layanan yang kunci delegasi penggunanya valid. Saat ini, hanya Blob Storage yang didukung.
signedAuthorizedObjectId saoid Opsional 2020-02-10 dan yang lebih baru Menentukan ID objek untuk prinsip keamanan Microsoft Entra yang diotorisasi oleh pemilik kunci delegasi pengguna untuk melakukan tindakan yang diberikan oleh token SAS. Tidak ada pemeriksaan izin tambahan pada daftar kontrol akses (ACL) Portable Operating System Interface (POSIX) yang dilakukan.
signedUnauthorizedObjectId suoid Opsional 2020-02-10 dan yang lebih baru Menentukan ID objek untuk prinsip keamanan Microsoft Entra saat namespace hierarki diaktifkan. Azure Storage melakukan pemeriksaan POSIX ACL terhadap ID objek sebelum mengotorisasi operasi.
signedCorrelationId scid Opsional 2020-02-10 dan yang lebih baru Menghubungkan log audit penyimpanan dengan log audit yang digunakan oleh prinsipal yang menghasilkan dan mendistribusikan SAS.
signedDirectoryDepth sdd Diperlukan ketika sr=d 2020-02-10 dan yang lebih baru Menunjukkan jumlah direktori dalam folder akar direktori yang ditentukan di canonicalizedResource bidang string-to-sign.
signedEncryptionScope ses Opsional 2020-12-06 dan yang lebih baru Menunjukkan cakupan enkripsi yang akan digunakan untuk mengenkripsi konten permintaan.
signature sig Diperlukan Semua Tanda tangan adalah kode autentikasi pesan berbasis hash (HMAC) yang dihitung melalui string-to-sign dan kunci dengan menggunakan algoritma SHA256, lalu dikodekan dengan menggunakan pengodean Base64.
Cache-Control header respons rscc Opsional 2013-08-15 dan yang lebih baru Azure Storage mengatur Cache-Control header respons ke nilai yang ditentukan pada token SAS.
Content-Disposition header respons rscd Opsional 2013-08-15 dan yang lebih baru Azure Storage mengatur Content-Disposition header respons ke nilai yang ditentukan pada token SAS.
Content-Encoding header respons rsce Opsional 2013-08-15 dan yang lebih baru Azure Storage mengatur Content-Encoding header respons ke nilai yang ditentukan pada token SAS.
Content-Language header respons rscl Opsional 2013-08-15 dan yang lebih baru Azure Storage mengatur Content-Language header respons ke nilai yang ditentukan pada token SAS.
Content-Type header respons rsct Opsional 2013-08-15 dan yang lebih baru Azure Storage mengatur Content-Type header respons ke nilai yang ditentukan pada token SAS.

Tentukan bidang versi yang ditandatangani

Bidang (sv) yang diperlukan signedVersion menentukan versi layanan untuk tanda tangan akses bersama. Nilai ini menunjukkan versi layanan yang digunakan untuk membuat signature bidang, dan menentukan versi layanan yang menangani permintaan yang dibuat dengan tanda tangan akses bersama ini. Nilai sv bidang harus versi 2018-11-09 atau yang lebih baru.

Tentukan bidang sumber daya yang ditandatangani

Bidang yang diperlukan signedResource (sr) menentukan sumber daya mana yang dapat diakses melalui tanda tangan akses bersama. Tabel berikut menjelaskan cara merujuk ke sumber daya blob, kontainer, atau direktori dalam token SAS:

Sumber daya Nilai parameter Versi yang didukung Deskripsi
Blob b Semua Memberikan akses ke konten dan metadata blob.
Versi blob Bv 2018-11-09 dan yang lebih baru Memberikan akses ke konten dan metadata versi blob, tetapi bukan blob dasar.
Snapshot blob bs 2018-11-09 dan yang lebih baru Memberikan akses ke konten dan metadata rekam jepret blob, tetapi bukan blob dasar.
Kontainer c Semua Memberikan akses ke konten dan metadata blob apa pun dalam kontainer, dan ke daftar blob dalam kontainer.
Directory d 2020-02-10 dan yang lebih baru Memberikan akses ke konten dan metadata blob apa pun di direktori, dan ke daftar blob di direktori, di akun penyimpanan dengan namespace hierarki diaktifkan. Jika direktori ditentukan untuk signedResource bidang , signedDirectoryDepth parameter (sdd) juga diperlukan. Direktori selalu berada dalam kontainer.

Tentukan durasi validitas tanda tangan

Bidang signedStart (st) dan signedExpiry (se) menunjukkan waktu mulai dan kedaluwarsa untuk SAS. Bidang signedExpiry wajib diisi. Bidang signedStart bersifat opsional. Jika dihilangkan, waktu UTC saat ini digunakan sebagai waktu mulai.

Untuk SAS delegasi pengguna, waktu mulai dan kedaluwarsa untuk SAS harus berada dalam interval yang ditentukan untuk kunci delegasi pengguna. Jika klien mencoba menggunakan SAS setelah kunci delegasi pengguna kedaluwarsa, SAS akan gagal dengan kesalahan otorisasi, terlepas dari apakah SAS itu sendiri masih valid.

Untuk informasi selengkapnya tentang format UTC yang diterima, lihat Memformat nilai DateTime.

Menentukan izin

Izin yang ditentukan untuk signedPermissions bidang (sp) pada token SAS menunjukkan operasi mana yang dapat dilakukan klien yang memiliki SAS pada sumber daya.

Izin dapat digabungkan untuk mengizinkan klien melakukan beberapa operasi dengan SAS yang sama. Saat membuat SAS, Anda harus menyertakan izin dalam urutan berikut:

racwdxltmeop

Contoh pengaturan izin yang valid untuk kontainer meliputi rw, , rd, rlwd, wl, dan rl. Contoh pengaturan yang tidak valid meliputi wr, , drlr, dan dw. Menentukan penentuan izin lebih dari sekali tidak diizinkan.

DELEGASI pengguna SAS tidak dapat memberikan akses ke operasi tertentu:

  • Kontainer tidak dapat dibuat, dihapus, atau dicantumkan.
  • Metadata dan properti kontainer tidak dapat dibaca atau ditulis.
  • Kontainer tidak dapat disewa.

Untuk membuat SAS yang memberikan akses ke operasi ini, gunakan SAS akun. Untuk informasi selengkapnya, lihat Membuat akun SAS.

Izin yang didukung untuk setiap jenis sumber daya dijelaskan dalam tabel berikut:

Izin Simbol URI Sumber daya Dukungan versi Operasi yang diizinkan
Baca r Kontainer
Direktori
Blob
Semua Baca konten, daftar blokir, properti, dan metadata blob apa pun dalam kontainer atau direktori. Gunakan blob sebagai sumber operasi salin.
Menambahkan a Kontainer
Direktori
Blob
Semua Tambahkan blok ke blob penambahan.
Buat c Kontainer
Direktori
Blob
Semua Tulis blob baru, rekam jepret blob, atau salin blob ke blob baru.
Tulis w Kontainer
Direktori
Blob
Semua Membuat atau menulis konten, properti, metadata, atau daftar blokir. Rekam jepret atau sewa blob. Mengubah ukuran blob (blob halaman saja). Gunakan blob sebagai tujuan operasi salin.
Hapus d Kontainer
Direktori
Blob
Semua Hapus blob. Untuk versi 2017-07-29 dan yang lebih baru, izin Hapus juga memungkinkan melanggar sewa pada blob. Untuk informasi selengkapnya, lihat operasi Sewa Blob .
Hapus versi x Kontainer
Blob
2019-12-12 dan yang lebih baru Menghapus versi blob.
Hapus Permanen y Blob 2020-02-10 dan yang lebih baru Hapus salinan bayangan atau versi blob secara permanen.
Daftar l Kontainer
Direktori
Semua Mencantumkan blob secara non-rekursif.
Tag t Blob 2019-12-12 dan yang lebih baru Membaca atau menulis tag pada blob.
Move m Kontainer
Direktori
Blob
2020-02-10 dan yang lebih baru Pindahkan blob atau direktori dan isinya ke lokasi baru. Operasi ini secara opsional dapat dibatasi untuk pemilik blob anak, direktori, atau direktori induk jika saoid parameter disertakan pada token SAS dan bit lengket diatur pada direktori induk.
Jalankan e Kontainer
Direktori
Blob
2020-02-10 dan yang lebih baru Dapatkan properti sistem dan, jika namespace hierarki diaktifkan untuk akun penyimpanan, dapatkan POSIX ACL blob. Jika namespace hierarki diaktifkan dan pemanggil adalah pemilik blob, izin ini memberikan kemampuan untuk mengatur grup pemilik, izin POSIX, dan POSIX ACL dari blob. Ini tidak mengizinkan penelepon untuk membaca metadata yang ditentukan pengguna.
Kepemilikan o Kontainer
Direktori
Blob
2020-02-10 dan yang lebih baru Ketika namespace hierarki diaktifkan, izin ini memungkinkan pemanggil untuk mengatur pemilik atau grup pemilik, atau untuk bertindak sebagai pemilik saat penelepon mengganti nama atau menghapus direktori atau blob dalam direktori yang memiliki set bit lengket.
Izin p Kontainer
Direktori
Blob
2020-02-10 dan yang lebih baru Ketika namespace hierarki diaktifkan, izin ini memungkinkan pemanggil untuk mengatur izin dan ACL POSIX pada direktori dan blob.
Mengatur Kebijakan Imutabilitas i Kontainer
Blob
2020-06-12 dan yang lebih baru Atur atau hapus kebijakan imutabilitas atau penahanan legal pada blob.

Tentukan alamat IP atau rentang IP

Bidang opsional signedIp (sip) menentukan alamat IP publik atau rentang alamat IP publik untuk menerima permintaan. Jika alamat IP tempat permintaan berasal tidak cocok dengan alamat IP atau rentang alamat yang ditentukan pada token SAS, permintaan tidak diotorisasi. Hanya alamat IPv4 yang didukung.

Saat Anda menentukan rentang alamat IP, rentangnya inklusif. Misalnya, menentukan sip=168.1.5.65 atau sip=168.1.5.60-168.1.5.70 pada SAS membatasi permintaan ke alamat IP tersebut.

Tabel berikut menjelaskan apakah akan menyertakan signedIp bidang pada token SAS untuk skenario tertentu, berdasarkan lingkungan klien dan lokasi akun penyimpanan.

Lingkungan klien Lokasi akun penyimpanan Rekomendasi
Klien yang berjalan di Azure Di wilayah yang sama dengan klien SAS yang diberikan kepada klien dalam skenario ini tidak boleh menyertakan alamat IP keluar untuk bidang .signedIp Permintaan yang Anda buat dari dalam wilayah yang sama dengan menggunakan SAS dengan alamat IP keluar tertentu akan gagal.

Sebagai gantinya, gunakan jaringan virtual Azure untuk mengelola pembatasan keamanan jaringan. Permintaan ke Azure Storage dari dalam wilayah yang sama selalu berlangsung melalui alamat IP privat. Untuk informasi selengkapnya, lihat Mengonfigurasi firewall Azure Storage dan jaringan virtual.
Klien yang berjalan di Azure Di wilayah yang berbeda dari klien SAS yang diberikan kepada klien dalam skenario ini dapat mencakup alamat IP publik atau rentang alamat untuk bidang .signedIp Permintaan yang Anda buat dengan SAS harus berasal dari alamat IP atau rentang alamat yang ditentukan.
Klien yang menjalankan lokal atau di lingkungan cloud yang berbeda Di wilayah Azure mana pun SAS yang diberikan kepada klien dalam skenario ini dapat mencakup alamat IP publik atau rentang alamat untuk bidang .signedIp Permintaan yang Anda buat dengan SAS harus berasal dari alamat IP atau rentang alamat yang ditentukan.

Jika permintaan melewati proksi atau gateway, berikan alamat IP keluar publik proksi atau gateway tersebut untuk bidang tersebut signedIp .

Tentukan protokol HTTP

Bidang opsional signedProtocol (spr) menentukan protokol yang diizinkan untuk permintaan yang dibuat dengan SAS. Nilai yang mungkin adalah HTTPS dan HTTP (https,http) atau HTTPS saja (https). Nilai defaultnya adalah https,http.

Catatan

Tidak dimungkinkan untuk menentukan HTTP untuk spr bidang .

Tentukan ID objek yang ditandatangani

Bidang signedObjectId (skoid) diperlukan untuk delegasi pengguna SAS. Operasi Dapatkan Kunci Delegasi Pengguna mengembalikan nilai ini sebagai bagian dari respons. ID objek yang ditandatangani adalah nilai GUID yang melayani pengidentifikasi yang tidak dapat diubah untuk prinsip keamanan dalam platform identitas Microsoft.

Tentukan ID penyewa yang ditandatangani

Bidang signedTenantId (sktid) diperlukan untuk delegasi pengguna SAS. Operasi Dapatkan Kunci Delegasi Pengguna mengembalikan nilai ini sebagai bagian dari respons. ID penyewa yang ditandatangani adalah nilai GUID yang mewakili penyewa Microsoft Entra di mana prinsip keamanan ditentukan.

Tentukan waktu mulai kunci yang ditandatangani

Bidang opsional signedKeyStartTime (skt) menunjukkan awal masa pakai kunci delegasi pengguna dalam format Tanggal ISO. Operasi Dapatkan Kunci Delegasi Pengguna mengembalikan nilai ini sebagai bagian dari respons. Jika waktu mulai dihilangkan, waktu mulai kunci yang ditandatangani diasumsikan sebagai waktu saat ini.

Tentukan waktu kedaluwarsa kunci yang ditandatangani

Bidang signedKeyExpiryTime (ske) diperlukan untuk delegasi pengguna SAS dalam format Tanggal ISO. Operasi Dapatkan Kunci Delegasi Pengguna mengembalikan nilai ini sebagai bagian dari respons. Waktu kedaluwarsa kunci yang ditandatangani menunjukkan akhir masa pakai kunci delegasi pengguna. Nilai waktu kedaluwarsa mungkin maksimal tujuh hari sejak waktu mulai SAS.

Tentukan layanan kunci yang ditandatangani

Bidang signedKeyService (sks) diperlukan untuk delegasi pengguna SAS. Operasi Dapatkan Kunci Delegasi Pengguna mengembalikan nilai ini sebagai bagian dari respons. Bidang layanan kunci yang ditandatangani menunjukkan layanan yang kunci delegasi penggunanya valid. Nilai untuk bidang layanan kunci yang ditandatangani untuk Blob Storage adalah b.

Tentukan versi kunci yang ditandatangani

Bidang signedkeyversion (skv) diperlukan untuk delegasi pengguna SAS. Operasi Dapatkan Kunci Delegasi Pengguna mengembalikan nilai ini sebagai bagian dari respons. Bidang signedkeyversion menentukan versi layanan penyimpanan yang digunakan untuk mendapatkan kunci delegasi pengguna. Bidang ini harus menentukan versi 2018-11-09 atau yang lebih baru.

Tentukan ID objek yang ditandatangani untuk prinsip keamanan

Bidang opsional signedAuthorizedObjectId (saoid) dan signedUnauthorizedObjectId (suoid) memungkinkan integrasi dengan Apache Hadoop dan Apache Ranger untuk beban kerja Azure Data Lake Storage Gen2. Gunakan salah satu bidang ini pada token SAS untuk menentukan ID objek untuk prinsip keamanan:

  • Bidang saoid menentukan ID objek untuk prinsip keamanan Microsoft Entra yang diotorisasi oleh pemilik kunci delegasi pengguna untuk melakukan tindakan yang diberikan oleh token SAS. Azure Storage memvalidasi token SAS dan memastikan bahwa pemilik kunci delegasi pengguna memiliki izin yang diperlukan sebelum Azure Storage memberikan akses. Tidak ada pemeriksaan izin tambahan pada ACL POSIX yang dilakukan.
  • Bidang suoid menentukan ID objek untuk prinsip keamanan Microsoft Entra saat namespace hierarki diaktifkan untuk akun penyimpanan. Bidang suoid ini hanya valid untuk akun yang memiliki namespace hierarkis. suoid Saat bidang disertakan pada token SAS, Azure Storage melakukan pemeriksaan POSIX ACL terhadap ID objek sebelum mengotorisasi operasi. Jika pemeriksaan ACL ini tidak berhasil, operasi gagal. Namespace hierarkis harus diaktifkan untuk akun penyimpanan jika suoid bidang disertakan pada token SAS. Jika tidak, pemeriksaan izin akan gagal dengan kesalahan otorisasi.

ID objek untuk prinsip keamanan yang meminta kunci delegasi pengguna ditangkap di bidang yang diperlukan skoid . Untuk menentukan ID objek pada token SAS dengan bidang atau suoid , prinsip keamanan yang diidentifikasi di skoid bidang harus diberi peran RBAC yang mencakup Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action atau Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action.saoid Untuk informasi selengkapnya tentang tindakan ini, lihat Operasi penyedia sumber daya Azure.

Dengan menentukan ID objek di saoid bidang atau suoid , Anda juga membatasi operasi yang terkait dengan kepemilikan direktori atau blob, dengan cara berikut:

  • Jika operasi membuat direktori atau blob, Azure Storage mengatur pemilik direktori atau blob ke nilai yang ditentukan oleh ID objek. Jika ID objek tidak ditentukan, Azure Storage menetapkan pemilik direktori atau blob ke nilai yang ditentukan oleh skoid parameter .
  • Jika bit lengket diatur pada direktori induk dan operasi menghapus atau mengganti nama direktori atau blob, ID objek pemilik direktori induk atau pemilik sumber daya harus cocok dengan nilai yang ditentukan oleh ID objek.
  • Jika operasi menetapkan pemilik untuk direktori atau blob dan x-ms-owner header ditentukan, nilai yang ditentukan oleh ID objek harus cocok dengan nilai yang ditentukan oleh x-ms-owner header.
  • Jika operasi mengatur grup untuk direktori atau blob dan x-ms-group header ditentukan, nilai yang ditentukan oleh ID objek harus menjadi anggota grup yang ditentukan oleh x-ms-group header .
  • Jika operasi menetapkan izin atau ACL untuk direktori atau blob, salah satu dari dua kondisi berikut juga harus dipenuhi:
    • Nilai yang ditentukan untuk ID objek harus menjadi pemilik direktori atau blob.
    • Nilai signedPermissions bidang (sp) harus menyertakan Ownership izin (o) selain Permissions izin (p).

ID objek yang ditentukan dalam saoid bidang atau suoid disertakan dalam log diagnostik saat Anda membuat permintaan dengan menggunakan token SAS.

Bidang saoid atau suoid hanya didukung jika signedVersion bidang (sv) diatur ke versi 2020-02-10 atau yang lebih baru. Hanya salah satu bidang ini yang dapat disertakan pada token SAS.

Tentukan ID korelasi

Bidang signedCorrelationId (scid) menentukan ID korelasi yang dapat digunakan untuk menghubungkan log audit penyimpanan dengan log audit yang digunakan oleh prinsipal yang menghasilkan dan mendistribusikan SAS. Misalnya, layanan otorisasi tepercaya biasanya memiliki identitas terkelola yang mengautentikasi dan mengotorisasi pengguna, menghasilkan SAS, menambahkan entri ke log audit lokal, dan mengembalikan SAS kepada pengguna, yang kemudian dapat menggunakan SAS untuk mengakses sumber daya Azure Storage. Dengan menyertakan ID korelasi di log audit lokal dan log audit penyimpanan, Anda mengizinkan peristiwa ini berkorelasi nanti. Nilainya adalah GUID tanpa kurung kurawal dan dengan karakter huruf kecil.

Bidang ini didukung dengan versi 2020-02-10 dan yang lebih baru.

Tentukan kedalaman direktori

signedResource Jika bidang menentukan direktori (sr=d), Anda juga harus menentukan signedDirectoryDepth bidang (sdd) untuk menunjukkan jumlah subdirektori di bawah direktori akar. Nilai bidang harus berupa bilangan sdd bulat non-negatif.

Misalnya, direktori https://{account}.blob.core.windows.net/{container}/ akar memiliki kedalaman 0. Setiap subdirektori dalam direktori akar menambah kedalaman sebesar 1. Direktori https://{account}.blob.core.windows.net/{container}/d1/d2 memiliki kedalaman 2.

Bidang ini didukung dengan versi 2020-02-10 dan yang lebih baru.

Tentukan parameter kueri untuk mengambil alih header respons

Untuk menentukan nilai header respons tertentu yang akan dikembalikan saat tanda tangan akses bersama digunakan dalam permintaan, Anda dapat menentukan header respons dalam parameter kueri. Header respons dan parameter kueri terkait adalah sebagai berikut:

Nama header respons Parameter kueri SAS yang sesuai
Cache-Control rscc
Content-Disposition rscd
Content-Encoding rsce
Content-Language rscl
Content-Type rsct

Misalnya, jika Anda menentukan rsct=binary parameter kueri pada token SAS, Content-Type header respons diatur ke binary. Nilai ini mengambil alih nilai header yang Content-Type disimpan untuk blob untuk permintaan menggunakan tanda tangan akses bersama ini saja.

Jika Anda membuat tanda tangan akses bersama yang menentukan header respons sebagai parameter kueri, Anda harus menyertakan header respons tersebut dalam string-to-sign yang digunakan untuk membuat string tanda tangan. Untuk informasi selengkapnya, lihat bagian "Tentukan tanda tangan".

Tentukan cakupan enkripsi

Bidang signed encryption scope (ses) menentukan cakupan enkripsi yang digunakan aplikasi klien saat Anda mengunggah blob dengan menggunakan token SAS melalui operasi Put Blob . Bidang signed encryption scope ini didukung ketika bidang versi yang ditandatangani (sv) pada token SAS adalah versi 2020-12-06 atau yang lebih baru. Jika bidang versi yang ditandatangani menentukan versi yang lebih lama dari versi yang didukung, layanan mengembalikan kode respons kesalahan 403 (Terlarang).

Jika cakupan enkripsi default diatur untuk kontainer atau sistem file, ses bidang mematuhi kebijakan enkripsi kontainer. Jika ada ketidakcocokan antara ses parameter kueri dan x-ms-default-encryption-scope header, dan x-ms-deny-encryption-scope-override header diatur ke true, layanan mengembalikan kode respons kesalahan 403 (Terlarang).

x-ms-encryption-scope Jika header dan ses parameter kueri keduanya disediakan dalam permintaan PUT dan ada ketidakcocokan, layanan mengembalikan kode respons kesalahan 400 (Permintaan Buruk).

Tentukan tanda tangan

Bidang signature (sig) digunakan untuk mengotorisasi permintaan yang dibuat oleh klien dengan tanda tangan akses bersama. String-to-sign adalah string unik yang dibangun dari bidang yang harus diverifikasi untuk mengotorisasi permintaan. Tanda tangan adalah HMAC yang dihitung melalui string-to-sign dan kunci dengan menggunakan algoritma SHA256, lalu dikodekan dengan menggunakan pengodean Base64.

Untuk membuat string tanda tangan sas delegasi pengguna, buat string-to-sign dari bidang yang membentuk permintaan, kodekan string sebagai UTF-8, lalu komputasi tanda tangan dengan menggunakan algoritma HMAC-SHA256. Bidang yang disertakan dalam string-to-sign harus didekodekan URL.

Bidang yang diperlukan dalam string-to-sign bergantung pada versi layanan yang digunakan untuk otorisasi (sv bidang). Bagian berikut menjelaskan konfigurasi string-to-sign untuk versi yang mendukung delegasi pengguna SAS.

Versi 2020-12-06 dan yang lebih baru

String-to-sign untuk versi otorisasi 2020-12-06 dan yang lebih baru memiliki format berikut:

StringToSign =  signedPermissions + "\n" +
                signedStart + "\n" +
                signedExpiry + "\n" +
                canonicalizedResource + "\n" +
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +
                signedProtocol + "\n" +
                signedVersion + "\n" +
                signedResource + "\n" +
                signedSnapshotTime + "\n" +
                signedEncryptionScope + "\n" +
                rscc + "\n" +
                rscd + "\n" +
                rsce + "\n" +
                rscl + "\n" +
                rsct

Versi 2020-02-10

String-to-sign untuk versi otorisasi 2020-02-10 memiliki format berikut:

StringToSign =  signedPermissions + "\n" +
                signedStart + "\n" +
                signedExpiry + "\n" +
                canonicalizedResource + "\n" +
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +
                signedProtocol + "\n" +
                signedVersion + "\n" +
                signedResource + "\n" +
                signedSnapshotTime + "\n" +
                rscc + "\n" +
                rscd + "\n" +
                rsce + "\n" +
                rscl + "\n" +
                rsct

Versi yang lebih lama dari 2020-02-10

String-to-sign untuk versi otorisasi yang lebih lama dari 2020-02-10 memiliki format berikut:

StringToSign =  signedPermissions + "\n" +  
                signedStart + "\n" +  
                signedExpiry + "\n" +  
                canonicalizedResource + "\n" +  
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +  
                signedProtocol + "\n" +  
                signedVersion + "\n" +  
                signedResource + "\n" +
                rscc + "\n" +
                rscd + "\n" +  
                rsce + "\n" +  
                rscl + "\n" +  
                rsct

Sumber daya kanonis

Bagian canonicalizedResource string adalah jalur kanonis ke sumber daya yang ditandatangani. Ini harus menyertakan titik akhir Blob Storage dan nama sumber daya, dan harus didekodekan URL. Jalur blob harus menyertakan kontainernya. Jalur direktori harus menyertakan jumlah subdirektori yang sesuai dengan sdd parameter .

String sumber daya kanonis untuk kontainer harus menghilangkan garis miring berikutnya (/) untuk SAS yang menyediakan akses ke kontainer tersebut.

Contoh berikut menunjukkan cara membuat canonicalizedResource bagian string, tergantung pada jenis sumber daya.

Contoh kontainer (Azure Blob Storage)
URL = https://myaccount.blob.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
Contoh blob (Azure Blob Storage)
URL = https://myaccount.blob.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  
Contoh kontainer (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
Contoh direktori (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music/instruments/guitar/  
canonicalizedResource = "/blob/myaccount/music/instruments/guitar/"  
Contoh blob (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  

Bidang opsional

Jika bidang bersifat opsional dan tidak disediakan sebagai bagian dari token SAS, tentukan string kosong untuk bidang . Pastikan untuk menyertakan karakter baris baru (\n) setelah string kosong.

Contoh SAS delegasi pengguna

Contoh berikut menunjukkan URI blob dengan token SAS delegasi pengguna ditambahkan ke dalamnya. Token SAS delegasi pengguna menyediakan izin baca dan tulis ke blob.

https://myaccount.blob.core.windows.net/sascontainer/blob1.txt?sp=rw&st=2023-05-24T01:13:55Z&se=2023-05-24T09:13:55Z&skoid=<object-id>&sktid=<tenant-id>&skt=2023-05-24T01:13:55Z&ske=2023-05-24T09:13:55Z&sks=b&skv=2022-11-02&sip=168.1.5.60-168.1.5.70&spr=https&sv=2022-11-02&sr=b&sig=<signature>

Setiap bagian URI dijelaskan dalam tabel berikut:

Nama Bagian SAS Deskripsi
URI Sumber Daya https://myaccount.blob.core.windows.net/sascontainer/blob1.txt Alamat blob. Kami sangat menyarankan Anda menggunakan HTTPS.
Pembatas ? Pemisah yang mendahului string kueri. Pemisah bukan bagian dari token SAS.
Izin sp=rw Izin yang diberikan oleh SAS termasuk Baca (r) dan Tulis (w).
Waktu mulai st=2023-05-24T01:13:55Z Ditentukan dalam waktu UTC. Jika Anda ingin SAS untuk segera berlaku, hilangkan waktu mulai.
Waktu kedaluwarsa se=2023-05-24T09:13:55Z Ditentukan dalam waktu UTC.
ID Objek skoid=<object-id> Perwakilan keamanan Microsoft Entra.
ID Penyewa sktid=<tenant-id> Penyewa Microsoft Entra tempat perwakilan keamanan terdaftar.
Waktu mulai kunci skt=2023-05-24T01:13:55Z Awal masa pakai kunci delegasi pengguna.
Waktu kedaluwarsa kunci ske=2023-05-24T09:13:55Z Akhir masa pakai kunci delegasi pengguna.
Layanan kunci sks=b Hanya layanan Blob yang didukung untuk nilai layanan.
Versi kunci skv=2022-11-02 Versi layanan penyimpanan yang digunakan untuk mendapatkan kunci delegasi pengguna.
Rentang IP sip=168.1.5.60-168.1.5.70 Rentang alamat IP tempat permintaan akan diterima.
Protokol spr=https Hanya permintaan yang menggunakan HTTPS yang diizinkan.
Versi blob service sv=2022-11-02 Untuk Azure Storage versi 2012-02-12 dan yang lebih baru, parameter ini menunjukkan versi yang akan digunakan.
Sumber daya sr=b Sumber dayanya adalah blob.
Tanda Tangan sig=<signature> Digunakan untuk mengotorisasi akses ke blob. Tanda tangan adalah HMAC yang dihitung melalui string-to-sign dan kunci dengan menggunakan algoritma SHA256, lalu dikodekan dengan menggunakan pengodean Base64.

Mencabut SAS delegasi pengguna

Jika Anda percaya bahwa SAS telah disusupi, Anda harus mencabutnya. Anda dapat mencabut SAS delegasi pengguna baik dengan mencabut kunci delegasi pengguna, atau dengan mengubah atau menghapus penetapan peran RBAC untuk prinsip keamanan yang digunakan untuk membuat SAS.

Penting

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

Mencabut kunci delegasi pengguna

Anda dapat mencabut kunci delegasi pengguna dengan memanggil operasi Cabut Kunci Delegasi Pengguna . Saat Anda mencabut kunci delegasi pengguna, tanda tangan akses bersama apa pun yang mengandalkan kunci tersebut menjadi tidak valid. Anda kemudian dapat memanggil operasi Dapatkan Kunci Delegasi Pengguna lagi dan menggunakan kunci untuk membuat tanda tangan akses bersama baru. Ini adalah cara tercepat untuk mencabut SAS delegasi pengguna.

Mengubah atau menghapus penetapan peran

Anda dapat mengubah atau menghapus penetapan peran RBAC untuk prinsip keamanan yang digunakan untuk membuat SAS. Saat klien menggunakan SAS untuk mengakses sumber daya, Azure Storage memverifikasi bahwa prinsip keamanan yang kredensialnya digunakan untuk mengamankan SAS memiliki izin yang diperlukan ke sumber daya.

Lihat juga