Zezwalaj na dostęp do odczytu do obiektów blob na podstawie tagów i niestandardowych atrybutów zabezpieczeń

W tym artykule dowiesz się, jak zezwolić na dostęp do odczytu do obiektów blob na podstawie tagów indeksu obiektów blob i niestandardowych atrybutów zabezpieczeń przy użyciu warunków kontroli dostępu opartej na atrybutach (ABAC). Ułatwia to zarządzanie dostępem do obiektów blob.

Wymagania wstępne

Aby przypisać niestandardowe atrybuty zabezpieczeń i dodać warunki przypisań ról w dzierżawie firmy Microsoft Entra, potrzebne są następujące elementy:

Ważne

Domyślnie globalny Administracja istrator i inne role administratora nie mają uprawnień do odczytywania, definiowania ani przypisywania niestandardowych atrybutów zabezpieczeń. Jeśli nie spełniasz tych wymagań wstępnych, nie zobaczysz atrybutów podmiotu zabezpieczeń/użytkownika w edytorze warunków.

Stan

W tym artykule zezwolisz na dostęp do odczytu do obiektów blob, jeśli użytkownik ma niestandardowy atrybut zabezpieczeń zgodny z tagiem indeksu obiektów blob. Jest to realizowane przez dodanie warunku do przypisania roli.

Diagram of role assignment with a condition.

Jeśli na przykład Brenda ma atrybut Project=Baker, może odczytywać tylko obiekty blob z tagiem indeksu Project=Baker obiektów blob. Podobnie usługa Chandra może odczytywać tylko obiekty blob za pomocą polecenia Project=Cascade.

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

Oto jak wygląda warunek w kodzie:

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

Aby uzyskać więcej informacji na temat warunków, zobacz Co to jest kontrola dostępu oparta na atrybutach platformy Azure (Azure ABAC)?.

Krok 1. Dodawanie nowego niestandardowego atrybutu zabezpieczeń

  1. Zaloguj się w witrynie Azure Portal.

  2. Kliknij pozycję Microsoft Entra ID>Niestandardowe atrybuty zabezpieczeń.

  3. Dodaj atrybut o nazwie z Project wartościami Baker i Cascade. Możesz też użyć istniejącego atrybutu. Aby uzyskać więcej informacji, zobacz Dodawanie lub dezaktywowanie niestandardowych atrybutów zabezpieczeń w identyfikatorze Entra firmy Microsoft.

    Screenshot of adding a custom security attribute.

Krok 2. Przypisywanie niestandardowego atrybutu zabezpieczeń do użytkownika

  1. W usłudze Microsoft Entra ID utwórz grupę zabezpieczeń.

  2. Dodaj użytkownika jako członka grupy.

  3. Project Przypisz atrybut z wartością Cascade do użytkownika. Aby uzyskać więcej informacji, zobacz Przypisywanie, aktualizowanie, wyświetlanie listy lub usuwanie niestandardowych atrybutów zabezpieczeń dla użytkownika.

    Screenshot of assigning a custom security attribute.

  4. Pamiętaj, aby kliknąć przycisk Zapisz , aby zapisać przypisanie.

Krok 3. Konfigurowanie tagów magazynu i indeksu obiektów blob

  1. Utwórz konto magazynu zgodne z funkcją tagów indeksu obiektów blob. Aby uzyskać więcej informacji, zobacz Zarządzanie danymi obiektów blob platformy Azure i znajdowanie ich za pomocą tagów indeksu obiektów blob.

  2. Utwórz nowy kontener na koncie magazynu i ustaw poziom dostępu publicznego na Prywatny (bez dostępu anonimowego).

  3. Ustaw typ uwierzytelniania na konto użytkownika usługi Azure AD.

  4. Przekaż pliki tekstowe do kontenera i ustaw następujące tagi indeksu obiektów blob.

    Plik Key Wartość
    Plik tekstowy bakera Projekt Baker
    Plik tekstowy kaskadowy Projekt Cascade

    Napiwek

    Aby uzyskać informacje o znakach dozwolonych dla tagów indeksu obiektów blob, zobacz Ustawianie tagów indeksu obiektów blob.

Krok 4. Przypisywanie roli Czytelnik danych obiektu blob usługi Storage z warunkiem

  1. Otwórz nową kartę i zaloguj się w witrynie Azure Portal.

  2. Otwórz grupę zasobów z kontem magazynu.

  3. Kliknij pozycję Kontrola dostępu (IAM).

  4. Kliknij kartę Przypisania ról, aby wyświetlić przypisania ról w tym zakresie.

  5. Kliknij pozycję Dodaj>przypisanie roli.

  6. Na karcie Rola wybierz rolę Czytelnik danych obiektu blob usługi Storage.

  7. Na karcie Członkowie wybierz utworzoną wcześniej grupę zabezpieczeń.

  8. (Opcjonalnie) W polu Opis wprowadź odczyt dostępu do obiektów blob, jeśli użytkownik ma niestandardowy atrybut zabezpieczeń zgodny z tagiem indeksu obiektów blob.

  9. Na karcie Warunki (opcjonalnie) kliknij pozycję Dodaj warunek.

    Zostanie wyświetlona strona Dodawanie warunku przypisania roli.

  10. W sekcji Dodawanie akcji kliknij pozycję Dodaj akcję.

    Zostanie wyświetlone okienko Wybierz akcję. To okienko jest filtrowaną listą akcji danych na podstawie przypisania roli, które będą elementem docelowym warunku.

  11. Kliknij pozycję Odczytaj obiekt blob , a następnie kliknij pozycję Wybierz.

  12. W sekcji Wyrażenie kompilacji kliknij pozycję Dodaj.

  13. Wprowadź następujące ustawienia:

    Ustawienie Wartość
    Źródło atrybutu Główne
    Atrybut <zestaw> atrybutów_Project
    Operator StringEquals
    Opcja Atrybut
    Źródło atrybutu Zasób
    Atrybut Tagi indeksu obiektów blob [wartości w kluczu]
    Key Projekt

    Uwaga

    Jeśli podmiot zabezpieczeń nie jest wymieniony jako opcja w źródle atrybutu, upewnij się, że atrybut zabezpieczeń niestandardowy został zdefiniowany zgodnie z opisem we wcześniejszej sekcji Krok 1: Dodawanie nowego niestandardowego atrybutu zabezpieczeń.

    Screenshot of condition using principal attribute displayed in visual editor.

  14. Przewiń w górę do pozycji Typ edytora i kliknij pozycję Kod.

    Warunek powinien wyglądać podobnie do następującego:

    (
     (
      !(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. Kliknij przycisk Zapisz , aby zapisać warunek.

  16. Na karcie Przeglądanie i przypisywanie kliknij pozycję Przejrzyj i przypisz , aby przypisać rolę Czytelnik danych obiektu blob usługi Storage z warunkiem.

Krok 5. Przypisywanie roli czytelnika

  • Powtórz poprzednie kroki, aby przypisać rolę Czytelnik dla grupy zabezpieczeń w zakresie grupy zasobów.

    Uwaga

    Zazwyczaj nie trzeba przypisywać roli Czytelnik. Jednak można to zrobić, aby można było przetestować warunek przy użyciu witryny Azure Portal.

Krok 6. Testowanie warunku

  1. W nowym oknie otwórz witrynę Azure Portal.

  2. Zaloguj się jako użytkownik utworzony za pomocą niestandardowego atrybutu Project=Cascade zabezpieczeń.

  3. Otwórz utworzone konto magazynu i kontener.

  4. Upewnij się, że metoda uwierzytelniania jest ustawiona na konto użytkownika usługi Azure AD, a nie na klucz dostępu.

    Screenshot of storage container with test files.

  5. Kliknij plik tekstowy Baker.

    Nie powinno być możliwe wyświetlenie lub pobranie obiektu blob, a powinien zostać wyświetlony komunikat o niepodaniu autoryzacji.

  6. Kliknij pozycję Plik tekstowy kaskadowy.

    Powinno być możliwe wyświetlanie i pobieranie obiektu blob.

Azure PowerShell

Możesz również użyć programu Azure PowerShell, aby dodać warunki przypisania roli. Następujące polecenia pokazują, jak dodać warunki. Aby uzyskać informacje, zobacz Samouczek: Dodawanie warunku przypisania roli w celu ograniczenia dostępu do obiektów blob przy użyciu programu Azure PowerShell.

Dodaj warunek

  1. Użyj polecenia Połączenie-AzAccount i postępuj zgodnie z instrukcjami, które wydają się logować się do katalogu jako Administracja istrator kontroli dostępu opartej na rolach.

    Connect-AzAccount
    
  2. Użyj polecenia Get-AzRoleAssignment , aby uzyskać przypisanie roli przypisane do grupy zabezpieczeń.

    $groupRoleAssignment = Get-AzRoleAssignment -ObjectId <groupObjectId> -Scope <scope>
    
  3. Condition Ustaw właściwość obiektu przypisania roli. Pamiętaj, aby użyć nazwy zestawu atrybutów.

    $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 Ustaw właściwość obiektu przypisania roli.

    $groupRoleAssignment.ConditionVersion = "2.0"
    
  5. Użyj polecenia Set-AzRoleAssignment , aby zaktualizować przypisanie roli.

    Set-AzRoleAssignment -InputObject $groupRoleAssignment
    

Testowanie warunku

  1. W nowym oknie programu PowerShell użyj polecenia Połączenie-AzAccount, aby zalogować się jako członek grupy zabezpieczeń.

    Connect-AzAccount
    
  2. Użyj polecenia New-AzStorageContext , aby ustawić kontekst konta magazynu.

    $bearerCtx = New-AzStorageContext -StorageAccountName <accountName>
    
  3. Użyj polecenia Get-AzStorageBlob , aby spróbować odczytać plik Baker.

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

    Nie powinno być możliwe odczytanie obiektu blob i powinien zostać wyświetlony komunikat o niepodaniu autoryzacji.

    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. Użyj polecenia Get-AzStorageBlob , aby spróbować odczytać plik Kaskadowy.

    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
    

Interfejs wiersza polecenia platformy Azure

Możesz również użyć interfejsu wiersza polecenia platformy Azure, aby dodać warunki przypisań ról. Następujące polecenia pokazują, jak dodać warunki. Aby uzyskać informacje, zobacz Samouczek: dodawanie warunku przypisania roli w celu ograniczenia dostępu do obiektów blob przy użyciu interfejsu wiersza polecenia platformy Azure.

Dodaj warunek

  1. Użyj polecenia az login i postępuj zgodnie z instrukcjami, które wydają się logować się do katalogu jako kontrola dostępu oparta na rolach Administracja istrator.

    az login
    
  2. Użyj polecenia az role assignment list , aby uzyskać przypisanie roli przypisane do grupy zabezpieczeń.

    az role assignment list --assignee <groupObjectId> --scope <scope>
    
  3. Utwórz plik JSON w następującym formacie.

    {
        "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. condition Zaktualizuj właściwość . Pamiętaj, aby użyć nazwy zestawu atrybutów.

    "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. conditionVersion Zaktualizuj właściwość .

    "conditionVersion": "2.0",
    
  6. Użyj polecenia az role assignment update , aby dodać warunek do przypisania roli.

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

Testowanie warunku

  1. W nowym oknie polecenia użyj polecenia az login , aby zalogować się jako członek grupy zabezpieczeń.

    az login
    
  2. Użyj polecenia az storage blob show , aby spróbować odczytać właściwości pliku Baker.

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

    Nie powinno być możliwe odczytanie obiektu blob i powinien zostać wyświetlony komunikat o niepodaniu autoryzacji.

    You do not have the required permissions needed to perform this operation.
    ...
    
  3. Użyj polecenia az storage blob show , aby spróbować odczytać właściwości pliku Kaskadowego.

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

Następne kroki