Event Grid のセキュリティと認証Event Grid security and authentication

Azure Event Grid には、3 種類の認証があります。Azure Event Grid has three types of authentication:

  • webhook のイベント配信WebHook event delivery
  • イベントのサブスクリプションEvent subscriptions
  • カスタム トピックの発行Custom topic publishing

webHook のイベント配信WebHook Event delivery

Webhook は、Azure Event Grid からイベントを受信する多数ある方法の 1 つです。Webhooks are one of the many ways to receive events from Azure Event Grid. 新しいイベントの準備ができるたびに、Event Grid サービスは、本文にイベントが含まれる HTTP 要求を構成済み HTTP エンドポイントに POST します。When a new event is ready, Event Grid service POSTs an HTTP request to the configured endpoint with the event in the request body.

Webhook をサポートする他の多くのサービスと同様に、Event Grid を使用するには、Webhook エンドポイントへのイベントの配信を開始する前に、そのエンドポイントの所有権を証明する必要があります。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. この要件により、悪意のあるユーザーはエンドポイントをイベントで氾濫させることができなくなります。This requirement prevents a malicious user from flooding your endpoint with events. 以下に示す 3 つの Azure サービスのいずれかを使用すると、Azure インフラストラクチャはこの検証を自動的に処理します。When you use any of the three Azure services listed below, the Azure infrastructure automatically handles this validation:

他の種類のエンドポイント (HTTP トリガー ベースの Azure 関数など) を使用する場合は、エンドポイントのコードが Event Grid を使用した検証ハンドシェイクに参加する必要があります。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 では、サブスクリプションを検証する 2 つの方法がサポートされています。Event Grid supports two ways of validating the subscription.

  1. ValidationCode ハンドシェイク (プログラムによる) :この方法は、エンドポイントのソース コードを制御する場合にお勧めします。ValidationCode handshake (programmatic): If you control the source code for your endpoint, this method is recommended. イベント サブスクリプションの作成時に、Event Grid はサブスクリプション検証イベントをエンドポイントに送信します。At the time of event subscription creation, Event Grid sends a subscription validation event to your endpoint. このイベントのスキーマは、他の Event Grid イベントに似ています。The schema of this event is similar to any other Event Grid event. このイベントのデータ部分には validationCode プロパティが含まれます。The data portion of this event includes a validationCode property. アプリケーションは、検証の要求が想定されるイベント サブスクリプションに対するものであることを確認し、検証コードを Event Grid にエコーで返します。Your application verifies that the validation request is for an expected event subscription, and echoes the validation code to Event Grid. このハンドシェイク メカニズムは、すべての Event Grid バージョンでサポートされます。This handshake mechanism is supported in all Event Grid versions.

  2. ValidationURL ハンドシェイク (手動) :場合によっては、エンドポイントのソース コードにアクセスして ValidationCode ハンドシェイクを実装することはできません。ValidationURL handshake (manual): In certain cases, you can't access the source code of the endpoint to implement the ValidationCode handshake. たとえば、サード パーティのサービス (ZapierIFTTT など) を使用する場合は、プログラムによって検証コードに応答できません。For example, if you use a third-party service (like Zapier or IFTTT), you can't programmatically respond with the validation code.

    2018-05-01-preview バージョン以降では、手動の検証ハンドシェイクが Event Grid によってサポートされるようになりました。Starting with version 2018-05-01-preview, Event Grid supports a manual validation handshake. API バージョン 2018-05-01-preview 以降を使用する SDK またはツールでイベント サブスクリプションを作成すると、Event Grid によって、サブスクリプション検証イベントのデータ部分で validationUrl プロパティが送信されます。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. ハンドシェイクを完了するには、イベント データ内でその URL を探し、そこへ GET 要求を手動で送信します。To complete the handshake, find that URL in the event data and manually send a GET request to it. REST クライアントと Web ブラウザーのどちらでも使用できます。You can use either a REST client or your web browser.

    指定された URL は 5 分間有効です。The provided URL is valid for 5 minutes. この期間、イベント サブスクリプションのプロビジョニング状態は AwaitingManualAction になります。During that time, the provisioning state of the event subscription is AwaitingManualAction. 手動の検証を 5 分以内に完了しなかった場合、プロビジョニング状態は Failed に設定されます。If you don't complete the manual validation within 5 minutes, the provisioning state is set to Failed. 手動による検証を始める前に、もう一度イベント サブスクリプションを作成する必要があります。You'll have to create the event subscription again before starting the manual validation.

    この認証メカニズムではまた、webhook エンドポイントが 200 の HTTP 状態コードを返すことも必要です。それにより、手動検証モードに設定される前に、検証イベントの POST が受け付けられたことを認識できるようになります。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. つまり、エンドポイントが 200 を返しても、プログラムで検証の応答を戻さないと、モードは手動検証モードに移行されます。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. 5 分以内に検証 URL に GET が存在した場合、検証ハンドシェイクは成功したと見なされます。If there is a GET on the validation URL within 5 minutes, the validation handshake is considered to be successful.

注意

検証に自己署名証明書を使用することは、サポートされていません。Using self-signed certificates for validation isn't supported. 代わりに、証明機関 (CA) からの署名入り証明書を使用します。Use a signed certificate from a certificate authority (CA) instead.

検証の詳細Validation details

  • イベント サブスクリプションの作成時または更新時に、Event Grid はサブスクリプション検証イベントをターゲット エンドポイントに投稿します。At the time of event subscription creation/update, Event Grid posts a subscription validation event to the target endpoint.
  • このイベントには、ヘッダー値 "aeg-event-type: SubscriptionValidation" が含まれています。The event contains a header value "aeg-event-type: SubscriptionValidation".
  • イベント本文のスキーマは、他の Event Grid イベントと同じです。The event body has the same schema as other Event Grid events.
  • イベントの eventType プロパティは、Microsoft.EventGrid.SubscriptionValidationEvent です。The eventType property of the event is Microsoft.EventGrid.SubscriptionValidationEvent.
  • イベントの data プロパティには、ランダムに生成された文字列を持つ validationCode プロパティが含まれています。The data property of the event includes a validationCode property with a randomly generated string. たとえば、"validationCode: acb13…" のようなプロパティです。For example, "validationCode: acb13…".
  • イベント データには、validationUrl プロパティと、サブスクリプションを手動で検証するための URL も含まれます。The event data also includes a validationUrl property with a URL for manually validating the subscription.
  • 配列には、検証イベントのみが含まれています。The array contains only the validation event. その他のイベントは、検証コードをエコーで返した後、別の要求で送信されます。Other events are sent in a separate request after you echo back the validation code.
  • EventGrid DataPlane SDK には、サブスクリプション検証イベント データとサブスクリプション検証の応答に対応するクラスがあります。The EventGrid DataPlane SDKs have classes corresponding to the subscription validation event data and subscription validation response.

SubscriptionValidationEvent の例を以下に示します。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"
}]

エンドポイントの所有権を証明するには、次の例に示すように、validationResponse プロパティで検証コードをエコーで返します。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"
}

HTTP 200 OK 応答状態コードを返す必要があります。You must return an HTTP 200 OK response status code. HTTP 202 Accepted は有効な Event Grid サブスクリプション検証の応答として認識されません。HTTP 202 Accepted is not recognized as a valid Event Grid subscription validation response.

または、検証 URL に GET 要求を手動で送信して、サブスクリプションを検証することができます。Or, you can manually validate the subscription by sending a GET request to the validation URL. イベント サブスクリプションは、検証されるまで保留状態にとどまります。The event subscription stays in a pending state until validated.

サブスクリプション検証ハンドシェイクの処理の例については、C# のサンプルに関するページをご覧ください。For an example of handling the subscription validation handshake, see a C# sample.

チェック リストChecklist

イベント サブスクリプションの作成時に表示される "指定されたエンドポイント https://your-endpoint-here の検証の試行に失敗しました。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. 詳細については、https://aka.ms/esvalidation を参照してください" のようなエラー メッセージは、検証ハンドシェイクでエラーが発生したことを示します。For more details, visit https://aka.ms/esvalidation", it indicates that there's a failure in the validation handshake. このエラーを解決するには、次の点を確認します。To resolve this error, verify the following aspects:

  • ターゲット エンドポイントでアプリケーション コードを制御しているか。Do you have control of the application code in the target endpoint? たとえば、HTTP トリガー ベースの Azure 関数を記述する場合は、その関数を変更するためにアプリケーション コードにアクセスできるかどうか。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?

  • アプリケーション コードにアクセスできる場合は、上記のサンプルに示すように ValidationCode ベースのハンドシェイクのメカニズムを実装します。If you have access to the application code, implement the ValidationCode based handshake mechanism as shown in the sample above.

  • アプリケーション コードにアクセスできない場合 (Webhook をサポートするサードパーティのサービスを使用している場合など) は、手動のハンドシェイクのメカニズムを使用できます。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. 検証イベントで validationUrl を受け取るために、2018-05-01-preview API バージョン以降を使用していることを確認してください (Event Grid の Azure CLI 拡張機能をインストールします)。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. 手動の検証ハンドシェイクを完了するには、validationUrl プロパティの値を取得し、Web ブラウザーでその URL にアクセスしてください。To complete the manual validation handshake, get the value of the validationUrl property and visit that URL in your web browser. 検証が成功すると、そのことを示すメッセージが Web ブラウザーに表示されます。If validation is successful, you should see a message in your web browser that validation is successful. イベント サブスクリプションの provisioningState には、"Succeeded" と表示されます。You'll see that event subscription's provisioningState is "Succeeded".

イベント配信のセキュリティEvent delivery security

イベント サブスクリプションを作成するときに、webhook URL にクエリ パラメーターを追加することで、webhook エンドポイントをセキュリティで保護できます。You can secure your webhook endpoint by adding query parameters to the webhook URL when creating an Event Subscription. これらのクエリ パラメーターのいずれかを、アクセス トークンなどのシークレットに設定します。Set one of these query parameters to be a secret such as an access token. Webhook はシークレットを使用して、イベントが有効なアクセス許可を持つ Event Grid からのものであることを認識できます。The webhook can use the secret to recognize the event is coming from Event Grid with valid permissions. Event Grid には、webhook へのすべてのイベント配信にこれらのクエリ パラメーターが含められます。Event Grid will include these query parameters in every event delivery to the webhook.

イベント サブスクリプションを編集すると、Azure CLI--include-full-endpoint-url パラメーターを使用した場合を除き、クエリ パラメーターが表示されなくなるか、返されなくなります。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.

最後に、Azure Event Grid がサポートするのは HTTPS webhook エンドポイントのみであることにご注意ください。Finally, it's important to note that Azure Event Grid only supports HTTPS webhook endpoints.

イベント サブスクリプションEvent subscription

イベントにサブスクライブするには、イベント ソースとハンドラーへのアクセスがあることを証明する必要があります。To subscribe to an event, you must prove that you have access to the event source and handler. WebHook を所有していることの証明については、前のセクションで説明しました。Proving that you own a WebHook was covered in the preceding section. WebHook ではないイベント ハンドラー (イベント ハブ、キュー ストレージなど) を使用している場合は、そのリソースへの書き込みアクセスが必要です。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. このアクセス許可のチェックにより、未認証のユーザーはリソースにイベントを送信できなくなります。This permissions check prevents an unauthorized user from sending events to your resource.

イベント ソースであるリソースに対する Microsoft.EventGrid/EventSubscriptions/Write アクセス許可を持っている必要があります。You must have the Microsoft.EventGrid/EventSubscriptions/Write permission on the resource that is the event source. リソースのスコープで新しいサブスクリプションを作成するため、このアクセス許可が必要です。You need this permission because you're writing a new subscription at the scope of the resource. 必要なリソースは、サブスクライブしているのがシステム トピックかカスタム トピックかによって異なります。The required resource differs based on whether you're subscribing to a system topic or custom topic. ここでは、この 2 つの種類について説明します。Both types are described in this section.

システム トピック (Azure サービスの発行元)System topics (Azure service publishers)

システム トピックの場合、イベントを発行するリソースのスコープに新しいイベント サブスクリプションを書き込むアクセス許可が必要です。For system topics, you need permission to write a new event subscription at the scope of the resource publishing the event. リソースの形式は次のとおりです。/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}

たとえば、myacct というストレージ アカウントでイベントにサブスクライブするには、Microsoft.EventGrid/EventSubscriptions/Write アクセス許可が必要です。/subscriptions/####/resourceGroups/testrg/providers/Microsoft.Storage/storageAccounts/myacctFor 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

カスタム トピックCustom topics

カスタム トピックの場合、Event Grid トピックのスコープに新しいイベント サブスクリプションを書き込むアクセス許可が必要です。For custom topics, you need permission to write a new event subscription at the scope of the event grid topic. リソースの形式は次のとおりです。/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}

たとえば、mytopic というカスタム トピックにサブスクライブするには、Microsoft.EventGrid/EventSubscriptions/Write アクセス許可が必要です。/subscriptions/####/resourceGroups/testrg/providers/Microsoft.EventGrid/topics/mytopicFor 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

カスタム トピックの発行Custom topic publishing

カスタム トピックは、Shared Access Signature (SAS) またはキー認証を使用します。Custom topics use either Shared Access Signature (SAS) or key authentication. SAS が推奨されますが、キー認証はプログラミングが簡単で、既存の多くの webhook 発行元と互換性があります。We recommend SAS, but key authentication provides simple programming, and is compatible with many existing webhook publishers.

認証値は、HTTP ヘッダーに含めます。You include the authentication value in the HTTP header. SAS の場合は、ヘッダー値に aeg-sas-token を使用します。For SAS, use aeg-sas-token for the header value. キー認証の場合は、ヘッダー値に aeg-sas-key を使用します。For key authentication, use aeg-sas-key for the header value.

キー認証Key authentication

キー認証は、最も単純な形式の認証です。Key authentication is the simplest form of authentication. 次の形式を使用します。aeg-sas-key: <your key>Use the format: aeg-sas-key: <your key>

たとえば、次のようにキーを渡します。For example, you pass a key with:

aeg-sas-key: VXbGWce53249Mt8wuotr0GPmyJ/nDT4hgdEj9DpBeRr38arnnm5OFg==

SAS トークンSAS tokens

Event Grid の SAS トークンには、リソース、有効期限、および署名が含まれます。SAS tokens for Event Grid include the resource, an expiration time, and a signature. SAS トークンの形式は r={resource}&e={expiration}&s={signature} です。The format of the SAS token is: r={resource}&e={expiration}&s={signature}.

リソースは、イベントを送信する Event Grid グリッド トピックのパスです。The resource is the path for the event grid topic to which you're sending events. たとえば、有効なリソース パスは次のとおりです。https://<yourtopic>.<region>.eventgrid.azure.net/eventGrid/api/eventsFor example, a valid resource path is: https://<yourtopic>.<region>.eventgrid.azure.net/eventGrid/api/events

キーから署名を生成します。You generate the signature from a key.

たとえば、有効な aeg-sas-token 値は次のとおりです。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

次の例では、Event Grid で使用する SAS トークンを作成します。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;
    }
}

管理アクセス制御Management Access Control

Azure Event Grid を使用すると、イベント サブスクリプションの一覧表示、新しいサブスクリプションの作成、キーの生成など、多様な管理操作を実行する各ユーザーに付与するアクセス レベルを制御できます。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 は、Azure のロール ベースのアクセス制御 (RBAC) を使います。Event Grid uses Azure's role-based access control (RBAC).

操作の種類Operation types

Event Grid では、以下の操作がサポートされています。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

最後の 3 つの操作は秘密情報を返す可能性がありますが、この情報は通常の読み取り操作からはフィルターで除外されます。The last three operations return potentially secret information, which gets filtered out of normal read operations. このような操作へのアクセスは制限することをお勧めします。It's recommended that you restrict access to these operations.

組み込みのロールBuilt-in roles

Event Grid には、イベント サブスクリプションを管理するための組み込みロールが 2 つ用意されています。Event Grid provides two built-in roles for managing event subscriptions. これらは、イベント ドメイン内のトピックをサブスクライブするために必要なアクセス許可をユーザーに提供するため、イベント ドメインを実装するときに重要です。They are important when implementing event domains because they give users the permissions they need to subscribe to topics in your event domain. これらのロールはイベント サブスクリプションだけを対象としたものであり、トピックの作成などのアクションに対するアクセス権は付与されません。These roles are focused on event subscriptions and don't grant access for actions such as creating topics.

これらのロールはユーザーまたはグループに割り当てることができます。You can assign these roles to a user or group.

EventGrid EventSubscription 共同作成者 (プレビュー) : Event Grid のサブスクリプション操作を管理しますEventGrid 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 閲覧者 (プレビュー) : Event Grid のサブスクリプションを読みますEventGrid 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": [
      "/"
    ]
  }
]

カスタム ロールCustom roles

組み込みロールとは異なるアクセス許可を指定する必要がある場合は、カスタム ロールを作成できます。If you need to specify permissions that are different than the built-in roles, you can create custom roles.

さまざまなアクションの実行をユーザーに許可する Event Grid ロール定義の例を以下に示します。The following are sample Event Grid role definitions that allow users to take different actions. これらのカスタム ロールは、イベント サブスクリプションより広範囲のアクセス権を付与するため、組み込みロールとは異なります。These custom roles are different from the built-in roles because they grant broader access than just event subscriptions.

EventGridReadOnlyRole.json:読み取り専用操作のみを許可します。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:制限付きの投稿アクションを許可しますが、削除アクションは禁止します。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:すべての Event Grid アクションを許可します。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>"
  ]
}

カスタム ロールは、PowerShellAzure CLIREST API で作成できます。You can create custom roles with PowerShell, Azure CLI, and REST.

次の手順Next steps