Sdílet prostřednictvím


Povolení přístupu pro čtení k objektům blob na základě značek a vlastních atributů zabezpečení

V tomto článku se dozvíte, jak povolit přístup pro čtení k objektům blob na základě značek indexu objektů blob a vlastních atributů zabezpečení pomocí podmínek řízení přístupu na základě atributů (ABAC). To usnadňuje správu přístupu k objektům blob.

Požadavky

Pokud chcete přiřadit vlastní atributy zabezpečení a přidat podmínky přiřazení rolí v tenantovi Microsoft Entra, potřebujete:

Důležité

Ve výchozím nastavení nemají globální správce a další role správců oprávnění ke čtení, definování nebo přiřazování vlastních atributů zabezpečení. Pokud tyto požadavky nesplňujete, v editoru podmínek se nezobrazí atributy principála a uživatele.

Podmínka

V tomto článku povolíte přístup pro čtení k objektům blob, pokud má uživatel vlastní atribut zabezpečení, který odpovídá značce indexu objektu blob. Toho se dosahuje přidáním podmínky k přiřazení role.

Diagram přiřazení role s podmínkou

Například, pokud má Brenda atribut Project=Baker, může číst pouze objekty blob se značkou indexu Project=Baker. Podobně může Chandra číst pouze datové bloky s Project=Cascade.

Diagram znázorňující přístup pro čtení k objektům blob na základě značek a vlastních atributů zabezpečení

Tady je, jak podmínka vypadá v kódu:

(
 (
  !(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$>]
 )
)

Další informace o podmínkách najdete v tématu Co je řízení přístupu na základě atributů Azure (Azure ABAC)?

Krok 1: Přidání nového vlastního atributu zabezpečení

  1. Přihlaste se do Azure Portalu.

  2. Klikněte navlastní atributy zabezpečeníMicrosoft Entra ID>.

  3. Přidejte atribut s názvem Project s hodnotami Baker a Cascade. Nebo použijte existující atribut. Další informace naleznete v tématu Přidání nebo deaktivace vlastních atributů zabezpečení v Microsoft Entra ID.

    Snímek obrazovky s přidáním vlastního atributu zabezpečení

Krok 2: Přiřazení vlastního atributu zabezpečení uživateli

  1. V Microsoft Entra ID vytvořte skupinu zabezpečení.

  2. Přidejte uživatele jako člena skupiny.

  3. Přiřaďte uživateli atribut Project s hodnotou Cascade. Další informace najdete v tématu Přiřazení, aktualizace, výpis nebo odebrání vlastních atributů zabezpečení pro uživatele.

    Snímek obrazovky s přiřazením vlastního atributu zabezpečení

  4. Nezapomeňte kliknout na Uložit a uložit zadání.

Krok 3: Nastavení úložiště a indexových značek blobů

  1. Vytvořte účet úložiště, který je kompatibilní s funkcí indexových značek blob. Další informace naleznete v článku Správa a vyhledávání dat Azure Blob pomocí značek indexu objektů blob.

  2. Vytvořte nový kontejner v rámci účtu úložiště a nastavte úroveň veřejného přístupu na Privátní (bez anonymního přístupu).

  3. Nastavte typ ověřování na uživatelský účet Azure AD.

  4. Nahrajte textové soubory do kontejneru a nastavte následující značky indexu objektů blob.

    Soubor Klíč Hodnota
    Textový soubor Baker Projekt Pekař
    Kaskádový textový soubor Projekt Kaskáda

    Návod

    Informace o znacích povolených pro značky indexu objektů blob najdete v tématu Nastavení značek indexu objektů blob.

Krok 4: Přiřazení role Čtenář dat objektů blob služby Storage s podmínkou

  1. Otevřete novou kartu a přihlaste se k webu Azure Portal.

  2. Otevřete skupinu prostředků, která má účet úložiště.

  3. Klikněte na Řízení přístupu (IAM).

  4. Kliknutím na kartu Přiřazení rolí zobrazíte přiřazení rolí v tomto rozsahu.

  5. Klikněte na Přidat>Přidat přiřazení role.

  6. Na kartě Role vyberte roli Čtenář dat objektů blob služby Storage .

  7. Na kartě Členové vyberte skupinu zabezpečení, kterou jste vytvořili dříve.

  8. (Volitelné) Do pole Popis zadejte přístup pro čtení k objektům blob, pokud má uživatel vlastní atribut zabezpečení, který odpovídá značce indexu objektu blob.

  9. Na kartě Podmínky (volitelné) klikněte na Přidat podmínku.

    Zobrazí se stránka Přidat podmínku přiřazení role.

  10. V části Přidat akci klikněte na Přidat akci.

    Zobrazí se podokno pro výběr akce. Toto podokno je filtrovaný seznam akcí dat na základě přiřazení role, která bude cílem vaší podmínky.

  11. Klepněte na Přečíst blob a potom klepněte na Vybrat.

  12. V části Výraz sestavení klepněte na Přidat.

  13. Zadejte následující nastavení:

    Nastavení Hodnota
    Zdroj atributů Ředitel
    Vlastnost <attributeset>_Projekt
    Operátor StringEquals
    Možnost Vlastnost
    Zdroj atributů Zdroj
    Vlastnost Značky indexu objektů blob [Hodnoty v klíči]
    Klíč Projekt

    Poznámka:

    Pokud objekt zabezpečení není uvedený jako možnost ve zdroji atributů, ujistěte se, že jste definovali vlastní atribut zabezpečení, jak je popsáno výše v kroku 1: Přidání nového vlastního atributu zabezpečení.

    Snímek obrazovky s podmínkou používající hlavní atribut zobrazený ve vizuálním editoru.

  14. Posuňte se nahoru na typ Editoru a klikněte na Kód.

    Vaše podmínka by měla vypadat nějak takto:

    (
     (
      !(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. Kliknutím na Uložit uložíte podmínku.

  16. Na kartě Revize a přiřazení klikněte na Revize a přiřazení a přiřaďte roli Čtenář dat objektů blob služby Storage s určenou podmínkou.

Krok 5: Přiřaďte roli Čtenář

  • Opakujte předchozí kroky a přiřaďte roli Čtenář pro bezpečnostní skupinu na úrovni skupiny prostředků.

    Poznámka:

    Obvykle nemusíte přiřazovat roli Čtenář. To se ale provádí, abyste mohli podmínku otestovat pomocí webu Azure Portal.

Krok 6: Otestování podmínky

  1. V novém okně otevřete Azure Portal.

  2. Přihlaste se jako uživatel, který jste vytvořili pomocí vlastního atributu Project=Cascade zabezpečení.

  3. Otevřete účet úložiště a kontejner, který jste vytvořili.

  4. Ujistěte se, že je metoda ověřování nastavená na uživatelský účet Azure AD , a ne přístupový klíč.

    Snímek obrazovky kontejneru úložiště s testovacími soubory

  5. Klikněte na textový soubor Baker.

    Neměli byste být schopni zobrazit nebo stáhnout objekt blob a měla by se zobrazit zpráva o selhání autorizace.

  6. Klikněte na Kaskádový textový soubor.

    Měli byste být schopni zobrazit a stáhnout objekt blob.

Azure PowerShell

K přidání podmínek přiřazení rolí můžete použít také Azure PowerShell. Následující příkazy ukazují, jak přidat podmínky. Informace najdete v tématu Kurz: Přidání podmínky přiřazení role k omezení přístupu k objektům blob pomocí Azure PowerShellu.

Přidání podmínky

  1. Použijte příkaz Connect-AzAccount a postupujte podle pokynů, které se zobrazí pro přihlášení k adresáři jako správce řízení přístupu na základě role.

    Connect-AzAccount
    
  2. Pomocí rutiny Get-AzRoleAssignment získáte přiřazení role, které jste přiřadili ke skupině zabezpečení.

    $groupRoleAssignment = Get-AzRoleAssignment -ObjectId <groupObjectId> -Scope <scope>
    
  3. Condition Nastavte vlastnost objektu přiřazení role. Nezapomeňte použít název sady atributů.

    $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 Nastavte vlastnost objektu přiřazení role.

    $groupRoleAssignment.ConditionVersion = "2.0"
    
  5. K aktualizaci přiřazení role použijte Set-AzRoleAssignment .

    Set-AzRoleAssignment -InputObject $groupRoleAssignment
    

Otestovat podmínku

  1. V novém okně PowerShellu se pomocí příkazu Connect-AzAccount přihlaste jako člen skupiny zabezpečení.

    Connect-AzAccount
    
  2. Pomocí rutiny New-AzStorageContext nastavte kontext pro účet úložiště.

    $bearerCtx = New-AzStorageContext -StorageAccountName <accountName>
    
  3. Pomocí rutiny Get-AzStorageBlob se pokuste přečíst soubor Baker.

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

    Objekt blob byste neměli číst a měla by se zobrazit zpráva o neúspěšné autorizaci.

    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. Pomocí rutiny Get-AzStorageBlob se pokuste přečíst soubor Cascade.

    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 (příkazový řádek nástroje Azure)

K přidání podmínek přiřazení rolí můžete použít také Azure CLI. Následující příkazy ukazují, jak přidat podmínky. Informace najdete v tématu Kurz: Přidání podmínky přiřazení role k omezení přístupu k objektům blob pomocí Azure CLI.

Přidání podmínky

  1. Použijte příkaz az login a postupujte podle pokynů, které se zobrazí pro přihlášení k adresáři jako správce řízení přístupu na základě role.

    az login
    
  2. Použijte az role assignment list k získání přiřazení role, které jste přiřadili skupině zabezpečení.

    az role assignment list --assignee <groupObjectId> --scope <scope>
    
  3. Vytvořte soubor JSON s následujícím formátem.

    {
        "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. Aktualizujte condition vlastnost. Nezapomeňte použít název sady atributů.

    "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. Aktualizujte conditionVersion vlastnost.

    "conditionVersion": "2.0",
    
  6. Pomocí příkazu az role assignment update přidejte podmínku k přiřazení role.

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

Otestuj podmínku

  1. V novém příkazovém okně se pomocí příkazu az login přihlaste jako člen skupiny zabezpečení.

    az login
    
  2. Pomocí příkazu az storage blob show se pokuste přečíst vlastnosti souboru Baker.

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

    Neměli byste být schopni číst blob a měla by se zobrazit zpráva o neúspěšné autorizaci.

    You do not have the required permissions needed to perform this operation.
    ...
    
  3. Pomocí příkazu az storage blob show se pokuste přečíst vlastnosti souboru Cascade.

    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,
    ...
    }
    

Další kroky