Zulassen des Lesezugriffs auf Blobs basierend auf Tags und benutzerdefinierten Sicherheitsattributen
In diesem Artikel erfahren Sie, wie Sie den Lesezugriff auf Blobs basierend auf Blobindextags und benutzerdefinierten Sicherheitsattributen mithilfe der attributbasierten Zugriffssteuerungsbedingungen (ABAC) zulassen. Dies kann die Verwaltung des Zugriffs auf Blobs vereinfachen.
Voraussetzungen
Um benutzerdefinierte Sicherheitsattribute zuzuweisen und Rollenzuweisungsbedingungen in Ihrem Microsoft Entra-Mandanten hinzuzufügen, benötigen Sie Folgendes:
- Administrator für Attributdefinitionen und Administrator für Attributzuweisungen
- Rollenbasierter Zugriffssteuerungsadministrator
Wichtig
Standardmäßig verfügen globale Administratoren und andere Administratorrollen nicht über Berechtigungen zum Lesen, Definieren oder Zuweisen von benutzerdefinierten Sicherheitsattributen. Wenn Sie diese Voraussetzungen nicht erfüllen, werden die Prinzipal-/Benutzerattribute nicht im Bedingungs-Editor angezeigt.
Bedingung
In diesem Artikel gewähren Sie Lesezugriff auf Blobs, wenn die Benutzer*innen über ein benutzerdefiniertes Sicherheitsattribut verfügen, das dem Blobindextag entspricht. Dies wird dadurch erreicht, dass der Rollenzuweisung eine Bedingung hinzugefügt wird.
Wenn Brenda beispielsweise über das Attribut Project=Baker
verfügt, kann sie nur Blobs mit dem Blobindextag Project=Baker
lesen. Entsprechend kann Chandra nur Blobs mit Project=Cascade
lesen.
Im Code sieht die Bedingung wie folgt aus:
(
(
!(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$>]
)
)
Weitere Informationen zu Bedingungen finden Sie unter Was ist die attributbasierte Azure-Zugriffssteuerung (Azure ABAC)?.
Schritt 1: Hinzufügen eines neuen benutzerdefinierten Sicherheitsattributs
Melden Sie sich beim Azure-Portal an.
Klicken Sie auf die benutzerdefinierten Sicherheitsattribute von Microsoft Entra ID>.
Fügen Sie ein Attribut mit der Bezeichnung
Project
und den WertenBaker
undCascade
hinzu. Sie können auch ein vorhandenes Attribut verwenden. Weitere Informationen finden Sie unter Hinzufügen oder Deaktivieren von benutzerdefinierten Sicherheitsattributen in der Microsoft Entra-ID.
Schritt 2: Zuweisen des benutzerdefinierten Sicherheitsattributs zu Benutzer*innen
Erstellen Sie in der Microsoft Entra-ID eine Sicherheitsgruppe.
Fügen Sie der Gruppe einen Benutzer als Mitglied hinzu.
Weisen Sie dem Benutzer das Attribut
Project
mit dem WertCascade
zu. Weitere Informationen finden Sie unter Zuweisen, Aktualisieren, Auflisten oder Entfernen von benutzerdefinierten Sicherheitsattributen für einen Benutzer.Klicken Sie unbedingt auf Speichern, um Ihre Zuweisung zu speichern.
Schritt 3: Einrichten von Speicher- und Blobindextags
Erstellen Sie ein Speicherkonto, das mit dem Blobindextag-Feature kompatibel ist. Weitere Informationen finden Sie unter Verwalten und Finden von Azure-Blobdaten mit Blobindextags.
Erstellen Sie innerhalb des Speicherkontos einen neuen Container, und legen Sie die öffentliche Zugriffsebene auf Privat (kein anonymer Zugriff) fest.
Legen Sie den Authentifizierungstyp auf Azure AD-Benutzerkonto fest.
Laden Sie Textdateien in den Container hoch, und legen Sie die folgenden Blobindextags fest.
Datei Key Wert Baker-Textdatei Projekt Baker Cascade-Textdatei Projekt Cascade Tipp
Informationen zu den Zeichen, die für Blobindextags zulässig sind, finden Sie unter Festlegen von Blobindextags.
Schritt 4: Zuweisen der Rolle „Storage-Blobdatenleser“ mit einer Bedingung
Öffnen Sie eine neue Registerkarte, und melden Sie sich beim Azure-Portal an.
Öffnen Sie die Ressourcengruppe mit dem Speicherkonto.
Klicken Sie auf Zugriffssteuerung (IAM) .
Klicken Sie auf die Registerkarte Rollenzuweisungen, um die Rollenzuweisungen für diesen Bereich anzuzeigen.
Klicken Sie auf Hinzufügen>Rollenzuweisung hinzufügen.
Wählen Sie auf der Registerkarte Rolle die Rolle Storage-Blobdatenleser aus.
Wählen Sie auf der Registerkarte Mitglieder die zuvor erstellte Sicherheitsgruppe aus.
(Optional:) Geben Sie im Feld Beschreibung Folgendes ein: Lesezugriff auf Blobs für Benutzer*innen, die über ein benutzerdefiniertes Sicherheitsattribut verfügen, das dem Blobindextag entspricht.
Klicken Sie auf der Registerkarte Bedingungen (optional) auf Bedingung hinzufügen.
Die Seite „Bedingung für Rollenzuweisung hinzufügen“ wird angezeigt.
Klicken Sie im Abschnitt Aktion hinzufügen auf Aktion hinzufügen.
Die Seite „Aktion auswählen“ wird angezeigt. In diesem Bereich wird eine gefilterte Liste mit Datenaktionen angezeigt, die auf der Rollenzuweisung basiert, die als Ziel Ihrer Bedingung verwendet wird.
Klicken Sie auf Blob lesen und dann auf Auswählen.
Klicken Sie im Abschnitt Ausdruck erstellen auf Hinzufügen.
Geben Sie folgende Einstellungen ein:
Einstellung Wert Attributquelle Prinzipal attribute <attributeset>_Project Operator StringEquals Option attribute Attributquelle Resource attribute Blobindextags [Werte in Schlüssel] Key Projekt Hinweis
Wenn der Prinzipal nicht als Option in „Attributquelle“ aufgeführt wird, vergewissern Sie sich, dass Sie ein benutzerdefiniertes Sicherheitsattribut definiert haben, wie weiter oben in Schritt 1: Hinzufügen eines neuen benutzerdefinierten Sicherheitsattributs beschrieben.
Scrollen Sie nach oben zu Editor-Typ, und klicken Sie auf Code.
Ihre Bedingung sollte in etwa wie folgt aussehen:
( ( !(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$>] ) )
Klicken Sie auf Speichern, um die Bedingung zu speichern.
Klicken Sie auf der Registerkarte „Überprüfen und zuweisen“ auf Überprüfen und zuweisen, um die Rolle „Storage-Blobdatenleser“mit einer Bedingung zuzuweisen.
Schritt 5: Zuweisen der Rolle „Leser“
Wiederholen Sie die obigen Schritte, um der Sicherheitsgruppe, die Sie zuvor im Bereich der Ressourcengruppe erstellt haben, die Rolle Leser zuzuweisen.
Hinweis
In der Regel müssen Sie die Rolle „Leser“ nicht zuweisen. Dies erfolgt jedoch, damit Sie die Bedingung über das Azure-Portal testen können.
Schritt 6: Testen der Bedingung
Öffnen Sie das Azure-Portal in einem neuen Fenster.
Melden Sie sich als der Benutzer an, den Sie mit dem benutzerdefinierten Sicherheitsattribut
Project=Cascade
erstellt haben.Öffnen Sie das Speicherkonto und den Container, die Sie erstellt haben.
Achten Sie darauf, dass die Authentifizierungsmethode auf Azure AD-Benutzerkonto und nicht auf Zugriffsschlüssel festgelegt ist.
Klicken Sie auf die Baker-Textdatei.
Sie sollten NICHT in der Lage sein, das Blob anzuzeigen oder herunterzuladen. Außerdem sollte eine Meldung angezeigt werden, dass die Autorisierung fehlgeschlagen ist.
Klicken Sie auf die Cascade-Textdatei.
Sie sollten das Blob anzeigen und herunterladen können.
Azure PowerShell
Sie können auch Azure PowerShell verwenden, um Rollenzuweisungsbedingungen hinzuzufügen. Die folgenden Befehle zeigen, wie Sie Bedingungen hinzufügen. Weitere Informationen finden Sie im Lernprogramm: Hinzufügen einer Rollenzuweisungsbedingung, um den Zugriff auf Blobs mithilfe von Azure PowerShell einzuschränken.
Eine Bedingung hinzufügen
Verwenden Sie den Befehl Verbinden-AzAccount, und folgen Sie den Anweisungen, die angezeigt werden, um sich bei Ihrem Verzeichnis als Rollenbasierter Zugriffssteuerungsadministrator anzumelden.
Connect-AzAccount
Verwenden Sie Get-AzRoleAssignment, um die Rollenzuweisung abzurufen, die Sie der Sicherheitsgruppe zugewiesen haben.
$groupRoleAssignment = Get-AzRoleAssignment -ObjectId <groupObjectId> -Scope <scope>
Legen Sie die
Condition
-Eigenschaft des Rollenzuweisungsobjekts fest. Achten Sie darauf, den Namen Ihres Attributsatzes zu verwenden.$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`$>]))"
Legen Sie die
ConditionVersion
-Eigenschaft des Rollenzuweisungsobjekts fest.$groupRoleAssignment.ConditionVersion = "2.0"
Aktualisieren Sie Rollenzuweisung mithilfe von Set-AzRoleAssignment.
Set-AzRoleAssignment -InputObject $groupRoleAssignment
Testen der Bedingung
Verwenden Sie in einem neuen PowerShell-Fenster den Befehl Connect-AzAccount, um sich als Mitglied der Sicherheitsgruppe anzumelden.
Connect-AzAccount
Verwenden Sie New-AzStorageContext, um den Kontext für das Speicherkonto festzulegen.
$bearerCtx = New-AzStorageContext -StorageAccountName <accountName>
Versuchen Sie, mithilfe von Get-AzStorageBlob die Baker-Datei zu lesen.
Get-AzStorageBlob -Container <containerName> -Blob <blobNameBaker> -Context $bearerCtx
Sie sollten NICHT in der Lage sein, das Blob zu lesen. Außerdem sollte eine Meldung angezeigt werden, dass die Autorisierung einen Fehler verursacht hat.
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. ...
Versuchen Sie, mithilfe von Get-AzStorageBlob die Cascade-Datei zu lesen.
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
Sie können auch die Azure-Befehlszeilenschnittstelle verwenden, um Bedingungen für Rollenzuweisungen hinzuzufügen. Die folgenden Befehle zeigen, wie Sie Bedingungen hinzufügen. Weitere Informationen finden Sie im Lernprogramm: Hinzufügen einer Rollenzuweisungsbedingung, um den Zugriff auf Blobs mit Azure CLI einzuschränken.
Eine Bedingung hinzufügen
Verwenden Sie den Befehl az login , und folgen Sie den Anweisungen, die angezeigt werden, um sich als Rollenbasierter Zugriffssteuerungsadministrator bei Ihrem Verzeichnis anzumelden.
az login
Verwenden Sie az role assignment list, um die Rollenzuweisung abzurufen, die Sie der Sicherheitsgruppe zugewiesen haben.
az role assignment list --assignee <groupObjectId> --scope <scope>
Erstellen Sie eine JSON-Datei mit dem folgenden Format.
{ "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" }
Aktualisieren Sie die
condition
-Eigenschaft. Achten Sie darauf, den Namen Ihres Attributsatzes zu verwenden."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$>]))",
Aktualisieren Sie die
conditionVersion
-Eigenschaft."conditionVersion": "2.0",
Fügen Sie mithilfe von az role assignment update die Bedingung der Rollenzuweisung hinzu.
az role assignment update --role-assignment "./path/roleassignment.json"
Testen der Bedingung
Verwenden Sie in einem neuen Befehlsfenster den Befehl az login, um sich als Mitglied der Sicherheitsgruppe anzumelden.
az login
Versuchen Sie, mithilfe von az storage blob show die Eigenschaften der Baker-Datei zu lesen.
az storage blob show --account-name <storageAccountName> --container-name <containerName> --name <blobNameBaker> --auth-mode login
Sie sollten NICHT in der Lage sein, das Blob zu lesen. Außerdem sollte eine Meldung angezeigt werden, dass die Autorisierung einen Fehler verursacht hat.
You do not have the required permissions needed to perform this operation. ...
Versuchen Sie, mithilfe von az storage blob show die Eigenschaften der Cascade-Datei zu lesen.
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, ... }