Format dan sintaks kondisi penetapan peran Azure

Kondisi adalah pemeriksaan tambahan yang dapat Anda tambahkan secara opsional ke penetapan peran untuk memberikan kontrol akses yang lebih terperinci. Misalnya, Anda dapat menambahkan kondisi yang mengharuskan objek memiliki tag tertentu untuk membaca objek. Artikel ini menjelaskan format dan sintaks kondisi penetapan peran.

Format kondisi

Untuk lebih memahami kondisi penetapan peran, ada baiknya melihat formatnya.

Kondisi sederhana

Kondisi paling dasar terdiri dari tindakan dan ekspresi yang ditargetkan. Tindakan adalah operasi yang dapat dilakukan pengguna pada jenis sumber daya. Ekspresi adalah pernyataan yang mengevaluasi benar atau salah, yang menentukan apakah tindakan diizinkan untuk dilakukan.

Berikut ini adalah format dari kondisi sederhana.

Format kondisi sederhana dengan satu tindakan dan satu ekspresi.

(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
    )
)

Kondisi berikut memiliki tindakan "Baca blob". Ekspresi memeriksa apakah nama kontainer adalah blob-contoh-kontainer.

(
    (
        !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
    )
    OR 
    (
        @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name]
        StringEquals 'blobs-example-container'
    )
)

Diagram yang menunjukkan akses baca ke blob dengan nama kontainer tertentu.

Bagaimana suatu kondisi dievaluasi

Jika pengguna mencoba melakukan tindakan dalam penetapan peran yang bukan <action>, !(ActionMatches) dievaluasi sebagai benar dan kondisi keseluruhan dievaluasi sebagai benar untuk memungkinkan tindakan dilakukan.

Jika pengguna mencoba melakukan <action> dalam penetapan peran, !(ActionMatches) dievaluasi sebagai salah, sehingga ekspresi dievaluasi. Jika ekspresi bernilai benar, kondisi keseluruhan bernilai benar untuk memungkinkan <action> dilakukan. Jika tidak, <action> tidak diizinkan untuk dilakukan.

Kode semu berikut menunjukkan cara lain Anda dapat membaca kondisi ini.

if a user tries to perform an action in the role assignment that does not match <action>
{
    Allow action to be performed
}
else
{
    if <attribute> <operator> <value> is true
    {
        Allow <action> to be performed
    }
    else
    {
        Do not allow <action> to be performed
    }
}

Suboperasi

Beberapa tindakan memiliki suboperasi. Misalnya, Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read tindakan data memiliki suboperasi "Cantumkan blob". Kondisi dengan suboperasi memiliki format berikut.

Format untuk tindakan dengan suboperasi.

(
    (
        !(ActionMatches{'<action>'}
        AND
        SubOperationMatches{'<subOperation>'})

    )
    OR
    (
        <attribute> <operator> <value>
    )
)

Beberapa tindakan

Kondisi dapat menyertakan beberapa tindakan yang ingin Anda izinkan jika kondisi adalah benar. Jika Anda memilih beberapa tindakan untuk satu kondisi, mungkin ada lebih sedikit atribut untuk dipilih untuk kondisi Anda karena atribut harus tersedia di seluruh tindakan yang dipilih.

Format untuk beberapa tindakan untuk diizinkan jika kondisi adalah benar.

(
    (
        !(ActionMatches{'<action>'})
        AND
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
    )
)

Beberapa ekspresi

Kondisi dapat mencakup beberapa ekspresi. Bergantung pada operator, atribut dapat diperiksa terhadap beberapa nilai.

Format untuk beberapa ekspresi menggunakan operator Boolean dan beberapa nilai.

(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
        AND | OR
        <attribute> <operator> {<value>, <value>, <value>}
        AND | OR
        <attribute> <operator> <value>
    )
)

Beberapa kondisi

Anda juga dapat menggabungkan kondisi untuk menargetkan beberapa tindakan.

Format untuk beberapa kondisi menggunakan operator Boolean.

(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
        AND | OR
        <attribute> <operator> {<value>, <value>, <value>}
        AND | OR
        <attribute> <operator> <value>
    )
)
AND
(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
        AND | OR
        <attribute> <operator> <value>
    )
)

Sintaks kondisi

Berikut ini menunjukkan sintaks untuk kondisi penetapan peran.

(
    (
        !(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
        AND
        !(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
        AND
        ...
    )
    OR
    (
        <attribute> <operator> {<value, <value>, ...}
        AND | OR
        <attribute> <operator> {<value>, <value>, ...}
        AND | OR
        ...
    )
)
AND
(
    (
        !(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
        AND
        !(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
        AND
        ...
    )
    OR
    (
        <attribute> <operator> {<value, <value>, ...}
        AND | OR
        <attribute> <operator> {<value>, <value>, ...}
        AND | OR
        ...
    )
)
AND
...

Tindakan

Saat ini, kondisi dapat ditambahkan ke penetapan peran bawaan atau kustom yang memiliki penyimpanan blob atau tindakan data penyimpanan antrean. Ini termasuk peran bawaan berikut:

Untuk daftar tindakan penyimpanan yang dapat Anda gunakan dalam kondisi, lihat:

Atribut

Bergantung pada tindakan yang dipilih, atribut dapat ditemukan di tempat yang berbeda. Jika Anda memilih beberapa tindakan untuk satu kondisi, mungkin ada lebih sedikit atribut yang dapat dipilih untuk kondisi Anda karena atribut harus tersedia di semua tindakan yang dipilih. Untuk menentukan atribut, Anda harus menyertakan sumber sebagai awalan.

Sumber atribut Deskripsi Kode
Lingkungan Atribut dikaitkan dengan lingkungan permintaan, seperti asal jaringan permintaan atau tanggal dan waktu saat ini.
@Environment
Kepala sekolah Atribut adalah atribut keamanan kustom yang ditetapkan ke prinsipal, seperti aplikasi pengguna atau perusahaan (perwakilan layanan). @Principal
Permintaan Atribut adalah bagian dari permintaan tindakan, seperti mengatur tag indeks blob. @Request
Sumber daya Atribut adalah properti sumber daya, seperti nama kontainer. @Resource

Untuk daftar lengkap atribut penyimpanan yang dapat Anda gunakan dalam kondisi, lihat:

Atribut lingkungan

Atribut lingkungan dikaitkan dengan keadaan di mana permintaan akses dibuat, seperti tanggal dan waktu hari atau lingkungan jaringan. Lingkungan jaringan mungkin apakah akses melalui titik akhir privat tertentu atau subnet jaringan virtual, atau mungkin melalui tautan privat apa pun.

Tabel berikut mencantumkan atribut lingkungan yang didukung untuk kondisi.

Nama tampilan Deskripsi Atribut Jenis
Apakah tautanprivat 1 Gunakan atribut ini dalam kondisi untuk memerlukan akses melalui tautan privat apa pun. isPrivateLink Boolean
Titikakhir privat 1,2 Gunakan atribut ini dalam kondisi untuk membatasi akses melalui titik akhir privat tertentu. Microsoft.Network/privateEndpoints String
Subnet1,3 Gunakan atribut ini dalam kondisi untuk membatasi akses dari subnet tertentu. Microsoft.Network/virtualNetworks/subnets String
UTC sekarang Gunakan atribut ini dalam kondisi untuk membatasi akses ke objek selama periode waktu tertentu. UtcNow DateTime

1 Untuk operasi salin, Is private linkatribut , , Private endpointdan Subnet hanya berlaku untuk tujuan, akun penyimpanan seperti itu, bukan sumbernya. Untuk informasi selengkapnya tentang operasi salin yang berlaku untuk ini, pilih setiap atribut dalam tabel untuk melihat detail selengkapnya.
2 Anda hanya dapat menggunakan Private endpoint atribut jika saat ini Anda memiliki setidaknya satu titik akhir privat yang dikonfigurasi dalam langganan Anda.
3 Anda hanya dapat menggunakan Subnet atribut jika saat ini Anda memiliki setidaknya satu subnet jaringan virtual menggunakan titik akhir layanan yang dikonfigurasi dalam langganan Anda.

Atribut utama

Atribut utama adalah atribut keamanan kustom yang ditetapkan ke prinsip keamanan yang meminta akses ke sumber daya. Perwakilan keamanan dapat menjadi pengguna atau aplikasi perusahaan (perwakilan layanan).

Untuk menggunakan atribut utama, Anda harus memiliki yang berikut:

  • Izin Microsoft Entra untuk pengguna yang masuk, seperti peran Administrator Penetapan Atribut
  • Atribut keamanan kustom yang ditentukan dalam ID Microsoft Entra

Untuk informasi selengkapnya tentang atribut keamanan kustom, lihat:

Atribut permintaan

Atribut permintaan dikaitkan dengan kriteria yang ditentukan dalam permintaan akses, seperti awalan blob yang ditentukan untuk dicantumkan.

Atribut sumber daya

Atribut sumber daya dikaitkan dengan objek tempat akses diminta, seperti nama akun penyimpanan, nama kontainer, atau apakah namespace hierarki diaktifkan untuk akun penyimpanan.

Operator fungsi

Bagian ini mencantumkan operator fungsi yang tersedia untuk membangun kondisi.

ActionMatches

Properti Nilai
Operator ActionMatches
Keterangan Memeriksa apakah tindakan saat ini cocok dengan pola tindakan yang ditentukan.
Contoh ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
Jika tindakan yang diperiksa sama dengan "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read", maka true

ActionMatches{'Microsoft.Authorization/roleAssignments/*'}
Jika tindakan yang diperiksa sama dengan "Microsoft.Authorization/roleAssignments/write", maka true

ActionMatches{'Microsoft.Authorization/roleDefinitions/*'}
Jika tindakan yang diperiksa sama dengan "Microsoft.Authorization/roleAssignments/write", maka false

SubOperationMatches

Properti Nilai
Operator SubOperationMatches
Keterangan Memeriksa apakah suboperasi saat ini cocok dengan pola suboperasi yang ditentukan.
Contoh SubOperationMatches{'Blob.List'}

Ada

Properti Nilai
Operator Exists
Keterangan Memeriksa apakah atribut yang ditentukan ada.
Contoh Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:snapshot]
Dukungan atribut 1 Nama cakupan enkripsi
Snapshot
ID Versi

1 Operator Exists hanya didukung untuk atribut ini dalam penyusun kondisi ABAC visual di portal Azure. Anda dapat menambahkan Exists operator ke atribut apa pun menggunakan alat lain, seperti PowerShell, Azure CLI, REST API, dan editor kode kondisi di portal Azure.

Operator logis

Bagian ini mencantumkan operator logis yang tersedia untuk membangun kondisi.

Dan

Properti Nilai
Operator AND
&&
Keterangan Dan operator.
Contoh !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})

Atau

Properti Nilai
Operator OR
||
Keterangan Atau operator.
Contoh @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z' OR NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId

Not

Properti Nilai
Operator NOT
!
Keterangan Bukan atau operator negasi.
Contoh NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId]

Operator perbandingan Boolean

Bagian ini mencantumkan operator perbandingan Boolean yang tersedia untuk membangun kondisi.

Properti Nilai
Operator BoolEquals
BoolNotEquals
Keterangan Perbandingan Boolean.
Contoh @Resource[Microsoft.Storage/storageAccounts:isHnsEnabled] BoolEquals true

Operator perbandingan string

Bagian ini mencantumkan operator perbandingan string yang tersedia untuk membangun kondisi.

StringEquals

Properti Nilai
Operator StringEquals
StringEqualsIgnoreCase
Keterangan Pencocokan peka huruf besar/kecil (atau tidak peka huruf besar/kecil). Nilai harus sama persis dengan string.
Contoh @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'

StringNotEquals

Properti Nilai
Operator StringNotEquals
StringNotEqualsIgnoreCase
Keterangan Negasi StringEquals operator (atau StringEqualsIgnoreCase) .

StringStartsWith

Properti Nilai
Operator StringStartsWith
StringStartsWithIgnoreCase
Keterangan Pencocokan peka huruf besar/kecil (atau tidak peka huruf besar/kecil). Nilai dimulai dengan string.

StringNotStartsWith

Properti Nilai
Operator StringNotStartsWith
StringNotStartsWithIgnoreCase
Keterangan Negasi StringStartsWith operator (atau StringStartsWithIgnoreCase) .

StringLike

Properti Nilai
Operator StringLike
StringLikeIgnoreCase
Keterangan Pencocokan peka huruf besar/kecil (atau tidak peka huruf besar/kecil). Nilai dapat menyertakan kartubebas yang cocok dengan multi karakter (*) atau kartubebas yang cocok dengan satu karakter (?) di mana saja dalam string. Jika diperlukan, karakter ini dapat diloloskan dengan menambahkan garis miring terbalik \* dan \?.
Contoh @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'readonly/*'

Resource[name1] StringLike 'a*c?'
Jika Resource[name1] sama dengan "abcd", maka benar

Resource[name1] StringLike 'A*C?'
Jika Resource[name1] sama dengan "abcd", maka salah

Resource[name1] StringLike 'a*c'
Jika Resource[name1] sama dengan "abcd", maka salah

StringNotLike

Properti Nilai
Operator StringNotLike
StringNotLikeIgnoreCase
Keterangan Negasi StringLike operator (atau StringLikeIgnoreCase) .

Operator perbandingan numerik

Bagian ini mencantumkan operator perbandingan numerik yang tersedia untuk membangun kondisi.

Properti Nilai
Operator NumericEquals
NumericNotEquals
NumericGreaterThan
NumericGreaterThanEquals
NumericLessThan
NumericLessThanEquals
Keterangan Pencocokan angka. Hanya bilangan bulat yang didukung.

Operator perbandingan DateTime

Bagian ini mencantumkan operator perbandingan tanggal/waktu yang tersedia untuk membangun kondisi.

Properti Nilai
Operator DateTimeEquals
DateTimeNotEquals
DateTimeGreaterThan
DateTimeGreaterThanEquals
DateTimeLessThan
DateTimeLessThanEquals
Keterangan Pemeriksaan presisi penuh dengan format: yyyy-mm-ddThh:mm:ss.mmmmmmmZ. Digunakan untuk ID versi blob, rekam jepret blob, dan UTC sekarang.
Contoh @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z'

Operator perbandingan GUID

Bagian ini mencantumkan operator perbandingan pengidentifikasi unik global (GUID) yang tersedia untuk membangun kondisi.

Properti Nilai
Operator GuidEquals
GuidNotEquals
Keterangan Pencocokan tidak peka huruf besar/kecil dengan format: 00000000-0000-0000-0000-000000000000. Digunakan untuk mengidentifikasi sumber daya, seperti ID utama atau ID definisi peran.
Contoh

Operator perbandingan lintas produk

Bagian ini mencantumkan operator perbandingan lintas produk yang tersedia untuk membangun kondisi.

ForAnyOfAnyValues

Properti Nilai
Operator ForAnyOfAnyValues:StringEquals
ForAnyOfAnyValues:StringEqualsIgnoreCase
ForAnyOfAnyValues:StringNotEquals
ForAnyOfAnyValues:StringNotEqualsIgnoreCase
ForAnyOfAnyValues:StringLike
ForAnyOfAnyValues:StringLikeIgnoreCase
ForAnyOfAnyValues:StringNotLike
ForAnyOfAnyValues:StringNotLikeIgnoreCase
ForAnyOfAnyValues:NumericEquals
ForAnyOfAnyValues:NumericNotEquals
ForAnyOfAnyValues:NumericGreaterThan
ForAnyOfAnyValues:NumericGreaterThanEquals
ForAnyOfAnyValues:NumericLessThan
ForAnyOfAnyValues:NumericLessThanEquals
ForAnyOfAnyValues:GuidEquals
ForAnyOfAnyValues:GuidNotEquals
Keterangan Jika setidaknya satu nilai di sisi kiri memenuhi perbandingan dengan setidaknya satu nilai di sisi kanan, maka ekspresi dievaluasi sebagai benar. Memiliki format: ForAnyOfAnyValues:<BooleanFunction>. Mendukung banyak string dan angka.
Contoh @Resource[Microsoft.Storage/storageAccounts/encryptionScopes:name] ForAnyOfAnyValues:StringEquals {'validScope1', 'validScope2'}
Jika nama cakupan enkripsi sama dengan validScope1 atau validScope2, maka true.

{'red', 'blue'} ForAnyOfAnyValues:StringEquals {'blue', 'green'}
benar

{'red', 'blue'} ForAnyOfAnyValues:StringEquals {'orange', 'green'}
salah

ForAllOfAnyValues

Properti Nilai
Operator ForAllOfAnyValues:StringEquals
ForAllOfAnyValues:StringEqualsIgnoreCase
ForAllOfAnyValues:StringNotEquals
ForAllOfAnyValues:StringNotEqualsIgnoreCase
ForAllOfAnyValues:StringLike
ForAllOfAnyValues:StringLikeIgnoreCase
ForAllOfAnyValues:StringNotLike
ForAllOfAnyValues:StringNotLikeIgnoreCase
ForAllOfAnyValues:NumericEquals
ForAllOfAnyValues:NumericNotEquals
ForAllOfAnyValues:NumericGreaterThan
ForAllOfAnyValues:NumericGreaterThanEquals
ForAllOfAnyValues:NumericLessThan
ForAllOfAnyValues:NumericLessThanEquals
ForAllOfAnyValues:GuidEquals
ForAllOfAnyValues:GuidNotEquals
Keterangan Jika setiap nilai di sisi kiri memenuhi perbandingan dengan setidaknya satu nilai di sisi kanan, maka ekspresi dievaluasi sebagai benar. Memiliki format: ForAllOfAnyValues:<BooleanFunction>. Mendukung banyak string dan angka.
Contoh @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] ForAllOfAnyValues:StringEquals {'Cascade', 'Baker', 'Skagit'}

{'red', 'blue'} ForAllOfAnyValues:StringEquals {'orange', 'red', 'blue'}
benar

{'red', 'blue'} ForAllOfAnyValues:StringEquals {'red', 'green'}
salah

ForAnyOfAllValues

Properti Nilai
Operator ForAnyOfAllValues:StringEquals
ForAnyOfAllValues:StringEqualsIgnoreCase
ForAnyOfAllValues:StringNotEquals
ForAnyOfAllValues:StringNotEqualsIgnoreCase
ForAnyOfAllValues:StringLike
ForAnyOfAllValues:StringLikeIgnoreCase
ForAnyOfAllValues:StringNotLike
ForAnyOfAllValues:StringNotLikeIgnoreCase
ForAnyOfAllValues:NumericEquals
ForAnyOfAllValues:NumericNotEquals
ForAnyOfAllValues:NumericGreaterThan
ForAnyOfAllValues:NumericGreaterThanEquals
ForAnyOfAllValues:NumericLessThan
ForAnyOfAllValues:NumericLessThanEquals
ForAnyOfAllValues:GuidEquals
ForAnyOfAllValues:GuidNotEquals
Keterangan Jika setidaknya satu nilai di sisi kiri memenuhi perbandingan dengan setiap nilai di sisi kanan, maka ekspresi dievaluasi sebagai benar. Memiliki format: ForAnyOfAllValues:<BooleanFunction>. Mendukung banyak string dan angka.
Contoh {10, 20} ForAnyOfAllValues:NumericLessThan {15, 18}
benar

ForAllOfAllValues

Properti Nilai
Operator ForAllOfAllValues:StringEquals
ForAllOfAllValues:StringEqualsIgnoreCase
ForAllOfAllValues:StringNotEquals
ForAllOfAllValues:StringNotEqualsIgnoreCase
ForAllOfAllValues:StringLike
ForAllOfAllValues:StringLikeIgnoreCase
ForAllOfAllValues:StringNotLike
ForAllOfAllValues:StringNotLikeIgnoreCase
ForAllOfAllValues:NumericEquals
ForAllOfAllValues:NumericNotEquals
ForAllOfAllValues:NumericGreaterThan
ForAllOfAllValues:NumericGreaterThanEquals
ForAllOfAllValues:NumericLessThan
ForAllOfAllValues:NumericLessThanEquals
ForAllOfAllValues:GuidEquals
ForAllOfAllValues:GuidNotEquals
Keterangan Jika setiap nilai di sisi kiri memenuhi perbandingan dengan setiap nilai di sisi kanan, maka ekspresi dievaluasi sebagai benar. Memiliki format: ForAllOfAllValues:<BooleanFunction>. Mendukung banyak string dan angka.
Contoh {10, 20} ForAllOfAllValues:NumericLessThan {5, 15, 18}
salah

{10, 20} ForAllOfAllValues:NumericLessThan {25, 30}
benar

{10, 20} ForAllOfAllValues:NumericLessThan {15, 25, 30}
salah

Karakter khusus

karakter Deskripsi
* Tanda bintang (*) menunjukkan kecocokan kartubebas multi karakter yang dapat digunakan dengan operator Like. Jika perlu, Anda dapat menghindari tanda bintang dengan menambahkan garis miring terbalik \*.
? Tanda tanya (?) mewakili kecocokan kartubebas karakter tunggal yang dapat digunakan dengan operator Like. Jika perlu, Anda dapat menghindari tanda tanya dengan menambahkan garis miring terbalik \?.
$ Tanda dolar ($) digunakan untuk membantu menggambarkan kunci tag. Di Azure PowerShell, jika string yang diapit tanda kutip ganda (") menyertakan tanda dolar, Anda harus mengawalinya dengan backtick ('). Misalnya: tags:Project<`$key_case_sensitive`$>.

Pengelompokan dan prioritas

Jika Anda memiliki tiga ekspresi atau lebih untuk tindakan yang ditargetkan dengan operator yang berbeda di antara ekspresi, urutan evaluasi bersifat ambigu. Anda menggunakan tanda kurung () untuk mengelompokkan ekspresi dan menentukan urutan ekspresi dievaluasi. Ekspresi yang diapit tanda kurung memiliki prioritas yang lebih tinggi. Misalnya, jika Anda memiliki ekspresi berikut:

a AND b OR c

Anda harus menambahkan tanda kurung dengan salah satu cara berikut:

(a AND b) OR c
a AND (b OR c)

Langkah berikutnya