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é

Globální Správa istrator a další role správce ve výchozím nastavení nemají 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 objektu zabezpečení 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 of role assignment with a condition.

Pokud má například Brenda atribut Project=Baker, může číst pouze objekty blob se značkou indexu Project=Baker objektů blob. Podobně může Chandra číst pouze objekty blob s Project=Cascade.

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

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 k portálu Azure.

  2. Klikněte na vlastní 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.

    Screenshot of adding a custom security attribute.

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

    Screenshot of assigning a custom security attribute.

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

Krok 3: Nastavení značek indexu úložiště a objektů blob

  1. Vytvořte účet úložiště, který je kompatibilní s funkcí značek indexu objektů blob. Další informace najdete v tématu Správa a vyhledání dat objektů blob Azure 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 Key Hodnota
    Textový soubor Pekárna Projekt Baker
    Kaskádový textový soubor Projekt Cascade

    Tip

    Informace o znaménách znaků 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 oboru.

  5. Klikněte na 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 akce Vybrat. 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 tlačítko Číst objekt blob a potom klepněte na tlačítko Vybrat.

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

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

    Nastavení Hodnota
    Zdroj atributů Objekt zabezpečení
    Atribut <attributeset>_Project
    Operátor StringEquals
    Možnost Atribut
    Zdroj atributů Resource
    Atribut Značky indexu objektů blob [Hodnoty v klíči]
    Key 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í.

    Screenshot of condition using principal attribute displayed in visual editor.

  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 podmínkou.

Krok 5: Přiřazení role Čtenář

  • Opakováním předchozích kroků přiřaďte roli Čtenář pro skupinu zabezpečení v oboru 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íč.

    Screenshot of storage container with test files.

  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 neúspěšné autorizaci.

  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řidat podmínku

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

    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
    

Otestování podmínky

  1. V novém okně PowerShellu se pomocí příkazu Připojení-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

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řidat podmínku

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

    az login
    
  2. Pomocí příkazu az role assignment list získejte 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"
    

Otestování podmínky

  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
    

    Objekt blob byste neměli číst 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