Uwierzytelnianie i autoryzacja przy użyciu identyfikatora Entra firmy Microsoft

W tym artykule opisano sposób uwierzytelniania klientów publikowania usługi Azure Event Grid przy użyciu identyfikatora Entra firmy Microsoft.

Omówienie

Platforma Microsoft Identity zapewnia zintegrowane zarządzanie uwierzytelnianiem i kontrolą dostępu dla zasobów i aplikacji korzystających z identyfikatora Entra firmy Microsoft jako dostawcy tożsamości. Użyj Platforma tożsamości Microsoft, aby zapewnić obsługę uwierzytelniania i autoryzacji w aplikacjach. Jest ona oparta na otwartych standardach, takich jak OAuth 2.0 i OpenID Połączenie oraz oferuje narzędzia i biblioteki open source, które obsługują wiele scenariuszy uwierzytelniania. Udostępnia zaawansowane funkcje, takie jak dostęp warunkowy, które umożliwiają ustawianie zasad wymagających uwierzytelniania wieloskładnikowego lub zezwalania na dostęp z określonych lokalizacji, na przykład.

Zaletą, która zwiększa stan zabezpieczeń w przypadku korzystania z identyfikatora Entra firmy Microsoft, jest to, że nie musisz przechowywać poświadczeń, takich jak klucze uwierzytelniania, w kodzie lub repozytoriach. Zamiast tego polegasz na pozyskiwaniu tokenów dostępu OAuth 2.0 z Platforma tożsamości Microsoft, które aplikacja przedstawia podczas uwierzytelniania w chronionym zasobie. Aplikację do publikowania zdarzeń można zarejestrować za pomocą identyfikatora Entra firmy Microsoft i uzyskać jednostkę usługi skojarzona z aplikacją, którą zarządzasz i używasz. Zamiast tego można użyć tożsamości zarządzanych, przypisanych przez system lub przypisanych przez użytkownika, dla jeszcze prostszego modelu zarządzania tożsamościami, ponieważ niektóre aspekty cyklu życia tożsamości są zarządzane.

Kontrola dostępu oparta na rolach (RBAC) umożliwia skonfigurowanie autoryzacji w taki sposób, że określone podmioty zabezpieczeń (tożsamości dla użytkowników, grup lub aplikacji) mają określone uprawnienia do wykonywania operacji na zasobach platformy Azure. W ten sposób podmiot zabezpieczeń używany przez aplikację kliencką wysyłającą zdarzenia do usługi Event Grid musi mieć skojarzona rola RBAC EventGrid Data Sender .

Podmioty zabezpieczeń

Istnieją dwie szerokie kategorie podmiotów zabezpieczeń, które mają zastosowanie podczas omawiania uwierzytelniania klienta publikowania usługi Event Grid:

  • Tożsamości zarządzane. Tożsamość zarządzana może być przypisana przez system, która jest włączona w zasobie platformy Azure i jest skojarzona tylko z tym zasobem lub przypisanym przez użytkownika, który jawnie utworzysz i nadajesz nazwę. Tożsamości zarządzane przypisane przez użytkownika mogą być skojarzone z więcej niż jednym zasobem.
  • Podmiot zabezpieczeń aplikacji. Jest to typ podmiotu zabezpieczeń, który reprezentuje aplikację, która uzyskuje dostęp do zasobów chronionych przez identyfikator Entra firmy Microsoft.

Niezależnie od używanego podmiotu zabezpieczeń, tożsamości zarządzanej lub podmiotu zabezpieczeń aplikacji klient używa tej tożsamości do uwierzytelniania przed identyfikatorem Entra firmy Microsoft i uzyskać token dostępu OAuth 2.0, który jest wysyłany z żądaniami podczas wysyłania zdarzeń do usługi Event Grid. Token jest podpisany kryptograficznie i po odebraniu go przez usługę Event Grid token jest weryfikowany. Na przykład odbiorcy (zamierzony odbiorca tokenu) są potwierdzani jako usługa Event Grid (https://eventgrid.azure.net), między innymi. Token zawiera informacje o tożsamości klienta. Usługa Event Grid przyjmuje tożsamość i sprawdza, czy klient ma przypisaną rolę EventGrid Data Sender . Dokładniej mówiąc, usługa Event Grid sprawdza, czy tożsamość ma Microsoft.EventGrid/events/send/action uprawnienia w roli RBAC skojarzonej z tożsamością przed zezwoleniem na ukończenie żądania publikowania zdarzeń.

Jeśli używasz zestawu SDK usługi Event Grid, nie musisz martwić się o szczegółowe informacje na temat sposobu implementowania uzyskiwania tokenów dostępu i dołączania go z każdym żądaniem do usługi Event Grid, ponieważ zestawy SDK płaszczyzny danych usługi Event Grid robią to za Ciebie.

Kroki konfiguracji klienta do korzystania z uwierzytelniania firmy Microsoft Entra

Wykonaj następujące kroki, aby skonfigurować klienta do korzystania z uwierzytelniania firmy Microsoft Entra podczas wysyłania zdarzeń do obszaru nazw tematów, domeny lub partnera.

  1. Utwórz lub użyj podmiotu zabezpieczeń, którego chcesz użyć do uwierzytelniania. Możesz użyć tożsamości zarządzanej lub podmiotu zabezpieczeń aplikacji.
  2. Przyznaj jednostce zabezpieczeń uprawnienia do publikowania zdarzeń , przypisując rolę Nadawca danych usługi EventGrid do podmiotu zabezpieczeń.
  3. Użyj zestawu SDK usługi Event Grid, aby opublikować zdarzenia w usłudze Event Grid.

Uwierzytelnianie przy użyciu tożsamości zarządzanej

Tożsamości zarządzane to tożsamości skojarzone z zasobami platformy Azure. Tożsamości zarządzane zapewniają tożsamość używaną przez aplikacje podczas korzystania z zasobów platformy Azure, które obsługują uwierzytelnianie firmy Microsoft Entra. Aplikacje mogą używać tożsamości zarządzanej zasobu hostingu, takiego jak maszyna wirtualna lub usługa aplikacja systemu Azure, aby uzyskać tokeny entra firmy Microsoft, które są prezentowane z żądaniem podczas publikowania zdarzeń w usłudze Event Grid. Po nawiązaniu połączenia z aplikacją usługa Event Grid wiąże kontekst jednostki zarządzanej z klientem. Po skojarzeniu z tożsamością zarządzaną klient publikowania usługi Event Grid może wykonywać wszystkie autoryzowane operacje. Autoryzacja jest udzielana przez skojarzenie jednostki zarządzanej z rolą RBAC usługi Event Grid.

Tożsamość zarządzana udostępnia usługom platformy Azure automatycznie zarządzaną tożsamość w usłudze Microsoft Entra ID. Kontrastując z innymi metodami uwierzytelniania, nie musisz przechowywać i chronić kluczy dostępu ani sygnatur dostępu współdzielonego (SAS) w kodzie lub konfiguracji aplikacji, zarówno dla samej tożsamości, jak i zasobów, do których chcesz uzyskać dostęp.

Aby uwierzytelnić klienta publikowania zdarzeń przy użyciu tożsamości zarządzanych, najpierw zdecyduj się na hostowanie usługi platformy Azure dla aplikacji klienckiej, a następnie włącz tożsamości zarządzane przypisane przez system lub przypisane przez użytkownika w tym wystąpieniu usługi platformy Azure. Można na przykład włączyć tożsamości zarządzane na maszynie wirtualnej, usługę aplikacja systemu Azure lub usługę Azure Functions.

Po skonfigurowaniu tożsamości zarządzanej w usłudze hostingu przypisz uprawnienie do publikowania zdarzeń do tej tożsamości.

Uwierzytelnianie przy użyciu podmiotu zabezpieczeń aplikacji klienckiej

Oprócz tożsamości zarządzanych kolejną opcją tożsamości jest utworzenie podmiotu zabezpieczeń dla aplikacji klienckiej. W tym celu należy zarejestrować aplikację przy użyciu identyfikatora Entra firmy Microsoft. Rejestrowanie aplikacji to gest, za pomocą którego delegujesz kontrolę zarządzania tożsamościami i dostępem do identyfikatora Entra firmy Microsoft. Wykonaj kroki opisane w sekcji Rejestrowanie aplikacji i w sekcji Dodawanie wpisu tajnego klienta. Przed rozpoczęciem zapoznaj się z wymaganiami wstępnymi .

Po utworzeniu podmiotu zabezpieczeń aplikacji i wykonania powyższych kroków przypisz uprawnienie do publikowania zdarzeń do tej tożsamości.

Uwaga

Podczas rejestrowania aplikacji w portalu obiekt aplikacji i jednostka usługi są tworzone automatycznie w dzierżawie głównej. Alternatywnie możesz użyć narzędzia Microsot Graph do zarejestrowania aplikacji. Jeśli jednak zarejestrujesz lub utworzysz aplikację przy użyciu interfejsów API programu Microsoft Graph, utworzenie obiektu jednostki usługi jest osobnym krokiem.

Przypisywanie uprawnień do podmiotu zabezpieczeń w celu publikowania zdarzeń

Tożsamość używana do publikowania zdarzeń w usłudze Event Grid musi mieć uprawnienie Microsoft.EventGrid/events/send/action umożliwiające wysyłanie zdarzeń do usługi Event Grid. To uprawnienie jest zawarte w wbudowanej roli RBAC Event Grid Data Sender. Tę rolę można przypisać do podmiotu zabezpieczeń dla danego zakresu, który może być grupą zarządzania, subskrypcją platformy Azure, grupą zasobów lub określonym tematem usługi Event Grid, domeną lub przestrzenią nazw partnera. Wykonaj kroki opisane w artykule Przypisywanie ról platformy Azure, aby przypisać jednostkę zabezpieczeń rolę Nadawca danych usługi EventGrid i w ten sposób przyznać aplikacji przy użyciu tego podmiotu zabezpieczeń dostępu do wysyłania zdarzeń. Alternatywnie możesz zdefiniować rolę niestandardową, która zawiera Microsoft.EventGrid/events/send/action uprawnienie i przypisać rolę niestandardową do podmiotu zabezpieczeń.

Dzięki uprawnieniam kontroli dostępu opartej na rolach możesz teraz skompilować aplikację kliencją w celu wysyłania zdarzeń do usługi Event Grid.

Uwaga

Usługa Event Grid obsługuje więcej ról RBAC na potrzeby poza wysyłaniem zdarzeń. Aby uzyskać więcej informacji, zobaczRole wbudowane usługi Event Grid.

Publikowanie zdarzeń przy użyciu zestawów SDK klienta usługi Event Grid

Użyj zestawu SDK płaszczyzny danych usługi Event Grid, aby opublikować zdarzenia w usłudze Event Grid. Zestaw SDK usługi Event Grid obsługuje wszystkie metody uwierzytelniania, w tym uwierzytelnianie firmy Microsoft Entra.

Oto przykładowy kod, który publikuje zdarzenia w usłudze Event Grid przy użyciu zestawu SDK platformy .NET. Punkt końcowy tematu można uzyskać na stronie Przegląd tematu usługi Event Grid w witrynie Azure Portal. Ma on format: https://<TOPIC-NAME>.<REGION>-1.eventgrid.azure.net/api/events.

ManagedIdentityCredential managedIdentityCredential = new ManagedIdentityCredential();
EventGridPublisherClient client = new EventGridPublisherClient( new Uri("<TOPIC ENDPOINT>"), managedIdentityCredential);


EventGridEvent egEvent = new EventGridEvent(
        "ExampleEventSubject",
        "Example.EventType",
        "1.0",
        "This is the event data");

// Send the event
await client.SendEventAsync(egEvent);

Wymagania wstępne

Poniżej przedstawiono wymagania wstępne dotyczące uwierzytelniania w usłudze Event Grid.

Publikowanie zdarzeń przy użyciu uwierzytelniania entra firmy Microsoft

Aby wysyłać zdarzenia do tematu, domeny lub przestrzeni nazw partnera, możesz skompilować klienta w następujący sposób. Wersja interfejsu API, która po raz pierwszy zapewniła obsługę uwierzytelniania firmy Microsoft Entra, to 2018-01-01. Użyj tej wersji interfejsu API lub nowszej wersji w aplikacji.

Przykład:

Ten fragment kodu języka C# tworzy klienta wydawcy usługi Event Grid przy użyciu klucza tajnego aplikacji (jednostki usługi) w celu włączenia metody DefaultAzureCredential, którą należy dodać do biblioteki Azure.Identity. Jeśli używasz oficjalnego zestawu SDK, zestaw SDK obsługuje wersję.

Environment.SetEnvironmentVariable("AZURE_CLIENT_ID", "");
Environment.SetEnvironmentVariable("AZURE_TENANT_ID", "");
Environment.SetEnvironmentVariable("AZURE_CLIENT_SECRET", "");

EventGridPublisherClient client = new EventGridPublisherClient(new Uri("your-event-grid-topic-domain-or-partner-namespace-endpoint"), new DefaultAzureCredential());

Aby uzyskać więcej informacji, zobacz następujące artykuły:

Wyłączanie uwierzytelniania klucza i sygnatury dostępu współdzielonego

Uwierzytelnianie firmy Microsoft Entra zapewnia lepszą obsługę uwierzytelniania niż jest to oferowane przez uwierzytelnianie za pomocą klucza dostępu lub tokenu sygnatury dostępu współdzielonego (SAS). W przypadku uwierzytelniania firmy Microsoft Entra tożsamość jest weryfikowana względem dostawcy tożsamości Firmy Microsoft Entra. Jako deweloper nie musisz obsługiwać kluczy w kodzie, jeśli używasz uwierzytelniania Microsoft Entra. Skorzystasz również ze wszystkich funkcji zabezpieczeń wbudowanych w platformę tożsamości Firmy Microsoft, takich jak dostęp warunkowy, który może pomóc w ulepszaniu stanu zabezpieczeń aplikacji.

Po podjęciu decyzji o użyciu uwierzytelniania firmy Microsoft Entra możesz wyłączyć uwierzytelnianie na podstawie kluczy dostępu lub tokenów SAS.

Uwaga

Klucze asyss lub uwierzytelnianie tokenu SAS to forma uwierzytelniania lokalnego. Podczas omawiania tej kategorii mechanizmów uwierzytelniania, które nie korzystają z identyfikatora Entra firmy Microsoft, usłyszysz czasami odwołanie do "lokalnego uwierzytelniania". Parametr interfejsu API używany do wyłączania uwierzytelniania lokalnego jest wywoływany odpowiednio tak: disableLocalAuth.

Azure Portal

Podczas tworzenia nowego tematu można wyłączyć uwierzytelnianie lokalne na karcie Zaawansowane na stronie Tworzenie tematu.

Screenshot showing the Advanced tab of Create Topic page when you can disable local authentication.

W przypadku istniejącego tematu wykonaj następujące kroki, aby wyłączyć uwierzytelnianie lokalne:

  1. Przejdź do strony Temat usługi Event Grid dla tematu i wybierz pozycję Włączone w obszarze Uwierzytelnianie lokalne

    Screenshot showing the Overview page of an existing topic.

  2. W oknie podręcznym Uwierzytelnianie lokalne wybierz pozycję Wyłączone, a następnie wybierz przycisk OK.

    Screenshot showing the Local Authentication window.

Interfejs wiersza polecenia platformy Azure

Następujące polecenie interfejsu wiersza polecenia pokazuje sposób tworzenia tematu niestandardowego z wyłączonym uwierzytelnianiem lokalnym. Funkcja wyłącz uwierzytelnianie lokalne jest obecnie dostępna jako wersja zapoznawcza i musisz użyć wersji 2021-06-01-previewinterfejsu API .

az resource create --subscription <subscriptionId> --resource-group <resourceGroup> --resource-type Microsoft.EventGrid/topics --api-version 2021-06-01-preview --name <topicName> --location <location> --properties "{ \"disableLocalAuth\": true}"

W dokumentacji poniżej przedstawiono wartości typów zasobów, których można użyć zgodnie z tematem, który tworzysz lub aktualizujesz.

Typ tematu Typ zasobu
Domeny Microsoft.EventGrid/domains
Przestrzeń nazw partnera Microsoft.EventGrid/partnerNamespaces
Temat niestandardowy Microsoft.EventGrid/topics

Azure PowerShell

Jeśli używasz programu PowerShell, użyj następujących poleceń cmdlet, aby utworzyć temat niestandardowy z wyłączonym uwierzytelnianiem lokalnym.


Set-AzContext -SubscriptionId <SubscriptionId>

New-AzResource -ResourceGroupName <ResourceGroupName> -ResourceType Microsoft.EventGrid/topics -ApiVersion 2021-06-01-preview -ResourceName <TopicName> -Location <Location> -Properties @{disableLocalAuth=$true}

Uwaga

Zasoby