Bagikan melalui


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 requestatribut , , resourceenvironment, 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.

Diagram penetapan peran dengan syarat.

Jika Chandra mencoba membaca blob tanpa tag Project=Cascade, akses tidak diizinkan.

Diagram yang menunjukkan akses baca ke blob dengan tag Project=Cascade.

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

  1. Gunakan perintah az login dan ikuti instruksi yang muncul untuk masuk ke direktori Anda sebagai Administrator Akses Pengguna atau Pemilik.

    az login
    
  2. Gunakan az account show untuk mendapatkan ID langganan Anda.

    az account show
    
  3. Tentukan ID langganan dan inisialisasi variabel.

    subscriptionId="<subscriptionId>"
    

Langkah 2: Buat pengguna

  1. Gunakan az ad user create untuk membuat pengguna atau menemukan pengguna yang ada. Tutorial ini menggunakan Chandra sebagai contoh.

  2. 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

  1. 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.

  2. Gunakan kontainer penyimpanan az untuk membuat kontainer blob baru dalam akun penyimpanan dan atur tingkat akses anonim ke Privat (tanpa akses anonim).

  3. Gunakan az storage blob upload untuk mengunggah file teks ke kontainer.

  4. 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
  5. Unggah file teks kedua ke kontainer.

  6. Tambahkan tag indeks blob berikut ke file teks kedua.

    Tombol Nilai
    Project Baker
  7. Inisialisasikan variabel berikut dengan nama yang Anda gunakan.

    resourceGroup="<resourceGroup>"
    storageAccountName="<storageAccountName>"
    containerName="<containerName>"
    blobNameCascade="<blobNameCascade>"
    blobNameBaker="<blobNameBaker>"
    

Langkah 4: Tetapkan peran dengan kondisi

  1. Inisialisasikan variabel peran Storage Blob Data Reader.

    roleDefinitionName="Storage Blob Data Reader"
    roleDefinitionId="2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"
    
  2. Inisialisasi cakupan untuk grup sumber daya.

    scope="/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
    
  3. 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 perintah set +H. Untuk mengaktifkan kembali ekspansi riwayat, gunakan set -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.

  4. Inisialisasikan versi dan deskripsi kondisi.

    conditionVersion="2.0"
    description="Read access to blobs with the tag Project=Cascade"
    
  5. 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

  1. Di portal Microsoft Azure, buka grup sumber daya.

  2. Pilih Kontrol Akses (IAM) .

  3. Pada tab Penetapan peran, temukan penetapan peran.

  4. Di kolom Kondisi, pilih Tampilkan/Edit untuk menampilkan kondisi.

Cuplikan layar Tambahkan kondisi penetapan peran di portal Microsoft Azure.

Langkah 6: Uji kondisi

  1. Buka jendela perintah baru.

  2. Gunakan az login untuk masuk sebagai Chandra.

    az login
    
  3. Inisialisasikan variabel berikut dengan nama yang Anda gunakan.

    storageAccountName="<storageAccountName>"
    containerName="<containerName>"
    blobNameBaker="<blobNameBaker>"
    blobNameCascade="<blobNameCascade>"
    
  4. 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.
    
  5. 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

  1. 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"
      }
    ]
    
  2. Buat file JSON dengan format berikut, serta perbarui properti condition dan description.

    {
        "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"
    }
    
  3. Gunakan az role assignment update untuk memperbarui kondisi penetapan peran.

    az role assignment update --role-assignment "./path/roleassignment.json"
    

Langkah 8: Bersihkan sumber daya

  1. 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
    
  2. Hapus akun penyimpanan yang Anda buat.

  3. Hapus pengguna yang Anda buat.

Langkah berikutnya