Event Grid – Sicherheit und AuthentifizierungEvent Grid security and authentication

Azure Event Grid verfügt über drei Authentifizierungsarten:Azure Event Grid has three types of authentication:

  • Webhook-EreignisbereitstellungWebHook event delivery
  • EreignisabonnementsEvent subscriptions
  • Veröffentlichung benutzerdefinierter ThemenCustom topic publishing

Webhook-EreignisbereitstellungWebHook Event delivery

Ein Webhook ist eine der vielen Möglichkeiten, um Ereignisse aus Azure Event Grid zu empfangen.Webhooks are one of the many ways to receive events from Azure Event Grid. Wenn ein neues Ereignis bereit ist, sendet der Event Grid-Dienst per POST-Vorgang eine HTTP-Anforderung an den konfigurierten Endpunkt, wobei das Ereignis im Anforderungstext enthalten ist.When a new event is ready, Event Grid service POSTs an HTTP request to the configured endpoint with the event in the request body.

Wie viele andere Dienste, die Webhooks unterstützen, müssen Sie bei Event Grid nachweisen, das Sie im Besitz Ihres Webhookendpunkts sind. Vorher wird mit dem Bereitstellen von Ereignissen für diesen Endpunkt nicht begonnen.Like many other services that support webhooks, Event Grid requires you to prove ownership of your Webhook endpoint before it starts delivering events to that endpoint. Diese Anforderung verhindert, dass ein böswilliger Benutzer Ihren Endpunkt mit Ereignissen überschwemmt.This requirement prevents a malicious user from flooding your endpoint with events. Wenn Sie einen der drei unten angegebenen Azure-Dienste verwenden, wird diese Überprüfung automatisch von der Azure-Infrastruktur durchgeführt:When you use any of the three Azure services listed below, the Azure infrastructure automatically handles this validation:

Falls Sie einen anderen Typ von Endpunkt nutzen, z. B. eine auf einem HTTP-Trigger basierende Azure-Funktion, muss Ihr Endpunktcode an einem Überprüfungshandshake mit Event Grid beteiligt sein.If you're using any other type of endpoint, such as an HTTP trigger based Azure function, your endpoint code needs to participate in a validation handshake with Event Grid. Event Grid unterstützt zwei Methoden zur Überprüfung des Abonnements.Event Grid supports two ways of validating the subscription.

  1. ValidationCode-Handshake (programmgesteuert) : Wenn Sie den Quellcode für Ihren Endpunkt kontrollieren, wird diese Methode empfohlen.ValidationCode handshake (programmatic): If you control the source code for your endpoint, this method is recommended. Zum Zeitpunkt der Erstellung des Ereignisabonnements sendet Event Grid ein Ereignis zur Überprüfung des Abonnements an Ihren Endpunkt.At the time of event subscription creation, Event Grid sends a subscription validation event to your endpoint. Das Schema dieses Ereignisses ähnelt dem aller anderen Event Grid-Ereignisse.The schema of this event is similar to any other Event Grid event. Der Datenteil dieses Ereignisses umfasst eine validationCode-Eigenschaft.The data portion of this event includes a validationCode property. Ihre Anwendung überprüft, ob es sich bei der Überprüfungsanforderung um ein erwartetes Ereignisabonnement handelt, und gibt den Überprüfungscode an Event Grid zurück.Your application verifies that the validation request is for an expected event subscription, and echoes the validation code to Event Grid. Dieser Handshakemechanismus wird in allen Event Grid-Versionen unterstützt.This handshake mechanism is supported in all Event Grid versions.

  2. ValidationURL-Handshake (manuell) : In bestimmten Fällen können Sie nicht auf den Quellcode des Endpunkts zugreifen, um den ValidationCode-Handshake zu implementieren.ValidationURL handshake (manual): In certain cases, you can't access the source code of the endpoint to implement the ValidationCode handshake. Wenn Sie beispielsweise einen Drittanbieterdienst nutzen (z. B. Zapier oder IFTTT), können Sie unter Umständen nicht programmgesteuert mit dem Überprüfungscode antworten.For example, if you use a third-party service (like Zapier or IFTTT), you can't programmatically respond with the validation code.

    Ab Version 2018-05-01-preview unterstützt Event Grid einen manuellen Überprüfungshandshake.Starting with version 2018-05-01-preview, Event Grid supports a manual validation handshake. Wenn Sie ein Ereignisabonnement mit einem SDK oder Tool erstellen, für die diese neue API-Version (2018-05-01-preview oder höher) verwendet wird, sendet Event Grid im Datenteil des Abonnementüberprüfungsereignisses eine validationUrl-Eigenschaft.If you're creating an event subscription with an SDK or tool that uses API version 2018-05-01-preview or later, Event Grid sends a validationUrl property in the data portion of the subscription validation event. Um den Handshake abzuschließen, suchen Sie diese URL in den Ereignisdaten und senden Sie ihr manuell eine GET-Anforderung.To complete the handshake, find that URL in the event data and manually send a GET request to it. Sie können entweder einen REST-Client oder Ihren Webbrowser verwenden.You can use either a REST client or your web browser.

    Die angegebene URL ist fünf Minuten lang gültig.The provided URL is valid for 5 minutes. Während dieser Zeit lautet der Bereitstellungsstatus des Ereignisabonnements AwaitingManualAction.During that time, the provisioning state of the event subscription is AwaitingManualAction. Wenn Sie die manuelle Überprüfung nicht innerhalb von 5 Minuten abschließen, wird der Bereitstellungsstatus auf Failed eingestellt.If you don't complete the manual validation within 5 minutes, the provisioning state is set to Failed. Sie müssen das Ereignisabonnement erneut erstellen, bevor Sie mit der manuellen Überprüfung beginnen.You'll have to create the event subscription again before starting the manual validation.

    Dieser Authentifizierungsmechanismus erfordert auch, dass der Webhookendpunkt einen HTTP-Statuscode von 200 zurückgibt, um sicherzustellen, dass das POST für das Überprüfungsereignis akzeptiert wurde, bevor er in den manuellen Überprüfungsmodus gewechselt wird.This authentication mechanism also requires the webhook endpoint to return an HTTP status code of 200 so that it knows that the POST for the validation event was accepted before it can be put in the manual validation mode. Mit anderen Worten: Wenn der Endpunkt 200 zurückgibt, aber programmgesteuert keine Überprüfungsantwort zurückgibt, wird der Modus in den manuellen Überprüfungsmodus überführt.In other words, if the endpoint returns 200 but doesn’t return back a validation response programmatically, the mode is transitioned to the manual validation mode. Wenn innerhalb von 5 Minuten ein GET auf die Überprüfungs-URL folgt, gilt der Überprüfungshandshake als erfolgreich.If there is a GET on the validation URL within 5 minutes, the validation handshake is considered to be successful.

Hinweis

Die Verwendung von selbstsignierten Zertifikaten wird nicht unterstützt.Using self-signed certificates for validation isn't supported. Verwenden Sie stattdessen ein Zertifikat von einer Zertifizierungsstelle.Use a signed certificate from a certificate authority (CA) instead.

ÜberprüfungsdetailsValidation details

  • Zum Zeitpunkt der Erstellung/Aktualisierung des Ereignisabonnements sendet Event Grid ein Abonnementüberprüfungsereignis an den Zielendpunkt.At the time of event subscription creation/update, Event Grid posts a subscription validation event to the target endpoint.
  • Das Ereignis enthält den Headerwert „aeg-event-type: SubscriptionValidation“.The event contains a header value "aeg-event-type: SubscriptionValidation".
  • Der Hauptteil des Ereignisses weist dasselbe Schema wie andere Event Grid-Ereignisse auf.The event body has the same schema as other Event Grid events.
  • Die eventType-Eigenschaft des Ereignisses lautet Microsoft.EventGrid.SubscriptionValidationEvent.The eventType property of the event is Microsoft.EventGrid.SubscriptionValidationEvent.
  • Die Dateneigenschaft des Ereignisses enthält eine validationCode-Eigenschaft mit einer zufällig generierten Zeichenfolge.The data property of the event includes a validationCode property with a randomly generated string. Beispiel: „validationCode: acb13…“.For example, "validationCode: acb13…".
  • Die Ereignisdaten enthalten auch die validationUrl-Eigenschaft mit einer URL für die manuelle Überprüfung des Abonnements.The event data also includes a validationUrl property with a URL for manually validating the subscription.
  • Das Array enthält ausschließlich das Validierungsereignis.The array contains only the validation event. Andere Ereignisse werden in einer separaten Anforderung gesendet, nachdem Sie den Validierungscode zurückgegeben haben.Other events are sent in a separate request after you echo back the validation code.
  • Die EventGrid-DataPlane-SDKs verfügen über Klassen, die den Daten des Abonnementüberprüfungsereignisses und der Abonnementüberprüfungsantwort entsprechen.The EventGrid DataPlane SDKs have classes corresponding to the subscription validation event data and subscription validation response.

Ein Beispiel für „SubscriptionValidationEvent“ finden Sie im folgenden Beispiel:An example SubscriptionValidationEvent is shown in the following example:

[{
  "id": "2d1781af-3a4c-4d7c-bd0c-e34b19da4e66",
  "topic": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "subject": "",
  "data": {
    "validationCode": "0000000000-0000-0000-0000-00000000000000",
    "validationUrl": "https://rp-eastus2.eventgrid.azure.net:553/eventsubscriptions/estest/validate?id=0000000000-0000-0000-0000-0000000000000&t=2018-04-26T20:30:54.4538837Z&apiVersion=2018-05-01-preview&token=1A1A1A1A"
  },
  "eventType": "Microsoft.EventGrid.SubscriptionValidationEvent",
  "eventTime": "2018-01-25T22:12:19.4556811Z",
  "metadataVersion": "1",
  "dataVersion": "1"
}]

Senden Sie wie im folgenden Beispiel gezeigt den Validierungscode zurück an die Eigenschaft „validationResponse“, um den Besitz des Endpunkts nachzuweisen:To prove endpoint ownership, echo back the validation code in the validationResponse property, as shown in the following example:

{
  "validationResponse": "512d38b6-c7b8-40c8-89fe-f46f9e9622b6"
}

Sie müssen den Antwortstatuscode „HTTP 200 OK“ zurückgeben.You must return an HTTP 200 OK response status code. „HTTP 202 Akzeptiert“ wird nicht als gültige Antwort zur Überprüfung des Event Grid-Abonnements erkannt.HTTP 202 Accepted is not recognized as a valid Event Grid subscription validation response.

Alternativ können Sie das Abonnement manuell überprüfen, indem Sie eine GET-Anforderung an die Überprüfungs-URL senden.Or, you can manually validate the subscription by sending a GET request to the validation URL. Das Ereignisabonnement bleibt im Status „Ausstehend“, bis es überprüft wurde.The event subscription stays in a pending state until validated.

Ein Beispiel für die Handhabung des Handshakes zur Abonnementüberprüfung finden Sie in einem C#-Beispiel.For an example of handling the subscription validation handshake, see a C# sample.

ChecklisteChecklist

Wenn während der Erstellung des Ereignisabonnements eine Fehlermeldung der Art „Fehler beim Versuch, den angegebenen Endpunkt https://your-endpoint-here zu überprüfen.During event subscription creation, if you're seeing an error message such as "The attempt to validate the provided endpoint https://your-endpoint-here failed. Ausführlichere Informationen finden Sie unter https://aka.ms/esvalidation.“ angezeigt wird, ist dies ein Hinweis darauf, dass für den Überprüfungshandshake ein Fehler aufgetreten ist.For more details, visit https://aka.ms/esvalidation", it indicates that there's a failure in the validation handshake. Überprüfen Sie Folgendes, um diesen Fehler zu beheben:To resolve this error, verify the following aspects:

  • Verfügen Sie über die Kontrolle über den Anwendungscode auf dem Zielendpunkt?Do you have control of the application code in the target endpoint? Haben Sie beispielsweise beim Schreiben einer Azure Function, die auf einem HTTP-Trigger basiert, Zugriff auf den Anwendungscode, um Änderungen daran vorzunehmen?For example, if you're writing an HTTP trigger based Azure Function, do you have access to the application code to make changes to it?

  • Wenn Sie Zugriff auf den Anwendungscode haben, sollten Sie den ValidationCode-basierten Handshakemechanismus wie im obigen Beispiel implementieren.If you have access to the application code, implement the ValidationCode based handshake mechanism as shown in the sample above.

  • Wenn Sie keinen Zugriff auf den Anwendungscode haben (z.B. bei Nutzung eines Drittanbieterdiensts, der Webhooks unterstützt), können Sie den manuellen Handshakemechanismus verwenden.If you don't have access to the application code (for example, if you're using a third-party service that supports webhooks), you can use the manual handshake mechanism. Vergewissern Sie sich, dass Sie die API-Version „2018-05-01-preview“ oder eine spätere Version verwenden (installieren Sie die eventgrid-Erweiterung für die Azure-Befehlszeilenschnittstelle), um den validationUrl-Wert im Überprüfungsereignis zu erhalten.Make sure you're using the 2018-05-01-preview API version or later (install Event Grid Azure CLI extension) to receive the validationUrl in the validation event. Rufen Sie den Wert der validationUrl-Eigenschaft ab, und navigieren Sie im Webbrowser zu dieser URL, um den Handshake für die manuelle Validierung durchzuführen.To complete the manual validation handshake, get the value of the validationUrl property and visit that URL in your web browser. Wenn die Überprüfung erfolgreich durchgeführt wurde, sollte im Webbrowser eine Meldung mit einem entsprechenden Hinweis angezeigt werden.If validation is successful, you should see a message in your web browser that validation is successful. Sie sehen dann, dass „provisioningState“ für das Ereignisabonnement auf „Succeeded“ (Erfolgreich) festgelegt ist.You'll see that event subscription's provisioningState is "Succeeded".

Sicherheit für die EreignisbereitstellungEvent delivery security

Sie können Ihren Webhookendpunkt sichern, indem Sie der Webhook-URL beim Erstellen eines Ereignisabonnements Abfrageparameter hinzufügen.You can secure your webhook endpoint by adding query parameters to the webhook URL when creating an Event Subscription. Legen Sie einen dieser Abfrageparameter als Geheimnis fest, z. B. als ein Zugriffstoken.Set one of these query parameters to be a secret such as an access token. Der Webhook kann das Geheimnis verwenden, um zu erkennen, dass das Ereignis von Event Grid stammt und gültige Berechtigungen aufweist.The webhook can use the secret to recognize the event is coming from Event Grid with valid permissions. Event Grid nimmt diese Abfrageparameter in jede Ereignisbereitstellung an den Webhook auf.Event Grid will include these query parameters in every event delivery to the webhook.

Wenn Sie das Ereignisabonnement bearbeiten, werden die Abfrageparameter nur angezeigt und zurückgegeben, wenn der Parameter --include-full-endpoint-url in Azure CLI verwendet wird.When editing the Event Subscription, the query parameters aren't displayed or returned unless the --include-full-endpoint-url parameter is used in Azure CLI.

Abschließend ist es wichtig zu beachten, dass Azure Event Grid nur HTTPS-Webhook-Endpunkte unterstützt.Finally, it's important to note that Azure Event Grid only supports HTTPS webhook endpoints.

EreignisabonnementEvent subscription

Um ein Ereignis abonnieren zu können, müssen Sie nachweisen, dass Sie Zugriff auf die Ereignisquelle und den Ereignishandler haben.To subscribe to an event, you must prove that you have access to the event source and handler. Wie Sie nachweisen, dass Sie einen Webhook besitzen, wurde im vorherigen Abschnitt beschrieben.Proving that you own a WebHook was covered in the preceding section. Wenn Sie einen Ereignishandler verwenden, der kein Webhook ist (z.B. einen Event Hub oder Warteschlangenspeicher), benötigen Sie Schreibzugriff auf diese Ressource.If you're using an event handler that isn't a WebHook (such as an event hub or queue storage), you need write access to that resource. Durch diese Berechtigungsüberprüfung wird verhindert, dass ein nicht autorisierter Benutzer Ereignisse an Ihre Ressource sendet.This permissions check prevents an unauthorized user from sending events to your resource.

Sie benötigen die Berechtigung Microsoft.EventGrid/EventSubscriptions/Write für die Ressource, die als Ereignisquelle verwendet wird.You must have the Microsoft.EventGrid/EventSubscriptions/Write permission on the resource that is the event source. Sie benötigen diese Berechtigung, da Sie ein neues Abonnement im Gültigkeitsbereich der Ressource schreiben.You need this permission because you're writing a new subscription at the scope of the resource. Die angeforderte Ressource variiert abhängig davon, ob Sie ein Systemthema oder ein benutzerdefiniertes Thema abonnieren.The required resource differs based on whether you're subscribing to a system topic or custom topic. In diesem Abschnitt werden beide Typen beschrieben.Both types are described in this section.

Systemthemen (Azure-Dienstherausgeber)System topics (Azure service publishers)

Für Systemthemen benötigen Sie die Berechtigung zum Schreiben eines neuen Abonnements im Gültigkeitsbereich der Ressource, die das Ereignis veröffentlicht.For system topics, you need permission to write a new event subscription at the scope of the resource publishing the event. Das Format der Ressource ist: /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{resource-provider}/{resource-type}/{resource-name}.The format of the resource is: /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{resource-provider}/{resource-type}/{resource-name}

Beispiel: Um ein Ereignis im Speicherkonto myacct zu abonnieren, benötigen Sie die Berechtigung Microsoft.EventGrid/EventSubscriptions/Write für: /subscriptions/####/resourceGroups/testrg/providers/Microsoft.Storage/storageAccounts/myacct.For example, to subscribe to an event on a storage account named myacct, you need the Microsoft.EventGrid/EventSubscriptions/Write permission on: /subscriptions/####/resourceGroups/testrg/providers/Microsoft.Storage/storageAccounts/myacct

Benutzerdefinierte ThemenCustom topics

Für benutzerdefinierte Themen benötigen Sie die Berechtigung zum Schreiben eines neuen Ereignisabonnements im Gültigkeitsbereich des Event Grid-Themas.For custom topics, you need permission to write a new event subscription at the scope of the event grid topic. Das Format der Ressource ist: /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.EventGrid/topics/{topic-name}.The format of the resource is: /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.EventGrid/topics/{topic-name}

Beispiel: Um das benutzerdefinierte Thema mytopic zu abonnieren, benötigen Sie die Berechtigung Microsoft.EventGrid/EventSubscriptions/Write für: /subscriptions/####/resourceGroups/testrg/providers/Microsoft.EventGrid/topics/mytopic.For example, to subscribe to a custom topic named mytopic, you need the Microsoft.EventGrid/EventSubscriptions/Write permission on: /subscriptions/####/resourceGroups/testrg/providers/Microsoft.EventGrid/topics/mytopic

Veröffentlichung benutzerdefinierter ThemenCustom topic publishing

Benutzerdefinierte Themen verwenden Authentifizierungen über Shared Access Signatures (SAS) oder Schlüssel.Custom topics use either Shared Access Signature (SAS) or key authentication. Wir empfehlen SAS, aber die Schlüsselauthentifizierung ist einfacher zu programmieren und mit vielen vorhandenen Webhookherausgebern kompatibel.We recommend SAS, but key authentication provides simple programming, and is compatible with many existing webhook publishers.

Sie schließen den Authentifizierungswert in den HTTP-Header ein.You include the authentication value in the HTTP header. Verwenden Sie für SAS den Wert aeg-sas-token als Headerwert.For SAS, use aeg-sas-token for the header value. Verwenden Sie für die Schlüsselauthentifizierung den Wert aeg-sas-key als Headerwert.For key authentication, use aeg-sas-key for the header value.

SchlüsselauthentifizierungKey authentication

Die Schlüsselauthentifizierung ist die einfachste Form der Authentifizierung.Key authentication is the simplest form of authentication. Verwenden Sie das Format: aeg-sas-key: <your key>.Use the format: aeg-sas-key: <your key>

Beispielsweise übergeben Sie einen Schlüssel mit:For example, you pass a key with:

aeg-sas-key: VXbGWce53249Mt8wuotr0GPmyJ/nDT4hgdEj9DpBeRr38arnnm5OFg==

SAS-TokenSAS tokens

SAS-Token für Event Grid schließen die Ressource, eine Ablaufzeit und eine Signatur ein.SAS tokens for Event Grid include the resource, an expiration time, and a signature. Das Format des SAS-Tokens ist: r={resource}&e={expiration}&s={signature}.The format of the SAS token is: r={resource}&e={expiration}&s={signature}.

Die Ressource ist der Pfad für das Event Grid-Thema, an das Sie Ereignisse senden.The resource is the path for the event grid topic to which you're sending events. Beispielsweise lautet ein gültiger Ressourcenpfad: https://<yourtopic>.<region>.eventgrid.azure.net/eventGrid/api/events.For example, a valid resource path is: https://<yourtopic>.<region>.eventgrid.azure.net/eventGrid/api/events

Sie generieren die Signatur aus einem Schlüssel.You generate the signature from a key.

Beispielsweise ist ein gültiger aeg-sas-token-Wert:For example, a valid aeg-sas-token value is:

aeg-sas-token: r=https%3a%2f%2fmytopic.eventgrid.azure.net%2feventGrid%2fapi%2fevent&e=6%2f15%2f2017+6%3a20%3a15+PM&s=a4oNHpRZygINC%2fBPjdDLOrc6THPy3tDcGHw1zP4OajQ%3d

Das folgende Beispiel erstellt ein SAS-Token für die Verwendung mit Event Grid:The following example creates a SAS token for use with Event Grid:

static string BuildSharedAccessSignature(string resource, DateTime expirationUtc, string key)
{
    const char Resource = 'r';
    const char Expiration = 'e';
    const char Signature = 's';

    string encodedResource = HttpUtility.UrlEncode(resource);
    var culture = CultureInfo.CreateSpecificCulture("en-US");
    var encodedExpirationUtc = HttpUtility.UrlEncode(expirationUtc.ToString(culture));

    string unsignedSas = $"{Resource}={encodedResource}&{Expiration}={encodedExpirationUtc}";
    using (var hmac = new HMACSHA256(Convert.FromBase64String(key)))
    {
        string signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(unsignedSas)));
        string encodedSignature = HttpUtility.UrlEncode(signature);
        string signedSas = $"{unsignedSas}&{Signature}={encodedSignature}";

        return signedSas;
    }
}

VerwaltungszugriffssteuerungManagement Access Control

Azure Event Grid bietet die Möglichkeit, den Umfang zu steuern, in dem unterschiedliche Benutzer Zugriff auf verschiedene Verwaltungsvorgänge erhalten, z.B. Auflisten und Erstellen von Ereignisabonnements und Generieren von Schlüsseln.Azure Event Grid allows you to control the level of access given to different users to do various management operations such as list event subscriptions, create new ones, and generate keys. Event Grid nutzt die rollenbasierte Zugriffsüberprüfung (Role Based Access Control, RBAC) von Azure.Event Grid uses Azure's role-based access control (RBAC).

VorgangstypenOperation types

Event Grid unterstützt die folgenden Aktionen:Event Grid supports the following actions:

  • Microsoft.EventGrid/*/readMicrosoft.EventGrid/*/read
  • Microsoft.EventGrid/*/writeMicrosoft.EventGrid/*/write
  • Microsoft.EventGrid/*/deleteMicrosoft.EventGrid/*/delete
  • Microsoft.EventGrid/eventSubscriptions/getFullUrl/actionMicrosoft.EventGrid/eventSubscriptions/getFullUrl/action
  • Microsoft.EventGrid/topics/listKeys/actionMicrosoft.EventGrid/topics/listKeys/action
  • Microsoft.EventGrid/topics/regenerateKey/actionMicrosoft.EventGrid/topics/regenerateKey/action

Die letzten drei Vorgänge geben potenziell geheime Informationen zurück, die aus normalen Lesevorgängen herausgefiltert werden.The last three operations return potentially secret information, which gets filtered out of normal read operations. Es empfiehlt sich, den Zugriff auf diese Vorgänge einzuschränken.It's recommended that you restrict access to these operations.

Integrierte RollenBuilt-in roles

Event Grid stellt zwei integrierte Rollen zum Verwalten von Ereignisabonnements bereit.Event Grid provides two built-in roles for managing event subscriptions. Sie sind wichtig beim Implementieren von Ereignisdomänen, da sie Benutzern die erforderlichen Berechtigungen erteilen, um Themen in Ihrer Eventdomäne zu abonnieren.They are important when implementing event domains because they give users the permissions they need to subscribe to topics in your event domain. Diese Rollen gelten für Ereignisabonnements und gewähren keinen Zugriff auf Aktionen. Das heißt, sie berechtigen Sie beispielsweise nicht zum Erstellen von Themen.These roles are focused on event subscriptions and don't grant access for actions such as creating topics.

Sie können diese Rollen einem Benutzer oder Gruppen zuweisen.You can assign these roles to a user or group.

EventGrid EventSubscription Mitwirkender (Vorschau) : Verwalten von Event Grid-AbonnementvorgängenEventGrid EventSubscription Contributor (Preview): manage Event Grid subscription operations

[
  {
    "Description": "Lets you manage EventGrid event subscription operations.",
    "IsBuiltIn": true,
    "Id": "428e0ff05e574d9ca2212c70d0e0a443",
    "Name": "EventGrid EventSubscription Contributor (Preview)",
    "IsServiceRole": false,
    "Permissions": [
      {
        "Actions": [
          "Microsoft.Authorization/*/read",
          "Microsoft.EventGrid/eventSubscriptions/*",
          "Microsoft.EventGrid/topicTypes/eventSubscriptions/read",
          "Microsoft.EventGrid/locations/eventSubscriptions/read",
          "Microsoft.EventGrid/locations/topicTypes/eventSubscriptions/read",
          "Microsoft.Insights/alertRules/*",
          "Microsoft.Resources/deployments/*",
          "Microsoft.Resources/subscriptions/resourceGroups/read",
          "Microsoft.Support/*"
        ],
        "NotActions": [],
        "DataActions": [],
        "NotDataActions": [],
        "Condition": null
      }
    ],
    "Scopes": [
      "/"
    ]
  }
]

EventGrid EventSubscription Reader (Vorschau) : Lesen von Event Grid-AbonnementsEventGrid EventSubscription Reader (Preview): read Event Grid subscriptions

[
  {
    "Description": "Lets you read EventGrid event subscriptions.",
    "IsBuiltIn": true,
    "Id": "2414bbcf64974faf8c65045460748405",
    "Name": "EventGrid EventSubscription Reader (Preview)",
    "IsServiceRole": false,
    "Permissions": [
      {
        "Actions": [
          "Microsoft.Authorization/*/read",
          "Microsoft.EventGrid/eventSubscriptions/read",
          "Microsoft.EventGrid/topicTypes/eventSubscriptions/read",
          "Microsoft.EventGrid/locations/eventSubscriptions/read",
          "Microsoft.EventGrid/locations/topicTypes/eventSubscriptions/read",
          "Microsoft.Resources/subscriptions/resourceGroups/read"
        ],
        "NotActions": [],
        "DataActions": [],
        "NotDataActions": []
       }
    ],
    "Scopes": [
      "/"
    ]
  }
]

Benutzerdefinierte RollenCustom roles

Wenn Sie Berechtigungen angeben müssen, die sich von den integrierten Rollen unterscheiden, können Sie benutzerdefinierte Rollen erstellen.If you need to specify permissions that are different than the built-in roles, you can create custom roles.

Im Folgenden finden Sie Beispiele für Event Grid-Rollendefinitionen, die Benutzern das Durchführen unterschiedlicher Aktionen ermöglichen.The following are sample Event Grid role definitions that allow users to take different actions. Diese benutzerdefinierten Rollen unterscheiden sich von den integrierten Rollen, da sie einen breiteren Zugriff ermöglichen als Ereignisabonnements.These custom roles are different from the built-in roles because they grant broader access than just event subscriptions.

EventGridReadOnlyRole.json: Ausschließliches Zulassen schreibgeschützter Operationen.EventGridReadOnlyRole.json: Only allow read-only operations.

{
  "Name": "Event grid read only role",
  "Id": "7C0B6B59-A278-4B62-BA19-411B70753856",
  "IsCustom": true,
  "Description": "Event grid read only role",
  "Actions": [
    "Microsoft.EventGrid/*/read"
  ],
  "NotActions": [
  ],
  "AssignableScopes": [
    "/subscriptions/<Subscription Id>"
  ]
}

EventGridNoDeleteListKeysRole.json: Zulassen eingeschränkter Post-Aktionen, nicht aber von Löschaktionen.EventGridNoDeleteListKeysRole.json: Allow restricted post actions but disallow delete actions.

{
  "Name": "Event grid No Delete Listkeys role",
  "Id": "B9170838-5F9D-4103-A1DE-60496F7C9174",
  "IsCustom": true,
  "Description": "Event grid No Delete Listkeys role",
  "Actions": [
    "Microsoft.EventGrid/*/write",
    "Microsoft.EventGrid/eventSubscriptions/getFullUrl/action"
    "Microsoft.EventGrid/topics/listkeys/action",
    "Microsoft.EventGrid/topics/regenerateKey/action"
  ],
  "NotActions": [
    "Microsoft.EventGrid/*/delete"
  ],
  "AssignableScopes": [
    "/subscriptions/<Subscription id>"
  ]
}

EventGridContributorRole.json: Zulassen aller Event Grid-Aktionen.EventGridContributorRole.json: Allows all event grid actions.

{
  "Name": "Event grid contributor role",
  "Id": "4BA6FB33-2955-491B-A74F-53C9126C9514",
  "IsCustom": true,
  "Description": "Event grid contributor role",
  "Actions": [
    "Microsoft.EventGrid/*/write",
    "Microsoft.EventGrid/*/delete",
    "Microsoft.EventGrid/topics/listkeys/action",
    "Microsoft.EventGrid/topics/regenerateKey/action",
    "Microsoft.EventGrid/eventSubscriptions/getFullUrl/action"
  ],
  "NotActions": [],
  "AssignableScopes": [
    "/subscriptions/<Subscription id>"
  ]
}

Benutzerdefinierte Rollen können mit PowerShell, der Azure CLI oder der REST-API erstellt werden.You can create custom roles with PowerShell, Azure CLI, and REST.

Nächste SchritteNext steps