Implementowanie komunikacji między dzierżawami przy użyciu aplikacji wielodostępnych
Ten przewodnik zawiera rozwiązanie umożliwiające osiągnięcie dwukierunkowej, bezpiecznej komunikacji między usługami hostowanymi w subskrypcjach platformy Azure zarządzanych przez różne dzierżawy firmy Microsoft Entra.
Zabezpieczanie komunikacji wielodostępnych na platformie Azure może być trudne z powodu ograniczeń, które są związane z wieloma usługami. Aby uzyskać tokeny z identyfikatora Entra firmy Microsoft, można wyeliminować konieczność bezpośredniego zarządzania poświadczeniami przy użyciu tożsamości zarządzanych platformy Azure. Jednak tożsamości zarządzane platformy Azure nie działają poza granicami dzierżawy, a typową alternatywą jest użycie udostępnionych wpisów tajnych, takich jak adresy URL sygnatur dostępu współdzielonego. Pamiętaj, że jeśli używasz udostępnionych wpisów tajnych, musisz bezpiecznie dystrybuować i wymieniać wpisy tajne w granicach dzierżawy firmy Microsoft Entra.
Jedną z opcji, która pozwala uniknąć tego obciążenia, jest utworzenie wielodostępnej aplikacji reprezentującej tożsamość obciążenia. W procesie wyrażania zgody można określić tę tożsamość obciążenia dla dzierżawy zewnętrznej i ostatecznie zezwolić na uwierzytelnianie usług w dzierżawie zewnętrznej.
W tym artykule przedstawiono przykładową implementację tego wzorca, który używa przykładowego kodu.
Ten wzorzec można użyć ponownie w przypadku dowolnego scenariusza wielodostępnego, który ma różne usługi, które muszą komunikować się przez granice dzierżawy firmy Microsoft Entra.
Architektura
Pobierz plik programu PowerPoint tej architektury.
Przepływ pracy
Poniższy przepływ pracy odpowiada powyższemu diagramowi:
Administrator po stronie dostawcy tworzy rejestrację aplikacji wielodostępnej i konfiguruje dla niego klucz tajny klienta.
Administrator po stronie klienta aprowizuje jednostkę usługi w swojej dzierżawie. Ta jednostka usługi jest oparta na aplikacji wielodostępne utworzonej przez dostawcę. Ten krok można wykonać na wiele sposobów. W tym przykładzie wybraliśmy utworzenie adresu URL w celu udostępnienia go administratorowi dzierżawy klienta, ale zamiast tego możesz użyć interfejsu API programu Microsoft Graph.
Klient stosuje role kontroli dostępu opartej na rolach (RBAC) do tej nowej jednostki usługi, aby była autoryzowana do uzyskiwania dostępu do usługi Azure Service Bus.
Aplikacja funkcji dostawcy używa identyfikatora klienta i wpisu tajnego klienta rejestracji aplikacji w celu wysłania uwierzytelnionego komunikatu do kolejki usługi Service Bus klienta.
Aplikacja funkcji klienta używa tożsamości zarządzanej do odczytywania komunikatu dostawcy z kolejki za pośrednictwem wyzwalacza usługi Service Bus.
Po odebraniu komunikatu aplikacja funkcji klienta zwykle wykonuje pewną pracę przed wysłaniem komunikatu o stanie z powrotem do dostawcy. W tym przypadku w celach demonstracyjnych aplikacja funkcji natychmiast wysyła komunikat o stanie do dostawcy w oddzielnej kolejce w tej samej usłudze Service Bus.
Ta aplikacja funkcji odczytuje z kolejki stanu z dzierżawy klienta za pośrednictwem czasomierza wyzwalanego przez usługę Azure Functions.
Szczegóły scenariusza
Dostawca ma wielu klientów. Dostawca i każdy klient mają własną dzierżawę identyfikatora Entra firmy Microsoft i zasoby platformy Azure. Dostawca i każdy klient potrzebują bezpiecznej, dwukierunkowej metody komunikacji, aby mogli wymieniać komunikaty za pośrednictwem kolejek usługi Service Bus. Rozwiązanie powinno mieć atrakcyjną historię tożsamości, która pozwala uniknąć wprowadzania niepotrzebnych poświadczeń lub wpisów tajnych.
Co należy wiedzieć o aplikacjach wielodostępnych
Obiekt aplikacji jest globalnie unikatowym wystąpieniem aplikacji.
Po zarejestrowaniu aplikacji w usłudze Microsoft Entra obiekt aplikacji i obiekt jednostki usługi są automatycznie tworzone w dzierżawie.
Obiekt jednostki usługi jest tworzony w każdej dzierżawie, która używa aplikacji i odwołuje się do obiektu aplikacji. Obiekt aplikacji ma relację jeden do wielu z odpowiadającym mu obiektem jednostki usługi.
Obiekt aplikacji jest globalną reprezentacją aplikacji i jest używany we wszystkich dzierżawach. Obiekt jednostki usługi jest lokalną reprezentacją używaną w określonej dzierżawie.
Obiekt jednostki usługi należy utworzyć w każdej dzierżawie, w której jest używana aplikacja, aby mogła ustanowić tożsamość w celu uzyskania dostępu do zasobów zabezpieczonych przez dzierżawę. Aplikacja z jedną dzierżawą ma tylko jeden obiekt jednostki usługi w dzierżawie głównej. Ten obiekt jednostki usługi jest tworzony i dozwolony do użycia podczas rejestracji aplikacji. Aplikacja wielodostępna ma również obiekt jednostki usługi utworzony w każdej dzierżawie, a użytkownik z tej dzierżawy wyraził zgodę na jego użycie.
Aby uzyskać dostęp do zasobów zabezpieczonych przez dzierżawę firmy Microsoft Entra, podmiot zabezpieczeń musi reprezentować jednostkę, która wymaga dostępu.
Gdy aplikacja ma uprawnienia dostępu do zasobów w dzierżawie podczas rejestracji lub zgody, tworzony jest obiekt jednostki usługi. Ta architektura jest implementowana przy użyciu przepływu zgody.
W jaki sposób dostawca wysyła wiadomość do klienta?
W idealnym przypadku dostawca może przypisać tożsamość zarządzaną do zasobu obliczeniowego platformy Azure, który jest odpowiedzialny za wysyłanie komunikatów do kolejki klienta. Dzierżawa klienta jest skonfigurowana do zaufania tożsamości zarządzanych z dzierżawy dostawcy. Jednak prawdziwa federacja między dwiema dzierżawami firmy Microsoft Entra, która zasadniczo zezwalałaby na "udostępnianie" tożsamości z jednej dzierżawy do innej, nie jest obecnie możliwa. Dlatego dostawca musi uwierzytelniać się przy użyciu tożsamości, którą rozpoznaje klient. Dostawca musi uwierzytelnić się w dzierżawie firmy Microsoft Entra klienta jako jednostkę usługi, którą zna klient.
Zalecamy, aby dostawca zarejestrował aplikację wielodostępną we własnej dzierżawie, a następnie aprowizować skojarzona jednostka usługi w dzierżawie. Dostawca może następnie uwierzytelniać się w dzierżawie klienta i interfejsach API hostowanych przez klienta przy użyciu tej jednostki usługi. Dostawca nigdy nie musi udostępniać wpisu tajnego klienta w tym podejściu. Zarządzanie poświadczeniami jest wyłączną odpowiedzialnością dostawcy.
Jak klient wysyła komunikat o dostawcy?
Zalecamy, aby klient tworzy lub hostuje kolejkę, z której może odczytać dostawca. Klient zapisuje komunikat w kolejce. Dostawca wielokrotnie sonduje każdą kolejkę klienta pod kątem komunikatów przy użyciu obiektu jednostki usługi. Wadą tego podejścia jest to, że wprowadza opóźnienie sondowania, gdy dostawca otrzymuje komunikat. Kod musi być również uruchamiany częściej u dostawcy, ponieważ musi wznawiać i wykonywać logikę sondowania zamiast czekać na wyzwolenie zdarzenia. Jednak zarządzanie poświadczeniami pozostaje wyłączną odpowiedzialnością dostawcy, który wzmacnia bezpieczeństwo.
Innym możliwym rozwiązaniem jest utworzenie lub hostowanie kolejki przez dostawcę dla każdego z jego klientów. Każdy klient tworzy własną aplikację wielodostępną i żąda, aby dostawca aprowizować go w dzierżawie jako obiekt jednostki usługi. Następnie klient używa tego obiektu jednostki usługi do wysyłania komunikatów do kolejki specyficznej dla klienta po stronie dostawcy. Zarządzanie poświadczeniami pozostaje wyłączną odpowiedzialnością klienta. Jednym z wad tego podejścia jest to, że dostawca musi aprowizować jednostki usług skojarzone z aplikacjami klientów w dzierżawie. Ten proces jest ręczny, a dostawcy prawdopodobnie nie chcą, aby kroki ręczne należały do przepływu dołączania nowego klienta.
Przykładowa konfiguracja kodu
Poniższe kroki przeprowadzą Cię przez proces konfigurowania komunikacji między dzierżawami między dostawcą a klientem.
Konfiguracja dostawcy
Konfiguracja dostawcy obejmuje kroki generowania i aprowizacji wielodostępnej jednostki usługi aplikacji oraz kroki aprowizacji dzierżawy klienta.
Utwórz aplikację funkcji wyzwalaną przez protokół HTTP, aby wysłać komunikat do zapisu w kolejce poleceń usługi Service Bus klienta w dzierżawie klienta.
Utwórz aplikację funkcji wyzwalanej czasowo, aby okresowo sprawdzać kolejkę stanu w usłudze Service Bus klienta w dzierżawie klienta.
Tworzenie aplikacji wielodostępnej w dzierżawie dostawcy
Najpierw utwórz aplikację wielodostępną w dzierżawie dostawcy i aprowizuj jej tożsamość w dzierżawie klienta. W tym scenariuszu tożsamość jest jednostką usługi. Architektura wcześniej w tym artykule pokazuje, jak skonfigurować i aprowizować jednostkę usługi z dzierżawy dostawcy do dzierżawy klienta. Architektura zawiera również opis sposobu aprowizacji wielu dzierżaw firmy Microsoft Entra.
Wybierz opcję organizacji wielodostępnych.
Dodaj następującą witrynę internetową jako identyfikator URI przekierowania:
https://entra.microsoft.com
. Ten identyfikator URI można zmienić zgodnie z potrzebami biznesowymi.Zarejestruj i zanotuj wartość identyfikatora aplikacji (klienta).
Tworzenie nowego wpisu tajnego klienta
Po utworzeniu aplikacji wielodostępnej utwórz klucz tajny klienta dla tej jednostki usługi.
Zapisz wygenerowany wpis tajny w bezpiecznej lokalizacji. Wpis tajny i identyfikator klienta to poświadczenia klienta wymagane do wymiany kodu, przepływu kodu autoryzacji i tokenu identyfikatora w następnym kroku.
Azure Functions — wyzwalane przez protokół HTTP
Użyj funkcji HTTP, aby rozpocząć wdrażanie z dzierżawy dostawcy, wysyłając komunikat do kolejki wdrożenia usługi Service Bus klienta. Wybraliśmy funkcję wyzwalaną przez protokół HTTP jako metodę dostarczania, aby rozpocząć tę weryfikację koncepcji. Wygenerowana wcześniej jednostka usługi działa jako poświadczenie w celu uzyskania dostępu do dzierżawy klienta i zapisu w określonej kolejce w usłudze Service Bus. Aby ten krok działał prawidłowo, należy również ukończyć konfigurację klienta.
Azure Functions — wyzwalane czasomierzem
Użyj funkcji wyzwalanej przez czasomierz, aby sondować kolejkę stanu wdrożenia z dzierżawy klienta. Sondujemy kolejkę stanu wdrożenia co 10 sekund na potrzeby demonstracyjne w ramach tego weryfikacji koncepcji. Takie podejście eliminuje potrzebę, aby klient miał jednostkę usługi w celu uzyskania dostępu do dzierżawy dostawcy.
Konfiguracja klienta
Aprowizacja jednostki usługi przez zmodyfikowanie i użycie podanego adresu URL.
Określ zakres jednostki usługi dostawcy, aby użyć odpowiednich kontrolek RBAC.
Utwórz funkcję wyzwalaną przez usługę Service Bus, aby odczytać komunikat z kolejki komunikatów usługi Service Bus i umieścić komunikat w innej kolejce. W celach demonstracyjnych ten przepływ jest optymalny do testowania funkcjonalności.
Utwórz tożsamość zarządzaną przypisaną przez system dla funkcji wyzwalanej przez usługę Service Bus.
Przypisz zakres usługi Service Bus przypisanej przez system tożsamości zarządzanej.
Aprowizuj jednostkę usługi z dzierżawy dostawcy do dzierżawy klienta
Po zastąpieniu parametru
client_id
ciągu zapytania własnym identyfikatorem klienta odwiedź następujący adres URL:https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?response_type=code&response_mode=query&scope=openid&client_id=<your_client_ID>
.Jednostkę usługi można również aprowizować w innej dzierżawie firmy Microsoft Entra za pomocą wywołania interfejsu API programu Microsoft Graph administratora, polecenia programu Azure PowerShell lub polecenia interfejsu wiersza polecenia platformy Azure.
Zaloguj się przy użyciu konta z dzierżawy klienta.
Na ekranie zgody wybierz pozycję Akceptuj , aby aprowizować aplikację dostawcy w dzierżawie klienta. Adres URL ostatecznie przekierowuje do
microsoft.com
elementu , co nadal ma pożądany efekt aprowizacji tożsamości w dzierżawie klienta.Zweryfikuj tożsamość w dzierżawie firmy Microsoft Entra klienta, przechodząc do sekcji Aplikacje dla przedsiębiorstw, aby wyświetlić nowo aprowizowaną jednostkę usługi.
Konfigurowanie kontroli dostępu opartej na rolach dla aprowizowanej jednostki usługi
Określ zakres jednostki usługi dostawcy z konfiguracji jednostki usługi dostawcy, aby mieć role "Właściciel danych usługi Service Bus" w usłudze Service Bus. Ta jednostka usługi jest używana zarówno podczas zapisywania w kolejce z funkcją wyzwalaną przez protokół HTTP, jak i odczytywania z kolejki z funkcji wyzwalanej przez czasomierz. Upewnij się, że do jednostki usługi dodano rolę "Właściciel danych usługi Azure Service Bus".
Azure Functions — wyzwalacz usługi Service Bus
Wykonaj kroki opisane w samouczku dotyczącym funkcji opartych na tożsamościach, aby zdefiniować wyzwalacz funkcji z kolejki usługi Service Bus i dowiedzieć się, jak skonfigurować tożsamość zarządzaną. Te wskazówki ułatwiają wyzwalanie aplikacji funkcji z kolejki usługi Service Bus po dodaniu komunikatu do kolejki. Tożsamość zarządzana jest również używana podczas umieszczania komunikatu w innej kolejce. W celach demonstracyjnych używamy tej samej funkcji do wypychania komunikatu.
W nowo utworzonej przestrzeni nazw usługi Service Bus wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami). Możesz wyświetlić i skonfigurować, kto ma dostęp do zasobu na płaszczyźnie sterowania.
Udzielanie aplikacji funkcji dostępu do przestrzeni nazw usługi Service Bus przy użyciu tożsamości zarządzanych
Upewnij się, że do tożsamości zarządzanej dodano rolę "Odbiornik danych usługi Azure Service Bus".
W selektorze tożsamości zarządzanej wybierz pozycję Aplikacja funkcji z kategorii Tożsamość zarządzana przypisana przez system. Etykieta Aplikacja funkcji może zawierać liczbę w nawiasach obok niej. Ta liczba wskazuje, ile aplikacji z tożsamościami przypisanymi przez system znajdują się w subskrypcji.
Nawiązywanie połączenia z usługą Service Bus w aplikacji funkcji
W portalu wyszukaj aplikację funkcji lub przejdź do niej na stronie Aplikacja funkcji.
W obszarze Ustawienia aplikacji wybierz pozycję + Nowy , aby utworzyć nowe ustawienie aplikacji w tabeli.
Service BusConnection__fullyQualifiedNamespace <SERVICE_BUS_NAMESPACE>.Service Bus.windows.net
.
Zarządzanie cyklem życia wpisu tajnego klienta jednostki usługi
Jeśli wprowadzisz wpisy tajne do architektury między dzierżawami, musisz zarządzać cyklem życia wygenerowanych wpisów tajnych klienta. Zobacz Najlepsze rozwiązania dotyczące zarządzania wpisami tajnymi , aby dowiedzieć się, jak bezpiecznie przechowywać, obracać i monitorować wpisy tajne klienta.
Ustawienia lokalne
Każdy podkatalog zawiera wersję local.settings.json
stubbed plików, którą można zmodyfikować w celu lokalnego uruchamiania funkcji platformy Azure. Aby skonfigurować ustawienia na platformie Azure, zaktualizuj ustawienia aplikacji.
Polecenie DefaultAzureCredential
wylicza wiele ustawień, zanim osiągnie poświadczenia interfejsu wiersza polecenia platformy Azure. Aby uniknąć nieporozumień, zalecamy uruchomienie az login -t <tenant ID>
polecenia w celu wybrania poprawnych poświadczeń podczas opracowywania funkcji lokalnych.
Współautorzy
Ten artykuł jest obsługiwany przez firmę Microsoft. Pierwotnie został napisany przez następujących współautorów.
Autorzy zabezpieczeń:
- Audrey Long | Starszy inżynier ds. zabezpieczeń
- Ashton Mickey | Główny inżynier oprogramowania
- John Garland | Główny inżynier oprogramowania
Następne kroki
- Komunikacja między dzierżawami przy użyciu przykładowego kodu usługi Azure Service Bus
- Samouczek dotyczący funkcji opartych na tożsamościach