Öğretici: Azure PowerShell kullanarak bloblara erişimi kısıtlamak için rol atama koşulu ekleme

Çoğu durumda rol ataması, Azure kaynaklarına ihtiyacınız olan izinleri verir. Ancak bazı durumlarda rol atama koşulu ekleyerek daha ayrıntılı erişim denetimi sağlamak isteyebilirsiniz.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Rol atamasına koşul ekleme
  • Blob dizin etiketine göre bloblara erişimi kısıtlama

Önemli

Azure öznitelik tabanlı erişim denetimi (Azure ABAC), hem standart hem de premium depolama hesabı performans katmanlarında request, resource, environment ve principal özniteliklerini kullanarak Azure Blob Depolama, Azure Data Lake Storage 2. Nesil ve Azure Kuyruklarına erişimi denetlemek için genel kullanıma sunulmuştur (GA). Şu anda liste blobu istek özniteliğini içerir ve hiyerarşik ad alanı için anlık görüntü isteği özniteliği ÖNİzLEME aşamasındadır. Azure Depolama için ABAC'nin tam özelliklerin durumu hakkında bilgi için bkz Azure Depolama'daki koşul özelliklerinin durumu.

Beta veya önizleme aşamasında olan ya da başka bir şekilde henüz genel kullanıma sunulmamış olan Azure özelliklerinde geçerli olan yasal koşullar için bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları.

Önkoşullar

Rol atama koşullarını ekleme veya düzenleme önkoşulları hakkında bilgi için bkz . Koşullar önkoşulları.

Koşul

Bu öğreticide, belirli bir etikete sahip bloblara erişimi kısıtlaacaksınız. Örneğin, Chandra'nın yalnızca Project=Cascade etiketine sahip dosyaları okuyabilmesi için rol atamasına bir koşul eklersiniz.

Bir koşulla rol atama diyagramı.

Chandra, Project=Cascade etiketi olmayan bir blobu okumaya çalışırsa erişime izin verilmez.

Project=Cascade etiketiyle bloblara okuma erişimini gösteren diyagram.

Koşul kodda şöyle görünür:

(
    (
        !(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'
    )
)

1. Adım: Önkoşulları yükleme

  1. Bir PowerShell penceresi açın.

  2. Yüklü modüllerin sürümlerini denetlemek için Get-InstalledModule kullanın.

    Get-InstalledModule -Name Az
    Get-InstalledModule -Name Az.Resources
    Get-InstalledModule -Name Az.Storage
    
  3. Gerekirse, Az,Az.Resources ve Az.Storage modülleri için gerekli sürümleri yüklemek için Install-Module kullanın.

    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. Oturumu yenilemek için PowerShell'i kapatıp yeniden açın.

2. Adım: Azure'da oturum açma

  1. Connect-AzAccount komutunu kullanın ve dizininizde Kullanıcı Erişimi Yöneticisi veya Sahip olarak oturum açarken görünen yönergeleri izleyin.

    Connect-AzAccount
    
  2. Tüm aboneliklerinizi listelemek için Get-AzSubscription komutunu kullanın.

    Get-AzSubscription
    
  3. Abonelik kimliğini belirleyin ve değişkeni başlatın.

    $subscriptionId = "<subscriptionId>"
    
  4. Aboneliği etkin abonelik olarak ayarlayın.

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

3. Adım: Kullanıcı oluşturma

  1. Bir kullanıcı oluşturmak veya var olan bir kullanıcıyı bulmak için New-MgUser kullanın. Bu öğreticide örnek olarak Chandra kullanılır.

  2. Kullanıcının nesne kimliği için değişkeni başlatın.

    $userObjectId = "<userObjectId>"
    

4. Adım: Depolamayı ayarlama

  1. Blob dizini özelliğiyle uyumlu bir depolama hesabı oluşturmak için New-AzStorageAccount kullanın. Daha fazla bilgi için Blob dizini etiketleriyle Azure Blob verilerini yönetme ve bulma bölümüne bakın.

  2. Depolama hesabında yeni bir blob kapsayıcısı oluşturmak ve anonim erişim düzeyini Özel (anonim erişim yok) olarak ayarlamak için New-AzStorageContainer kullanın.

  3. Set-AzStorageBlobContent komutunu kullanarak kapsayıcıya bir metin dosyası yükleyin.

  4. Metin dosyasına aşağıdaki blob dizin etiketini ekleyin. Daha fazla bilgi için bkz. Azure Blob Depolama'da verileri yönetmek ve bulmak için blob dizini etiketlerini kullanma.

    Uyarı

    Bloblar ayrıca rastgele kullanıcı tanımlı anahtar-değer meta verilerini depolama özelliğini de destekler. Meta veriler blob dizin etiketlerine benzer olsa da, blob dizin etiketlerini koşullarla birlikte kullanmanız gerekir.

    Anahtar Değer
    Proje Şelale
  5. Kapsayıcıya ikinci bir metin dosyası yükleyin.

  6. aşağıdaki blob dizin etiketini ikinci metin dosyasına ekleyin.

    Anahtar Değer
    Proje Fırıncı
  7. Kullandığınız adlarla aşağıdaki değişkenleri başlatın.

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

5. Adım: Koşulu olan bir rol atama

  1. Depolama Blobu Veri Okuyucusu rol değişkenlerini başlatın.

    $roleDefinitionName = "Storage Blob Data Reader"
    $roleDefinitionId = "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"
    
  2. Kaynak grubunun kapsamını başlatın.

    $scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
    
  3. Durumu başlatın.

    $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'))"
    

    PowerShell'de, koşulunuz dolar işareti ($) içeriyorsa, önüne bir backtick işareti (`) eklemeniz gerekir. Örneğin, bu koşul etiket anahtarı adını çizmek için dolar işaretlerini kullanır.

  4. Koşul sürümünü ve açıklamasını hazırlayın.

    $conditionVersion = "2.0"
    $description = "Read access to blobs with the tag Project=Cascade"
    
  5. New-AzRoleAssignment komutunu kullanarak, kullanıcıya bir kaynak grubu kapsamındaki bir koşula sahip Depolama Blobu Veri Okuyucusu rolünü atayın.

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

    Çıktının bir örneği aşağıda verilmişti:

    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'))
    

6. Adım: (İsteğe bağlı) Koşulu Azure portalında görüntüleme

  1. Azure portalında kaynak grubunu açın.

  2. Erişim denetimi (IAM) öğesini seçin.

  3. Rol atamaları sekmesinde rol atamasını bulun.

  4. Koşulu görüntülemek için Koşul sütununda Görüntüle/Düzenle'yi seçin.

Azure portalında Rol ataması koşulu ekleme işleminin ekran görüntüsü.

7. Adım: Koşulu test edin

  1. Yeni bir PowerShell penceresi açın.

  2. Chandra olarak oturum açmak için Connect-AzAccount kullanın.

    Connect-AzAccount
    
  3. Kullandığınız adlarla aşağıdaki değişkenleri başlatın.

    $storageAccountName = "<storageAccountName>"
    $containerName = "<containerName>"
    $blobNameBaker = "<blobNameBaker>"
    $blobNameCascade = "<blobNameCascade>"
    
  4. Depolama hesabınıza daha kolay erişmek için belirli bir bağlam oluşturmak için New-AzStorageContext kullanın.

    $bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountName
    
  5. Baker projesinin dosyasını okumaya çalışmak için Get-AzStorageBlob komutunu kullanın.

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

    Çıktının bir örneği aşağıda verilmişti. Eklediğiniz koşul nedeniyle dosyayı okuyamadığınıza dikkat edin.

    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. Cascade projesinin dosyasını okuyun.

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

    Çıktının bir örneği aşağıda verilmişti. Project=Cascade etiketine sahip olduğundan dosyayı okuyabileceğinize dikkat edin.

       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
    

8. Adım: (İsteğe bağlı) Koşulu düzenleme

  1. Diğer PowerShell penceresinde, eklediğiniz rol atamasını almak için Get-AzRoleAssignment komutunu kullanın.

    $testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId
    
  2. Koşulu düzenleyin.

    $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. Koşulu ve açıklamayı hazırlayın.

    $testRa.Condition = $condition
    $testRa.Description = "Read access to blobs with the tag Project=Cascade or Project=Baker"
    
  4. Rol atamasının koşulunu güncelleştirmek için Set-AzRoleAssignment kullanın.

    Set-AzRoleAssignment -InputObject $testRa -PassThru
    

    Çıktının bir örneği aşağıda verilmişti:

    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'))
    

9. Adım: Kaynakları temizleme

  1. Eklediğiniz rol atamasını ve koşulu kaldırmak için Remove-AzRoleAssignment komutunu kullanın.

    Remove-AzRoleAssignment -ObjectId $userObjectId -RoleDefinitionName $roleDefinitionName -ResourceGroupName $resourceGroup
    
  2. Oluşturduğunuz depolama hesabını silin.

  3. Oluşturduğunuz kullanıcıyı silin.

Sonraki adımlar