Bagikan melalui


Tutorial: Menambahkan kondisi penetapan peran untuk membatasi akses ke blob menggunakan Azure PowerShell

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: Install prasyarat

  1. Buka jendela PowerShell.

  2. Gunakan Get-InstalledModule untuk memeriksa versi modul yang diinstal.

    Get-InstalledModule -Name Az
    Get-InstalledModule -Name Az.Resources
    Get-InstalledModule -Name Az.Storage
    
  3. Jika perlu, gunakan Install-Module untuk menginstal versi yang diperlukan untuk modul Az, Az.Resources, dan Az.Storage.

    Install-Module -Name Az -RequiredVersion 5.5.0
    Install-Module -Name Az.Resources -RequiredVersion 3.2.1
    Install-Module -Name Az.Storage -RequiredVersion 2.5.2-preview -AllowPrerelease
    
  4. Tutup dan buka kembali PowerShell untuk me-refresh sesi.

Langkah 2: Masuk ke Azure

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

    Connect-AzAccount
    
  2. Gunakan Get-AzSubscription untuk mendaftar semua langganan Anda.

    Get-AzSubscription
    
  3. Tentukan ID langganan dan inisialisasi variabel.

    $subscriptionId = "<subscriptionId>"
    
  4. Atur langganan sebagai langganan aktif.

    $context = Get-AzSubscription -SubscriptionId $subscriptionId
    Set-AzContext $context
    

Langkah 3: Buat pengguna

  1. Gunakan New-MgUser untuk membuat pengguna atau menemukan pengguna yang sudah ada. Tutorial ini menggunakan Chandra sebagai contoh.

  2. Inisialisasikan variabel untuk ID objek pengguna.

    $userObjectId = "<userObjectId>"
    

Langkah 4: Siapkan penyimpanan

  1. Gunakan New-AzStorageAccount 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 New-AzStorageContainer untuk membuat kontainer blob baru dalam akun penyimpanan dan mengatur tingkat akses anonim ke Privat (tanpa akses anonim).

  3. GunakanSet-AzStorageBlobContent 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 5: 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 PowerShell, jika kondisi Anda menyertakan tanda dolar ($), Anda harus mengawalinya dengan aksen rendah (`). Misalnya, kondisi ini menggunakan tanda dolar untuk menguraikan nama kunci tag.

  4. Inisialisasikan versi dan deskripsi kondisi.

    $conditionVersion = "2.0"
    $description = "Read access to blobs with the tag Project=Cascade"
    
  5. Gunakan New-AzRoleAssignment untuk menetapkan peran Pembaca Data Blob Penyimpanan dengan kondisi kepada pengguna pada cakupan grup sumber daya.

    New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersion
    

    Berikut adalah contoh output-nya:

    RoleAssignmentId   : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microso
                         ft.Authorization/roleAssignments/<roleAssignmentId>
    Scope              : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>
    DisplayName        : Chandra
    SignInName         : chandra@contoso.com
    RoleDefinitionName : Storage Blob Data Reader
    RoleDefinitionId   : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
    ObjectId           : <userObjectId>
    ObjectType         : User
    CanDelegate        : False
    Description        : Read access to blobs with the tag Project=Cascade
    ConditionVersion   : 2.0
    Condition          : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT
                         SubOperationMatches{'Blob.List'})) OR
                         (@Resource[Microsoft.Storage/storageAccounts/blobServices/co
                         ntainers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'))
    

Langkah 6: (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 7: Uji kondisi

  1. Buka jendela PowerShell baru.

  2. Gunakan Connect-AzAccount untuk masuk sebagai Chandra.

    Connect-AzAccount
    
  3. Inisialisasikan variabel berikut dengan nama yang Anda gunakan.

    $storageAccountName = "<storageAccountName>"
    $containerName = "<containerName>"
    $blobNameBaker = "<blobNameBaker>"
    $blobNameCascade = "<blobNameCascade>"
    
  4. Gunakan New-AzStorageContext untuk membuat konteks tertentu guna mengakses akun penyimpanan Anda dengan lebih mudah.

    $bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountName
    
  5. Gunakan Get-AzStorageBlob untuk mencoba membaca file untuk proyek Baker.

    Get-AzStorageBlob -Container $containerName -Blob $blobNameBaker -Context $bearerCtx 
    

    Berikut contoh output-nya. Perhatikan bahwa Anda tidak dapat membaca file karena kondisi yang Anda tambahkan.

    Get-AzStorageBlob : This request is not authorized to perform this operation using this permission. HTTP Status Code:
    403 - HTTP Error Message: This request is not authorized to perform this operation using this permission.
    ErrorCode: AuthorizationPermissionMismatch
    ErrorMessage: This request is not authorized to perform this operation using this permission.
    RequestId: <requestId>
    Time: Sat, 24 Apr 2021 13:26:25 GMT
    At line:1 char:1
    + Get-AzStorageBlob -Container $containerName -Blob $blobNameBaker -Con ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : CloseError: (:) [Get-AzStorageBlob], StorageException
        + FullyQualifiedErrorId : StorageException,Microsoft.WindowsAzure.Commands.Storage.Blob.Cmdlet.GetAzureStorageBlob
       Command
    
  6. Baca file untuk proyek Cascade.

    Get-AzStorageBlob -Container $containerName -Blob $blobNameCascade -Context $bearerCtx 
    

    Berikut contoh output-nya. Perhatikan bahwa Anda dapat membaca file karena file tersebut memiliki tag Project=Cascade.

       AccountName: <storageAccountName>, ContainerName: <containerName>
    
    Name                 BlobType  Length          ContentType                    LastModified         AccessTier SnapshotT
                                                                                                                  ime
    ----                 --------  ------          -----------                    ------------         ---------- ---------
    CascadeFile.txt      BlockBlob 7               text/plain                     2021-04-24 05:35:24Z Hot
    

Langkah 8: (Opsional) Edit kondisi

  1. Di jendela PowerShell lainnya, gunakan Get-AzRoleAssignment untuk mendapatkan penetapan peran yang Anda tambahkan.

    $testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId
    
  2. Edit kondisinya.

    $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'))"
    
  3. Inisialisasi kondisi dan deskripsi.

    $testRa.Condition = $condition
    $testRa.Description = "Read access to blobs with the tag Project=Cascade or Project=Baker"
    
  4. Gunakan Set-AzRoleAssignment untuk memperbarui kondisi penetapan peran.

    Set-AzRoleAssignment -InputObject $testRa -PassThru
    

    Berikut adalah contoh output-nya:

    RoleAssignmentId   : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microso
                         ft.Authorization/roleAssignments/<roleAssignmentId>
    Scope              : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>
    DisplayName        : Chandra
    SignInName         : chandra@contoso.com
    RoleDefinitionName : Storage Blob Data Reader
    RoleDefinitionId   : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
    ObjectId           : <userObjectId>
    ObjectType         : User
    CanDelegate        : False
    Description        : Read access to blobs with the tag Project=Cascade or Project=Baker
    ConditionVersion   : 2.0
    Condition          : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT
                         SubOperationMatches{'Blob.List'})) OR
                         (@Resource[Microsoft.Storage/storageAccounts/blobServices/co
                         ntainers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade' OR @Resource[Microsoft.S
                         torage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]
                         StringEquals 'Baker'))
    

Langkah 9: Bersihkan sumber daya

  1. Gunakan Remove-AzRoleAssignment untuk menghapus penetapan peran dan kondisi yang Anda tambahkan.

    Remove-AzRoleAssignment -ObjectId $userObjectId -RoleDefinitionName $roleDefinitionName -ResourceGroupName $resourceGroup
    
  2. Hapus akun penyimpanan yang Anda buat.

  3. Hapus pengguna yang Anda buat.

Langkah berikutnya