Öğ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 , environmentresource, ve özniteliklerini kullanarak requestAzure Blob Depolama, Azure Data Lake Storage 2. Nesil ve principal Azure Kuyruklarına erişimi denetlemek için genel olarak kullanılabilir (GA). Şu anda kapsayıcı meta verileri kaynak özniteliği ve liste blobu ekleme isteği özniteliği ÖNİzLEME aşamasındadır. Azure Depolama için ABAC'nin tam özellik durumu bilgileri için bkz. Azure Depolama 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şula sahip 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. PowerShell penceresini 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.Depolama 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. Bağlan-AzAccount komutunu kullanın ve dizininizde Kullanıcı Erişimi Yönetici istrator 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-Az Depolama Account kullanın. Daha fazla bilgi için bkz . Blob dizini etiketleriyle Azure Blob verilerini yönetme ve bulma.

  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-Az Depolama Container kullanın.

  3. Kapsayıcıya metin dosyası yüklemek için Set-Az Depolama BlobContent komutunu kullanın.

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

    Not

    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
    Project Cascade
  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
    Project 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 Blob 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. Koşulu 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 ekini bir backtick (') ile belirtmeniz 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ı başlatın.

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

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

    Çıkış örneği:

    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 Bağlan-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-Az Depolama Context kullanın.

    $bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountName
    
  5. Baker projesinin dosyasını okumaya çalışmak için Get-Az Depolama Blob 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. Art Arda 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ı başlatı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 komutunu kullanın.

    Set-AzRoleAssignment -InputObject $testRa -PassThru
    

    Çıkış örneği:

    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