Tutorial: Menambahkan kondisi penetapan peran untuk membatasi akses ke blob menggunakan Azure CLI
Dalam kebanyakan kasus, penetapan peran memberikan izin yang Anda butuhkan ke sumber daya Azure. Namun, dalam beberapa kasus Anda mungkin ingin memberikan kontrol akses yang lebih terperinci dengan menambahkan kondisi penetapan peran.
Dalam tutorial ini, Anda akan mempelajari cara:
- Menambahkan kondisi ke penetapan peran
- Membatasi akses ke blob berdasarkan tag indeks blob
Penting
Kontrol akses berbasis atribut Azure (Azure ABAC) umumnya tersedia (GA) untuk mengontrol akses ke Azure Blob Storage, Azure Data Lake Storage Gen2, dan Azure Queues menggunakan request
atribut , , resource
environment
, dan principal
di tingkat performa akun penyimpanan standar dan premium. Saat ini, atribut sumber daya metadata kontainer dan blob daftar menyertakan atribut permintaan ada di PRATINJAU. Untuk informasi status fitur lengkap ABAC untuk Azure Storage, lihat Status fitur kondisi di Azure Storage.
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.
Prasyarat
Untuk informasi tentang prasyarat untuk menambah atau mengedit kondisi penetapan peran, lihat Prasyarat kondisi.
Kondisi
Dalam tutorial ini, Anda akan membatasi akses ke blob dengan tag tertentu. Misalnya, Anda menambahkan kondisi ke penetapan peran sehingga Chandra hanya dapat membaca file dengan tag Project=Cascade.
Jika Chandra mencoba membaca blob tanpa tag Project=Cascade, akses tidak diizinkan.
Berikut tampilan kondisi dalam kode:
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
AND NOT
SubOperationMatches{'Blob.List'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'
)
)
Langkah 1: Masuk ke Azure
Gunakan perintah az login dan ikuti instruksi yang muncul untuk masuk ke direktori Anda sebagai Administrator Akses Pengguna atau Pemilik.
az login
Gunakan az account show untuk mendapatkan ID langganan Anda.
az account show
Tentukan ID langganan dan inisialisasi variabel.
subscriptionId="<subscriptionId>"
Langkah 2: Buat pengguna
Gunakan az ad user create untuk membuat pengguna atau menemukan pengguna yang ada. Tutorial ini menggunakan Chandra sebagai contoh.
Inisialisasikan variabel untuk ID objek pengguna.
userObjectId="<userObjectId>"
Langkah 3: Siapkan penyimpanan
Anda dapat mengotorisasi akses ke penyimpanan Blob dari Azure CLI baik dengan kredensial Microsoft Entra atau dengan menggunakan kunci akses akun penyimpanan. Artikel ini memperlihatkan cara mengotorisasi operasi penyimpanan Blob menggunakan ID Microsoft Entra. Untuk informasi selengkapnya, lihat Mulai cepat: Membuat, mengunduh, dan melihat daftar blob dengan Azure CLI
Gunakan az storage account untuk membuat akun penyimpanan yang kompatibel dengan fitur indeks blob. Untuk informasi selengkapnya, lihat Mengelola dan menemukan data Azure Blob dengan tag indeks blob.
Gunakan kontainer penyimpanan az untuk membuat kontainer blob baru dalam akun penyimpanan dan atur tingkat akses anonim ke Privat (tanpa akses anonim).
Gunakan az storage blob upload untuk mengunggah file teks ke kontainer.
Tambahkan tag indeks blob berikut ini ke file teks. Untuk informasi selengkapnya, lihat Menggunakan tag indeks blob untuk mengelola dan menemukan data di Azure Blob Storage.
Catatan
Blob juga mendukung kemampuan untuk menyimpan metadata nilai-kunci arbitrer yang ditentukan pengguna. Meskipun metadata mirip dengan tag indeks blob, Anda harus menggunakan tag indeks blob dengan kondisi.
Tombol Nilai Project Cascade Unggah file teks kedua ke kontainer.
Tambahkan tag indeks blob berikut ke file teks kedua.
Tombol Nilai Project Baker Inisialisasikan variabel berikut dengan nama yang Anda gunakan.
resourceGroup="<resourceGroup>" storageAccountName="<storageAccountName>" containerName="<containerName>" blobNameCascade="<blobNameCascade>" blobNameBaker="<blobNameBaker>"
Langkah 4: Tetapkan peran dengan kondisi
Inisialisasikan variabel peran Storage Blob Data Reader.
roleDefinitionName="Storage Blob Data Reader" roleDefinitionId="2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"
Inisialisasi cakupan untuk grup sumber daya.
scope="/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
Inisialisasi kondisi.
condition="((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<\$key_case_sensitive\$>] StringEquals 'Cascade'))"
Di Bash, jika ekspansi riwayat diaktifkan, Anda mungkin melihat pesan
bash: !: event not found
karena tanda serunya (!). Dalam hal ini, Anda dapat menonaktifkan ekspansi riwayat dengan perintahset +H
. Untuk mengaktifkan kembali ekspansi riwayat, gunakanset -H
.Di Bash, tanda dolar ($) memiliki arti khusus untuk ekspansi. Jika kondisi Anda memiliki tanda dolar ($), Anda mungkin perlu mengawalinya dengan garis miring terbalik (\). Misalnya, kondisi ini menggunakan tanda dolar untuk menguraikan nama kunci tag. Untuk informasi selengkapnya tentang aturan untuk tanda kutip di Bash, lihat Kutipan Ganda.
Inisialisasikan versi dan deskripsi kondisi.
conditionVersion="2.0" description="Read access to blobs with the tag Project=Cascade"
Gunakan az role assignment create untuk menetapkan peran Storage Blob Data Reader dengan kondisi kepada pengguna di dalam cakupan grup sumber daya.
az role assignment create --assignee-object-id $userObjectId --scope $scope --role $roleDefinitionId --description "$description" --condition "$condition" --condition-version $conditionVersion
Berikut adalah contoh output-nya:
{ "canDelegate": null, "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'))", "conditionVersion": "2.0", "description": "Read access to blobs with the tag Project=Cascade", "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}", "name": "{roleAssignmentId}", "principalId": "{userObjectId}", "principalType": "User", "resourceGroup": "{resourceGroup}", "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1", "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}", "type": "Microsoft.Authorization/roleAssignments" }
Langkah 5: (Opsional) Lihat kondisi di portal Microsoft Azure
Di portal Microsoft Azure, buka grup sumber daya.
Pilih Kontrol Akses (IAM) .
Pada tab Penetapan peran, temukan penetapan peran.
Di kolom Kondisi, pilih Tampilkan/Edit untuk menampilkan kondisi.
Langkah 6: Uji kondisi
Buka jendela perintah baru.
Gunakan az login untuk masuk sebagai Chandra.
az login
Inisialisasikan variabel berikut dengan nama yang Anda gunakan.
storageAccountName="<storageAccountName>" containerName="<containerName>" blobNameBaker="<blobNameBaker>" blobNameCascade="<blobNameCascade>"
Gunakan az storage blob show untuk mencoba membaca properti file untuk proyek Baker.
az storage blob show --account-name $storageAccountName --container-name $containerName --name $blobNameBaker --auth-mode login
Berikut contoh output-nya. Perhatikan bahwa Anda tidak dapat membaca file karena kondisi yang Anda tambahkan.
You do not have the required permissions needed to perform this operation. Depending on your operation, you may need to be assigned one of the following roles: "Storage Blob Data Contributor" "Storage Blob Data Reader" "Storage Queue Data Contributor" "Storage Queue Data Reader" If you want to use the old authentication method and allow querying for the right account key, please use the "--auth-mode" parameter and "key" value.
Baca properti file untuk proyek Cascade.
az storage blob show --account-name $storageAccountName --container-name $containerName --name $blobNameCascade --auth-mode login
Berikut contoh output-nya. Perhatikan bahwa Anda dapat membaca properti file karena file tersebut memiliki tag Project=Cascade.
{ "container": "<containerName>", "content": "", "deleted": false, "encryptedMetadata": null, "encryptionKeySha256": null, "encryptionScope": null, "isAppendBlobSealed": null, "isCurrentVersion": null, "lastAccessedOn": null, "metadata": {}, "name": "<blobNameCascade>", "objectReplicationDestinationPolicy": null, "objectReplicationSourceProperties": [], "properties": { "appendBlobCommittedBlockCount": null, "blobTier": "Hot", "blobTierChangeTime": null, "blobTierInferred": true, "blobType": "BlockBlob", "contentLength": 7, "contentRange": null, ... }
Langkah 7: (Opsional) Edit kondisi
Di jendela perintah lain, gunakan az role assignment list untuk mendapatkan penetapan peran yang Anda tambahkan.
az role assignment list --assignee $userObjectId --resource-group $resourceGroup
Outputnya mirip dengan yang berikut ini:
[ { "canDelegate": null, "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'))", "conditionVersion": "2.0", "description": "Read access to blobs with the tag Project=Cascade", "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}", "name": "{roleAssignmentId}", "principalId": "{userObjectId}", "principalName": "chandra@contoso.com", "principalType": "User", "resourceGroup": "{resourceGroup}", "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1", "roleDefinitionName": "Storage Blob Data Reader", "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}", "type": "Microsoft.Authorization/roleAssignments" } ]
Buat file JSON dengan format berikut, serta perbarui properti
condition
dandescription
.{ "canDelegate": null, "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Baker'))", "conditionVersion": "2.0", "description": "Read access to blobs with the tag Project=Cascade or Project=Baker", "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}", "name": "{roleAssignmentId}", "principalId": "{userObjectId}", "principalName": "chandra@contoso.com", "principalType": "User", "resourceGroup": "{resourceGroup}", "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1", "roleDefinitionName": "Storage Blob Data Reader", "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}", "type": "Microsoft.Authorization/roleAssignments" }
Gunakan az role assignment update untuk memperbarui kondisi penetapan peran.
az role assignment update --role-assignment "./path/roleassignment.json"
Langkah 8: Bersihkan sumber daya
Gunakan az role assignment delete untuk menghapus penetapan peran dan kondisi yang Anda tambahkan.
az role assignment delete --assignee $userObjectId --role "$roleDefinitionName" --resource-group $resourceGroup
Hapus akun penyimpanan yang Anda buat.
Hapus pengguna yang Anda buat.