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:

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.

Diagram of role assignment with a condition.

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.

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

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

  1. Melden Sie sich beim Azure-Portal an.

  2. Klicken Sie auf die benutzerdefinierten Sicherheitsattribute von Microsoft Entra ID>.

  3. Fügen Sie ein Attribut mit der Bezeichnung Project und den Werten Baker und Cascade 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.

    Screenshot of adding a custom security attribute.

Schritt 2: Zuweisen des benutzerdefinierten Sicherheitsattributs zu Benutzer*innen

  1. Erstellen Sie in der Microsoft Entra-ID eine Sicherheitsgruppe.

  2. Fügen Sie der Gruppe einen Benutzer als Mitglied hinzu.

  3. Weisen Sie dem Benutzer das Attribut Project mit dem Wert Cascade zu. Weitere Informationen finden Sie unter Zuweisen, Aktualisieren, Auflisten oder Entfernen von benutzerdefinierten Sicherheitsattributen für einen Benutzer.

    Screenshot of assigning a custom security attribute.

  4. Klicken Sie unbedingt auf Speichern, um Ihre Zuweisung zu speichern.

Schritt 3: Einrichten von Speicher- und Blobindextags

  1. Erstellen Sie ein Speicherkonto, das mit dem Blobindextag-Feature kompatibel ist. Weitere Informationen finden Sie unter Verwalten und Finden von Azure-Blobdaten mit Blobindextags.

  2. Erstellen Sie innerhalb des Speicherkontos einen neuen Container, und legen Sie die öffentliche Zugriffsebene auf Privat (kein anonymer Zugriff) fest.

  3. Legen Sie den Authentifizierungstyp auf Azure AD-Benutzerkonto fest.

  4. 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

  1. Öffnen Sie eine neue Registerkarte, und melden Sie sich beim Azure-Portal an.

  2. Öffnen Sie die Ressourcengruppe mit dem Speicherkonto.

  3. Klicken Sie auf Zugriffssteuerung (IAM) .

  4. Klicken Sie auf die Registerkarte Rollenzuweisungen, um die Rollenzuweisungen für diesen Bereich anzuzeigen.

  5. Klicken Sie auf Hinzufügen>Rollenzuweisung hinzufügen.

  6. Wählen Sie auf der Registerkarte Rolle die Rolle Storage-Blobdatenleser aus.

  7. Wählen Sie auf der Registerkarte Mitglieder die zuvor erstellte Sicherheitsgruppe aus.

  8. (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.

  9. Klicken Sie auf der Registerkarte Bedingungen (optional) auf Bedingung hinzufügen.

    Die Seite „Bedingung für Rollenzuweisung hinzufügen“ wird angezeigt.

  10. 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.

  11. Klicken Sie auf Blob lesen und dann auf Auswählen.

  12. Klicken Sie im Abschnitt Ausdruck erstellen auf Hinzufügen.

  13. 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.

    Screenshot of condition using principal attribute displayed in visual editor.

  14. 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$>]
     )
    )
    
  15. Klicken Sie auf Speichern, um die Bedingung zu speichern.

  16. 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

  1. Öffnen Sie das Azure-Portal in einem neuen Fenster.

  2. Melden Sie sich als der Benutzer an, den Sie mit dem benutzerdefinierten Sicherheitsattribut Project=Cascade erstellt haben.

  3. Öffnen Sie das Speicherkonto und den Container, die Sie erstellt haben.

  4. Achten Sie darauf, dass die Authentifizierungsmethode auf Azure AD-Benutzerkonto und nicht auf Zugriffsschlüssel festgelegt ist.

    Screenshot of storage container with test files.

  5. 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.

  6. 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

  1. 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
    
  2. Verwenden Sie Get-AzRoleAssignment, um die Rollenzuweisung abzurufen, die Sie der Sicherheitsgruppe zugewiesen haben.

    $groupRoleAssignment = Get-AzRoleAssignment -ObjectId <groupObjectId> -Scope <scope>
    
  3. 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`$>]))"
    
  4. Legen Sie die ConditionVersion-Eigenschaft des Rollenzuweisungsobjekts fest.

    $groupRoleAssignment.ConditionVersion = "2.0"
    
  5. Aktualisieren Sie Rollenzuweisung mithilfe von Set-AzRoleAssignment.

    Set-AzRoleAssignment -InputObject $groupRoleAssignment
    

Testen der Bedingung

  1. Verwenden Sie in einem neuen PowerShell-Fenster den Befehl Connect-AzAccount, um sich als Mitglied der Sicherheitsgruppe anzumelden.

    Connect-AzAccount
    
  2. Verwenden Sie New-AzStorageContext, um den Kontext für das Speicherkonto festzulegen.

    $bearerCtx = New-AzStorageContext -StorageAccountName <accountName>
    
  3. 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.
    ...
    
  4. 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

  1. 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
    
  2. Verwenden Sie az role assignment list, um die Rollenzuweisung abzurufen, die Sie der Sicherheitsgruppe zugewiesen haben.

    az role assignment list --assignee <groupObjectId> --scope <scope>
    
  3. 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"
    }
    
  4. 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$>]))",
    
  5. Aktualisieren Sie die conditionVersion-Eigenschaft.

    "conditionVersion": "2.0",
    
  6. 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

  1. Verwenden Sie in einem neuen Befehlsfenster den Befehl az login, um sich als Mitglied der Sicherheitsgruppe anzumelden.

    az login
    
  2. 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.
    ...
    
  3. 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,
    ...
    }
    

Nächste Schritte