Etiketlere ve özel güvenlik özniteliklerine göre bloblara okuma erişimine izin verme

Bu makalede, öznitelik tabanlı erişim denetimi (ABAC) koşullarını kullanarak blob dizin etiketlerini ve özel güvenlik özniteliklerini temel alan bloblara okuma erişimine nasıl izin vereceğinizi öğreneceksiniz. Bu, bloblara erişimi yönetmeyi kolaylaştırabilir.

Önkoşullar

Microsoft Entra kiracınıza özel güvenlik öznitelikleri atamak ve rol atama koşulları eklemek için şunları yapmanız gerekir:

Önemli

Varsayılan olarak, Genel Yönetici istrator ve diğer yönetici rollerinin özel güvenlik özniteliklerini okuma, tanımlama veya atama izinleri yoktur. Bu önkoşulları karşılamıyorsanız koşul düzenleyicisinde sorumlu/kullanıcı özniteliklerini görmezsiniz.

Koşul

Bu makalede, kullanıcının blob dizin etiketiyle eşleşen özel bir güvenlik özniteliği varsa bloblara okuma erişimine izin verirsiniz. Bu, rol atamasına bir koşul eklenerek gerçekleştirilir.

Diagram of role assignment with a condition.

Örneğin, Brenda özniteliğine Project=Bakersahipse blobları yalnızca blob dizin etiketiyle Project=Baker okuyabilir. Benzer şekilde, Chandra yalnızca ile Project=Cascadeblobları okuyabilir.

Diagram showing read access to blobs based on tags and custom security attributes.

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

(
 (
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
 )
 OR 
 (
  @Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]
 )
)

Koşullar hakkında daha fazla bilgi için bkz . Azure öznitelik tabanlı erişim denetimi (Azure ABAC) nedir?.

1. Adım: Yeni bir özel güvenlik özniteliği ekleme

  1. Azure Portal oturum açın.

  2. Microsoft Entra ID>Özel güvenlik öznitelikleri'ne tıklayın.

  3. ve Cascadedeğerleriyle Baker adlı Project bir öznitelik ekleyin. Veya var olan bir özniteliği kullanın. Daha fazla bilgi için bkz . Microsoft Entra Id'de özel güvenlik öznitelikleri ekleme veya devre dışı bırakma.

    Screenshot of adding a custom security attribute.

2. Adım: Kullanıcıya özel güvenlik özniteliği atama

  1. Microsoft Entra Id'de bir güvenlik grubu oluşturun.

  2. Bir kullanıcıyı grubun üyesi olarak ekleyin.

  3. özniteliğini Project değerine sahip Cascade olarak kullanıcıya atayın. Daha fazla bilgi için bkz . Kullanıcı için özel güvenlik özniteliklerini atama, güncelleştirme, listeleme veya kaldırma.

    Screenshot of assigning a custom security attribute.

  4. Ödevinizi kaydetmek için Kaydet'e tıklamayı unutmayın.

3. Adım: Depolama ve blob dizini etiketlerini ayarlama

  1. Blob dizin etiketleri özelliğiyle uyumlu bir depolama hesabı oluşturun. Daha fazla bilgi için bkz . Blob dizini etiketleriyle Azure Blob verilerini yönetme ve bulma.

  2. Depolama hesabında yeni bir kapsayıcı oluşturun ve Genel erişim düzeyini Özel (anonim erişim yok) olarak ayarlayın.

  3. Kimlik doğrulama türünü Azure AD Kullanıcı Hesabı olarak ayarlayın.

  4. Metin dosyalarını kapsayıcıya yükleyin ve aşağıdaki blob dizin etiketlerini ayarlayın.

    Dosya Anahtar Değer
    Baker metin dosyası Proje Fırıncı
    Metin dosyasını art arda basamaklama Proje Cascade

    Bahşiş

    Blob dizin etiketleri için izin verilen karakterler hakkında bilgi için bkz . Blob dizini etiketlerini ayarlama.

4. Adım: Bir koşulla Depolama Blob Veri Okuyucusu rolü atama

  1. Yeni bir sekme açın ve Azure portalında oturum açın.

  2. Depolama hesabı olan kaynak grubunu açın.

  3. Erişim denetimi (IAM) öğesine tıklayın.

  4. Bu kapsamdaki rol atamalarını görüntülemek için Rol atamaları sekmesine tıklayın.

  5. Rol ataması ekle'ye>tıklayın.

  6. Rol sekmesinde blob veri okuyucusu rolünü Depolama seçin.

  7. Üyeler sekmesinde, daha önce oluşturduğunuz güvenlik grubunu seçin.

  8. (İsteğe bağlı) Açıklama kutusuna, kullanıcının blob dizin etiketiyle eşleşen özel bir güvenlik özniteliği varsa Bloblara okuma erişimi girin.

  9. Koşullar (isteğe bağlı) sekmesinde Koşul ekle'ye tıklayın.

    Rol ataması koşulu ekle sayfası görüntülenir.

  10. Eylem ekle bölümünde Eylem ekle'ye tıklayın.

    Eylem seçin bölmesi görüntülenir. Bu bölme, koşulunuzun hedefi olacak rol atamasını temel alan filtrelenmiş bir veri eylemleri listesidir.

  11. Blobu oku'ya ve ardından Seç'e tıklayın.

  12. Derleme ifadesi bölümünde Ekle'ye tıklayın.

  13. Aşağıdaki ayarları girin:

    Ayar Değer
    Öznitelik kaynağı Asıl
    Öznitelik <attributeset>_Project
    İşleç StringEquals
    Seçenek Öznitelik
    Öznitelik kaynağı Kaynak
    Öznitelik Blob dizin etiketleri [Anahtardaki değerler]
    Tuş Proje

    Dekont

    Sorumlu, Öznitelik kaynağında seçenek olarak listelenmiyorsa, 1. Adım: Yeni bir özel güvenlik özniteliği ekleme bölümünde daha önce açıklandığı gibi özel güvenlik özniteliği tanımladığınızdan emin olun.

    Screenshot of condition using principal attribute displayed in visual editor.

  14. Düzenleyici türüne kadar yukarı kaydırın ve Kod'a tıklayın.

    Koşulunuz aşağıdakine benzer görünmelidir:

    (
     (
      !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
     )
     OR 
     (
      @Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]
     )
    )
    
  15. Koşulu kaydetmek için Kaydet'e tıklayın.

  16. Depolama Blob Veri Okuyucusu rolünü bir koşulla atamak için Gözden Geçir ve ata sekmesinde Gözden Geçir + ata'ya tıklayın.

5. Adım: Okuyucu rolü atama

  • Kaynak grubu kapsamında güvenlik grubu için Okuyucu rolünü atamak için önceki adımları yineleyin.

    Dekont

    Genellikle Okuyucu rolünü atamanız gerekmez. Ancak bu, Azure portalını kullanarak koşulu test edebilmeniz için yapılır.

6. Adım: Koşulu test edin

  1. Yeni bir pencerede Azure portalını açın.

  2. Özel güvenlik özniteliğiyle Project=Cascade oluşturduğunuz kullanıcı olarak oturum açın.

  3. Oluşturduğunuz depolama hesabını ve kapsayıcıyı açın.

  4. Kimlik doğrulama yönteminin Erişim anahtarı değil Azure AD Kullanıcı Hesabı olarak ayarlandığından emin olun.

    Screenshot of storage container with test files.

  5. Baker metin dosyasına tıklayın.

    Blobu görüntüleyememeli veya indirememelisiniz ve yetkilendirme başarısız iletisi görüntülenmelidir.

  6. Metin dosyasını art arda ekle'ye tıklayın.

    Blobu görüntüleyebilir ve indirebilirsiniz.

Azure PowerShell

Rol atama koşulları eklemek için Azure PowerShell'i de kullanabilirsiniz. Aşağıdaki komutlar koşulların nasıl ekleneceğini gösterir. Bilgi için bkz . Öğretici: Azure PowerShell kullanarak bloblara erişimi kısıtlamak için rol atama koşulu ekleme.

Koşul ekle

  1. Bağlan-AzAccount komutunu kullanın ve dizininizde Rol Tabanlı Erişim Denetimi Yönetici istrator olarak oturum açarken görünen yönergeleri izleyin.

    Connect-AzAccount
    
  2. Güvenlik grubuna atadığınız rol atamasını almak için Get-AzRoleAssignment komutunu kullanın.

    $groupRoleAssignment = Get-AzRoleAssignment -ObjectId <groupObjectId> -Scope <scope>
    
  3. Condition Rol atama nesnesinin özelliğini ayarlayın. Öznitelik kümesi adınızı kullandığınızdan emin olun.

    $groupRoleAssignment.Condition="((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>]))"
    
  4. ConditionVersion Rol atama nesnesinin özelliğini ayarlayın.

    $groupRoleAssignment.ConditionVersion = "2.0"
    
  5. Rol atamasını güncelleştirmek için Set-AzRoleAssignment komutunu kullanın.

    Set-AzRoleAssignment -InputObject $groupRoleAssignment
    

Koşulu test edin

  1. Yeni bir PowerShell penceresinde Bağlan-AzAccount komutunu kullanarak güvenlik grubunun bir üyesi olarak oturum açın.

    Connect-AzAccount
    
  2. Depolama hesabının bağlamını ayarlamak için New-Az Depolama Context kullanın.

    $bearerCtx = New-AzStorageContext -StorageAccountName <accountName>
    
  3. Baker dosyasını okumaya çalışmak için Get-Az Depolama Blob kullanın.

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

    Blobu okuyamamalısınız ve yetkilendirme başarısız iletisi görüntülenmelidir.

    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.
    ...
    
  4. Art Arda Dosyasını okumayı denemek için Get-Az Depolama Blob kullanın.

    Get-AzStorageBlob -Container <containerName> -Blob <blobNameCascade> -Context $bearerCtx
    You should be able to read the blob.
    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
    

Azure CLI

Rol ataması koşulları eklemek için Azure CLI'yi de kullanabilirsiniz. Aşağıdaki komutlar koşulların nasıl ekleneceğini gösterir. Bilgi için bkz . Öğretici: Azure CLI kullanarak bloblara erişimi kısıtlamak için rol atama koşulu ekleme.

Koşul ekle

  1. az login komutunu kullanın ve dizininizde Rol Tabanlı Erişim Denetimi Yönetici istrator olarak oturum açarken görünen yönergeleri izleyin.

    az login
    
  2. Güvenlik grubuna atadığınız rol atamasını almak için az role assignment list komutunu kullanın.

    az role assignment list --assignee <groupObjectId> --scope <scope>
    
  3. Aşağıdaki biçime sahip bir JSON dosyası oluşturun.

    {
        "canDelegate": null,
        "condition": "",
        "conditionVersion": "",
        "description": "",
        "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
        "name": "{roleAssignmentId}",
        "principalId": "{groupObjectId}",
        "principalName": "{principalName}",
        "principalType": "Group",
        "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"
    }
    
  4. özelliğini güncelleştirin condition . Öznitelik kümesi adınızı kullandığınızdan emin olun.

    "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]))",
    
  5. özelliğini güncelleştirin conditionVersion .

    "conditionVersion": "2.0",
    
  6. Koşulu rol atamasına eklemek için az role assignment update komutunu kullanın.

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

Koşulu test edin

  1. Yeni bir komut penceresinde az login komutunu kullanarak güvenlik grubunun bir üyesi olarak oturum açın.

    az login
    
  2. Baker dosyasının özelliklerini okumayı denemek için az storage blob show komutunu kullanın.

    az storage blob show --account-name <storageAccountName> --container-name <containerName> --name <blobNameBaker> --auth-mode login
    

    Blobu okuyamamalısınız ve yetkilendirme başarısız iletisi görüntülenmelidir.

    You do not have the required permissions needed to perform this operation.
    ...
    
  3. Cascade dosyasının özelliklerini okumayı denemek için az storage blob show komutunu kullanın.

    az storage blob show --account-name <storageAccountName> --container-name <containerName> --name <blobNameCascade> --auth-mode login
    You should be able to read the blob.
    {
      "container": "<containerName>",
      "content": "",
      "deleted": false,
      "encryptedMetadata": null,
      "encryptionKeySha256": null,
      "encryptionScope": null,
    ...
    }
    

Sonraki adımlar