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:
- Administracja istrator definicji atrybutów i Administracja istrator przypisań atrybutów
- Administracja istrator kontroli dostępu opartej na rolach
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.
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
.
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ń
Zaloguj się w witrynie Azure Portal.
Kliknij pozycję Microsoft Entra ID>Niestandardowe atrybuty zabezpieczeń.
Dodaj atrybut o nazwie z
Project
wartościamiBaker
iCascade
. 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.
Krok 2. Przypisywanie niestandardowego atrybutu zabezpieczeń do użytkownika
W usłudze Microsoft Entra ID utwórz grupę zabezpieczeń.
Dodaj użytkownika jako członka grupy.
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.Pamiętaj, aby kliknąć przycisk Zapisz , aby zapisać przypisanie.
Krok 3. Konfigurowanie tagów magazynu i indeksu obiektów blob
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.
Utwórz nowy kontener na koncie magazynu i ustaw poziom dostępu publicznego na Prywatny (bez dostępu anonimowego).
Ustaw typ uwierzytelniania na konto użytkownika usługi Azure AD.
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
Otwórz nową kartę i zaloguj się w witrynie Azure Portal.
Otwórz grupę zasobów z kontem magazynu.
Kliknij pozycję Kontrola dostępu (IAM).
Kliknij kartę Przypisania ról, aby wyświetlić przypisania ról w tym zakresie.
Kliknij pozycję Dodaj>przypisanie roli.
Na karcie Rola wybierz rolę Czytelnik danych obiektu blob usługi Storage.
Na karcie Członkowie wybierz utworzoną wcześniej grupę zabezpieczeń.
(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.
Na karcie Warunki (opcjonalnie) kliknij pozycję Dodaj warunek.
Zostanie wyświetlona strona Dodawanie warunku przypisania roli.
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.
Kliknij pozycję Odczytaj obiekt blob , a następnie kliknij pozycję Wybierz.
W sekcji Wyrażenie kompilacji kliknij pozycję Dodaj.
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ń.
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$>] ) )
Kliknij przycisk Zapisz , aby zapisać warunek.
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
W nowym oknie otwórz witrynę Azure Portal.
Zaloguj się jako użytkownik utworzony za pomocą niestandardowego atrybutu
Project=Cascade
zabezpieczeń.Otwórz utworzone konto magazynu i kontener.
Upewnij się, że metoda uwierzytelniania jest ustawiona na konto użytkownika usługi Azure AD, a nie na klucz dostępu.
Kliknij plik tekstowy Baker.
Nie powinno być możliwe wyświetlenie lub pobranie obiektu blob, a powinien zostać wyświetlony komunikat o niepodaniu autoryzacji.
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
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
Użyj polecenia Get-AzRoleAssignment , aby uzyskać przypisanie roli przypisane do grupy zabezpieczeń.
$groupRoleAssignment = Get-AzRoleAssignment -ObjectId <groupObjectId> -Scope <scope>
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`$>]))"
ConditionVersion
Ustaw właściwość obiektu przypisania roli.$groupRoleAssignment.ConditionVersion = "2.0"
Użyj polecenia Set-AzRoleAssignment , aby zaktualizować przypisanie roli.
Set-AzRoleAssignment -InputObject $groupRoleAssignment
Testowanie warunku
W nowym oknie programu PowerShell użyj polecenia Połączenie-AzAccount, aby zalogować się jako członek grupy zabezpieczeń.
Connect-AzAccount
Użyj polecenia New-AzStorageContext , aby ustawić kontekst konta magazynu.
$bearerCtx = New-AzStorageContext -StorageAccountName <accountName>
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. ...
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
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
Użyj polecenia az role assignment list , aby uzyskać przypisanie roli przypisane do grupy zabezpieczeń.
az role assignment list --assignee <groupObjectId> --scope <scope>
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" }
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$>]))",
conditionVersion
Zaktualizuj właściwość ."conditionVersion": "2.0",
Użyj polecenia az role assignment update , aby dodać warunek do przypisania roli.
az role assignment update --role-assignment "./path/roleassignment.json"
Testowanie warunku
W nowym oknie polecenia użyj polecenia az login , aby zalogować się jako członek grupy zabezpieczeń.
az login
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. ...
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, ... }