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 halus. 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 Tindakan dan atribut untuk kondisi penetapan peran Azure untuk Azure Blob Storage dan Tindakan dan atribut untuk kondisi penetapan peran Azure untuk antrean Azure.

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 untuk dipilih untuk kondisi Anda karena atribut harus tersedia di seluruh tindakan yang dipilih. Untuk menentukan atribut, Anda harus menyertakan sumber sebagai awalan.

Sumber atribut Deskripsi Kode
Sumber daya Menunjukkan bahwa atribut ada di sumber daya, seperti nama kontainer. @Resource
Minta Menunjukkan bahwa atribut adalah bagian dari permintaan tindakan, seperti mengatur tag indeks blob. @Request
Utama Menunjukkan bahwa atribut adalah atribut keamanan kustom Azure AD pada prinsipal, seperti pengguna, aplikasi perusahaan (perwakilan layanan), atau identitas terkelola. Atribut utama saat ini dalam pratinjau. @Principal

Atribut sumber daya dan permintaan

Untuk daftar atribut penyimpanan blob atau penyimpanan antrean yang dapat Anda gunakan dalam kondisi, lihat:

Atribut utama

Penting

Atribut utama saat ini dalam PRATINJAU. Lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure untuk persyaratan hukum yang berlaku pada fitur Azure dalam versi beta, pratinjau, atau belum dirilis secara umum.

Untuk menggunakan atribut utama, Anda harus memiliki semua hal berikut:

  • Lisensi Azure AD Premium P1 atau P2
  • Azure AD izin untuk pengguna yang masuk, seperti peran Administrator Penugasan Atribut
  • Atribut keamanan kustom yang ditentukan dalam Azure AD

Untuk informasi selengkapnya tentang atribut keamanan kustom, lihat:

Operator fungsi

Bagian ini mencantumkan operator fungsi yang tersedia untuk membangun kondisi.

ActionMatches

Properti Nilai
Operator ActionMatches
Deskripsi 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", lalu true

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

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

SubOperationMatches

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

Ada

Properti Nilai
Operator Exists
Deskripsi Memeriksa apakah atribut yang ditentukan ada.
Contoh Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:snapshot]
Dukungan atribut Encryption scope name
Snapshot
ID Versi

Operator logika

Bagian ini mencantumkan operator logis yang tersedia untuk membangun kondisi.

Dan

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

Atau

Properti Nilai
Operator OR
||
Deskripsi 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

Tidak

Properti Nilai
Operator NOT
!
Deskripsi 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
Deskripsi 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
Deskripsi 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
Deskripsi Negasi StringEquals operator (atau StringEqualsIgnoreCase).

StringStartsWith

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

StringNotStartsWith

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

StringLike

Properti Nilai
Operator StringLike
StringLikeIgnoreCase
Deskripsi 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
Deskripsi 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
Deskripsi Pencocokan nomor. 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
Deskripsi Pemeriksaan presisi penuh dengan format: yyyy-mm-ddThh:mm:ss.mmmmmmmZ. Digunakan untuk ID versi blob dan rekam jepret blob.
Contoh @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z'

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
Deskripsi 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 benar.

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

{'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
Deskripsi 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'}
TRUE

{'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
Deskripsi 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}
TRUE

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
Deskripsi 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}
TRUE

{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. Dalam 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 evaluasinya 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