Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Mandanten-Onboarding in der SaaS-Architektur für das Silomodell mit C# und AWS CDK
Erstellt von Tabby Ward (AWS), Susmitha Reddy Gankidi () und Vijai Anand Ramalingam () AWS AWS
Code-Repository | Umgebung: PoC oder Pilotprojekt | Technologien: Modernisierung; DevOps |
Arbeitsaufwand: Open Source | AWSDienste: AWS CloudFormation; Amazon DynamoDB; Amazon DynamoDB DynamoDB-Streams; Lambda; AWS Amazon Gateway API |
Übersicht
Software-as-a-Service (SaaS) -Anwendungen können mit einer Vielzahl unterschiedlicher Architekturmodelle erstellt werden. Das Silomodell bezieht sich auf eine Architektur, in der Mandanten dedizierte Ressourcen zur Verfügung gestellt werden.
SaaS-Anwendungen basieren auf einem reibungslosen Modell für die Einführung neuer Mandanten in ihre Umgebung. Dies erfordert häufig die Orchestrierung einer Reihe von Komponenten, um alle Elemente, die für die Erstellung eines neuen Mandanten erforderlich sind, erfolgreich bereitzustellen und zu konfigurieren. Dieser Prozess wird in der SaaS-Architektur als Mandanten-Onboarding bezeichnet. Das Onboarding sollte für jede SaaS-Umgebung vollständig automatisiert werden, indem Infrastruktur als Code in Ihrem Onboarding-Prozess verwendet wird.
Dieses Muster führt Sie durch ein Beispiel für die Erstellung eines Mandanten und die Bereitstellung einer Basisinfrastruktur für den Mandanten auf Amazon Web Services (AWS). Das Muster verwendet C# und das AWS Cloud Development Kit (AWSCDK).
Da dieses Muster einen Fakturierungsalarm auslöst, empfehlen wir, den Stack in der Region USA Ost (Nord-Virginia) oder US-East-1 bereitzustellen. AWS Weitere Informationen finden Sie in der AWS Dokumentation.
Voraussetzungen und Einschränkungen
Voraussetzungen
Ein aktives AWSKonto
. Ein AWS Identity and Access Management (IAM) -Prinzipal mit ausreichendem IAM Zugriff, um AWS Ressourcen für dieses Muster zu erstellen. Weitere Informationen finden Sie unter IAMRollen.
Installieren Sie Amazon Command Line Interface (AWSCLI) und konfigurieren Sie AWS CLI es für die AWS CDK Bereitstellung.
Visual Studio 2022
wurde heruntergeladen und installiert oder Visual Studio Code wurde heruntergeladen und installiert. AWSToolkit for Visual Studio eingerichtet.
. NETCore 3.1 oder höher
(für AWS CDK C#-Anwendungen erforderlich)
Einschränkungen
AWSCDKverwendet AWS CloudFormation
, sodass AWS CDK für Anwendungen CloudFormation Dienstkontingente gelten. Weitere Informationen finden Sie unter AWS CloudFormation Kontingente. Der CloudFormation Mandantenstapel wird mit einer CloudFormation Servicerolle
infra-cloudformation-role
mit Platzhalterzeichen für Aktionen (sns
* undsqs*
) erstellt, wobei die Ressourcen jedoch auf dastenant-cluster
Präfix beschränkt sind. Evaluieren Sie diese Einstellung für einen Produktionsanwendungsfall und gewähren Sie nur den erforderlichen Zugriff auf diese Servicerolle. DieInfrastructureProvision
Lambda-Funktion verwendet auch ein Platzhalterzeichen (cloudformation*
), um den CloudFormation Stack bereitzustellen, wobei die Ressourcen jedoch auf dastenant-cluster
Präfix beschränkt sind.Der Docker-Build dieses Beispielcodes verwendet
--platform=linux/amd64
, umlinux/amd64
basierte Images zu erzwingen. Dadurch soll sichergestellt werden, dass die endgültigen Bildartefakte für Lambda geeignet sind, das standardmäßig die x86-64-Architektur verwendet. Wenn Sie die Lambda-Zielarchitektur ändern müssen, stellen Sie sicher, dass Sie sowohl die Dockerfiles als auch die Codes ändern. AWS CDK Weitere Informationen finden Sie im Blogbeitrag Migration von AWS Lambda-Funktionen auf AWS ARM-basierteGraviton2-Prozessoren. Beim Löschen des Stacks werden keine vom Stack generierten CloudWatch Logs (Protokollgruppen und Logs) bereinigt. Sie müssen die Protokolle manuell über die AWS Management Console, die CloudWatch Amazon-Konsole oder über die bereinigenAPI.
Dieses Muster dient als Beispiel. Evaluieren Sie für den Einsatz in der Produktion die folgenden Konfigurationen und nehmen Sie je nach Ihren Geschäftsanforderungen Änderungen vor:
Der Einfachheit halber ist für den AWSSimple Storage Service (Amazon S3)
-Bucket in diesem Beispiel die Versionierung nicht aktiviert. Evaluieren und aktualisieren Sie das Setup nach Bedarf. In diesem Beispiel werden der Einfachheit halber Amazon API REST API Gateway-Endpunkte
ohne Authentifizierung, Autorisierung oder Drosselung eingerichtet. Für den Produktionseinsatz empfehlen wir, das System in die Sicherheitsinfrastruktur des Unternehmens zu integrieren. Bewerten Sie diese Einstellung und fügen Sie bei Bedarf die erforderlichen Sicherheitseinstellungen hinzu. Für dieses Beispiel mit einer Mandanteninfrastruktur haben Amazon Simple Notification Service (AmazonSNS)
und Amazon Simple Queue Service (AmazonSQS) nur Mindestkonfigurationen. Der AWSKey Management Service (AWSKMS) für jeden Mandanten wird für Amazon CloudWatch - und SNS Amazon-Dienste im Konto geöffnet, um sie auf der Grundlage der AWSKMSSchlüsselrichtlinie in Anspruch zu nehmen. Das Setup ist nur ein Beispiel für einen Platzhalter. Passen Sie die Setups je nach Bedarf an Ihren geschäftlichen Anwendungsfall an. Die gesamte Konfiguration, die unter anderem die Bereitstellung und Löschung von Mandanten im Backend umfasst, aber nicht API darauf beschränkt ist AWS CloudFormation, deckt nur den grundlegenden Happy-Path-Fall ab. Evaluieren und aktualisieren Sie das Setup mit der erforderlichen Wiederholungslogik, zusätzlicher Fehlerbehandlungslogik und Sicherheitslogik auf der Grundlage Ihrer Geschäftsanforderungen.
Der Beispielcode wurde mit up-to-date cdk-nag
getestet, um zu überprüfen, ob es zum Zeitpunkt der Erstellung dieses Artikels Richtlinien gibt. In future könnten neue Richtlinien durchgesetzt werden. Diese neuen Richtlinien erfordern möglicherweise, dass Sie den Stack anhand der Empfehlungen manuell ändern müssen, bevor der Stack bereitgestellt werden kann. Überprüfen Sie den vorhandenen Code, um sicherzustellen, dass er Ihren Geschäftsanforderungen entspricht. Der Code verwendet die AWSCDK, um ein zufälliges Suffix zu generieren, anstatt sich auf statisch zugewiesene physische Namen für die meisten erstellten Ressourcen zu verlassen. Dieses Setup soll sicherstellen, dass diese Ressourcen eindeutig sind und nicht mit anderen Stacks in Konflikt geraten. Weitere Informationen finden Sie in der AWSCDKDokumentation. Passen Sie dies an Ihre Geschäftsanforderungen an.
Dieses Beispiel enthält Code-Pakete. NETLambda-Artefakte werden in Docker-basierte Images übertragen und mit der von Lambda bereitgestellten Container-Image-Laufzeit ausgeführt. Die Container-Image-Laufzeit bietet Vorteile für standardmäßige Übertragungs- und Speichermechanismen (Container-Registries) und genauere lokale Testumgebungen (über das Container-Image). Sie können das Projekt so umstellen, dass es das bereitgestellte Lambda verwendet. NETLaufzeiten, um die Build-Zeit der Docker-Images zu reduzieren, aber dann müssen Sie Übertragungs- und Speichermechanismen einrichten und sicherstellen, dass das lokale Setup mit dem Lambda-Setup übereinstimmt. Passen Sie den Code an die Geschäftsanforderungen der Benutzer an.
Produktversionen
AWSCDKVersion 2.45.0 oder höher
Visual Studio 2022
Architektur
Technologie-Stack
APIAmazon-Gateway
AWS CloudFormation
Amazon CloudWatch
Amazon-DynamoDB
AWSIdentity and Access Management (IAM)
AWS KMS
AWSLambda
Amazon S3
Amazon SNS
Amazon SQS
Architektur
Das folgende Diagramm zeigt den Ablauf der Erstellung von Mandanten-Stacks. Weitere Informationen zu den Technologie-Stacks für Steuerungsebene und Mandanten finden Sie im Abschnitt Zusätzliche Informationen.
![Workflow zum Erstellen eines Mandanten und zum Bereitstellen einer Basisinfrastruktur für den Mandanten auf. AWS](images/pattern-img/5baef800-fe39-4eb8-b11d-2c23eb3175fc/images/0b579484-b87c-4acb-8c60-8c33c18370e3.png)
Ablauf bei der Erstellung eines Mandantenstapels
Der Benutzer sendet eine POST API Anfrage mit neuer Mandanten-Payload (Mandantenname, Mandantenbeschreibung) JSON an einen von Amazon API Gateway REST API gehosteten Server. Das API Gateway verarbeitet die Anfrage und leitet sie an die Lambda Tenant Onboarding-Funktion im Backend weiter. In diesem Beispiel gibt es keine Autorisierung oder Authentifizierung. In einer Produktionsumgebung API sollte dies in das Sicherheitssystem der SaaS-Infrastruktur integriert werden.
Die Tenant Onboarding-Funktion verifiziert die Anfrage. Anschließend wird versucht, den Mandantendatensatz, der den Namen des Mandanten, die generierte allgemeine eindeutige Kennung (UUID) und die Mandantenbeschreibung enthält, in der Amazon DynamoDB Tenant Onboarding-Tabelle zu speichern.
Nachdem DynamoDB den Datensatz gespeichert hat, initiiert ein DynamoDB-Stream die nachgeschaltete Lambda Tenant Infrastructure-Funktion.
Die Lambda-Funktion Tenant Infrastructure agiert auf der Grundlage des empfangenen DynamoDB-Streams. Wenn der Stream für das INSERT Ereignis bestimmt ist, verwendet die Funktion den NewImage Abschnitt des Streams (letzter Aktualisierungsdatensatz, Feld Mandantenname), um mithilfe der Vorlage, die im S3-Bucket gespeichert ist, eine neue Mandanteninfrastruktur aufzurufen CloudFormation . Für die CloudFormation Vorlage ist der Parameter Tenant Name erforderlich.
AWS CloudFormation erstellt die Mandanteninfrastruktur auf der Grundlage der CloudFormation Vorlage und der Eingabeparameter.
Jede Einrichtung der Mieterinfrastruktur verfügt über einen CloudWatch Alarm, einen Abrechnungsalarm und ein Alarmereignis.
Das Alarmereignis wird zu einer Nachricht zu einem SNS Thema, die mit dem AWS KMS Schlüssel des Mieters verschlüsselt wird.
Das SNS Thema leitet die empfangene Alarmnachricht an die SQS Warteschlange weiter, die mit dem Verschlüsselungsschlüssel des AWS KMS Mandanten verschlüsselt wird.
Andere Systeme können in Amazon integriert werdenSQS, um Aktionen auf der Grundlage von Nachrichten in der Warteschlange durchzuführen. In diesem Beispiel bleiben eingehende Nachrichten in der Warteschlange und müssen manuell gelöscht werden, um den Code generisch zu halten.
Ablauf beim Löschen von Mandantenstapeln
Der Benutzer sendet eine DELETE API Anfrage mit der Nutzlast für neue Mandanten (Mandantenname, Mandantenbeschreibung) JSON an das von Amazon REST API gehostete API Gateway, das die Anfrage bearbeitet und an die Mandanten-Onboarding-Funktion weiterleitet. In diesem Beispiel gibt es keine Autorisierung oder Authentifizierung. In einem Produktionssetup API wird dies in das Sicherheitssystem der SaaS-Infrastruktur integriert.
Die Tenant-Onboarding-Funktion überprüft die Anfrage und versucht dann, den Mandantendatensatz (Mandantenname) aus der Tenant-Onboarding-Tabelle zu löschen.
Nachdem DynamoDB den Datensatz erfolgreich gelöscht hat (der Datensatz ist in der Tabelle vorhanden und wird gelöscht), initiiert ein DynamoDB-Stream die Downstream-Funktion Lambda Tenant Infrastructure.
Die Lambda-Funktion Tenant Infrastructure handelt auf der Grundlage des empfangenen DynamoDB-Stream-Datensatzes. Wenn der Stream für das REMOVE Ereignis bestimmt ist, verwendet die Funktion den OldImage Abschnitt des Datensatzes (Datensatzinformationen und Feld Mandantenname vor der letzten Änderung, d. h. Löschen), um das Löschen eines vorhandenen Stacks auf der Grundlage dieser Datensatzinformationen zu initiieren.
AWS CloudFormation löscht den Zielmandanten-Stack entsprechend der Eingabe.
Tools
AWSDienste
Amazon API Gateway unterstützt Sie bei der Erstellung, Veröffentlichung, Wartung, Überwachung und Sicherung REST — HTTP und das WebSocket APIs in jeder Größenordnung.
AWSCloud Development Kit (AWSCDK) ist ein Softwareentwicklungs-Framework, mit dem Sie AWS Cloud-Infrastruktur im Code definieren und bereitstellen können.
AWSCDKToolkit ist ein Befehlszeilen-Cloud-Entwicklungskit, mit dem Sie mit Ihrer AWS Cloud Development Kit (AWSCDK) -App interagieren können.
AWSCommand Line Interface (AWSCLI) ist ein Open-Source-Tool, mit dem Sie mithilfe von Befehlen in Ihrer Befehlszeilen-Shell mit AWS Diensten interagieren können.
AWS CloudFormationhilft Ihnen dabei, AWS Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus AWS konto- und regionsübergreifend zu verwalten.
Amazon DynamoDB ist ein vollständig verwalteter Service ohne SQL Datenbank, der eine schnelle, vorhersehbare und skalierbare Leistung bietet.
AWSMit Identity and Access Management (IAM) können Sie den Zugriff auf Ihre AWS Ressourcen sicher verwalten, indem Sie kontrollieren, wer authentifiziert und autorisiert ist, diese zu verwenden.
AWSMit dem Key Management Service (AWSKMS) können Sie kryptografische Schlüssel erstellen und kontrollieren, um Ihre Daten zu schützen.
AWSLambda ist ein Rechendienst, mit dem Sie Code ausführen können, ohne Server bereitstellen oder verwalten zu müssen. Er führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.
Amazon Simple Storage Service (Amazon S3) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.
Amazon Simple Notification Service (AmazonSNS) unterstützt Sie bei der Koordination und Verwaltung des Nachrichtenaustauschs zwischen Herausgebern und Kunden, einschließlich Webservern und E-Mail-Adressen.
Amazon Simple Queue Service (AmazonSQS) bietet eine sichere, dauerhafte und verfügbare gehostete Warteschlange, mit der Sie verteilte Softwaresysteme und -komponenten integrieren und entkoppeln können.
AWSToolkit for Visual Studio ist ein Plugin für die integrierte Entwicklungsumgebung von Visual Studio (IDE). Das Toolkit for Visual Studio unterstützt das Entwickeln, Debuggen und Bereitstellen. NETAnwendungen, die Dienste verwendenAWS.
Andere Tools
Visual Studio
umfasst CompilerIDE, Tools zur Codevervollständigung, Grafikdesigner und andere Funktionen, die die Softwareentwicklung unterstützen.
Code
Der Code für dieses Muster befindet sich im APGBeispiel-Repository Tenant Onboarding in SaaS Architecture for Silo Model
Epen
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Überprüfen Sie die Installation von Node.js. | Führen Sie den folgenden Befehl aus, um zu überprüfen, ob Node.js auf Ihrem lokalen Computer installiert ist.
| AWSAdministrator, AWS DevOps |
Installieren Sie das AWS CDK Toolkit. | Führen Sie den folgenden Befehl aus, um AWS CDK Toolkit auf Ihrem lokalen Computer zu installieren.
Wenn npm nicht installiert ist, können Sie es von der Site Node.js | AWSAdministrator, AWS DevOps |
Überprüfen Sie die AWS CDK Toolkit-Version. | Führen Sie den folgenden Befehl aus, um zu überprüfen, ob die AWS CDK Toolkit-Version korrekt auf Ihrem Computer installiert ist.
| AWSAdministrator, AWS DevOps |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Klonen Sie das Repository | Klonen Sie das Repository Öffnen Sie die Die folgenden Ressourcen werden als Teil dieses Stacks erstellt:
| AWSAdministrator, AWS DevOps |
Überprüfen Sie die CloudFormation Vorlage. | Öffnen Die Vorlage stellt die mandantenspezifische Infrastruktur bereit. In diesem Beispiel werden der AWS KMS Schlüssel, Amazon SNSSQS, Amazon und der CloudWatch Alarm bereitgestellt. | App-Entwickler, AWS DevOps |
Überprüfen Sie die Onboarding-Funktion für Mandanten. | Öffnen Öffnen Sie den Beachten Sie, dass die folgenden NuGet Pakete dem
| App-Entwickler, AWS DevOps |
Überprüfen Sie die InfraProvisioning Mandantenfunktion. | Navigieren Sie zu Öffnen Öffnen Sie den Beachten Sie, dass die folgenden NuGet Pakete dem
| App-Entwickler, AWS DevOps |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Erstellen Sie die Lösung. | Gehen Sie wie folgt vor, um die Lösung zu erstellen:
Hinweis: Stellen Sie sicher, dass Sie das | App-Developer |
Bootstrap für die AWS CDK Umgebung. | Öffnen Sie die Windows-Eingabeaufforderung und navigieren Sie zum Stammordner der AWS CDK App, in dem die
Wenn Sie ein AWS Profil für die Anmeldeinformationen erstellt haben, verwenden Sie den Befehl mit Ihrem Profil.
| AWSAdministrator, AWS DevOps |
Listet die AWS CDK Stapel auf. | Führen Sie den folgenden Befehl aus, um alle Stapel aufzulisten, die im Rahmen dieses Projekts erstellt werden sollen.
Wenn Sie ein AWS Profil für die Anmeldeinformationen erstellt haben, verwenden Sie den Befehl mit Ihrem Profil.
| AWSAdministrator, AWS DevOps |
Prüfen Sie, welche AWS Ressourcen erstellt werden. | Führen Sie den folgenden Befehl aus, um alle AWS Ressourcen zu überprüfen, die im Rahmen dieses Projekts erstellt werden.
Wenn Sie ein AWS Profil für die Anmeldeinformationen erstellt haben, verwenden Sie den Befehl mit Ihrem Profil.
| AWSAdministrator, AWS DevOps |
Stellen Sie alle AWS Ressourcen bereit, indem Sie AWS CDK | Führen Sie den folgenden Befehl aus, um alle AWS Ressourcen bereitzustellen.
Wenn Sie ein AWS Profil für die Anmeldeinformationen erstellt haben, verwenden Sie den Befehl mit Ihrem Profil.
Kopieren Sie nach Abschluss der Bereitstellung den Abschnitt API URL aus den Ausgaben in der Befehlszeile, der im folgenden Beispiel gezeigt wird.
| AWSAdministrator, AWS DevOps |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Erstellen Sie einen neuen Mandanten. | Um den neuen Mandanten zu erstellen, senden Sie die folgende Curl-Anfrage.
Ändern Sie den Platzhalter
Das folgende Beispiel zeigt die Ausgabe.
| App-Entwickler, AWS Administrator, AWS DevOps |
Überprüfen Sie die neu erstellten Mandantendetails in DynamoDB. | Gehen Sie wie folgt vor, um die neu erstellten Mandantendetails in DynamoDB zu überprüfen.
| App-Entwickler, AWS Administrator, AWS DevOps |
Überprüfen Sie die Stack-Erstellung für den neuen Mandanten. | Stellen Sie sicher, dass der neue Stack erfolgreich erstellt und mit der Infrastruktur für den neu erstellten Mandanten gemäß der CloudFormation Vorlage ausgestattet wurde.
| App-Entwickler, AWS Administrator, AWS DevOps |
Löschen Sie den Tenant-Stack. | Um den Tenant-Stack zu löschen, senden Sie die folgende Curl-Anfrage.
Ändern Sie den Platzhalter
Das folgende Beispiel zeigt die Ausgabe.
| App-Entwickler AWS DevOps, AWS Administrator |
Überprüfen Sie, ob der Stack für den vorhandenen Mandanten gelöscht wurde. | Gehen Sie wie folgt vor, um zu überprüfen, ob der vorhandene Mandanten-Stack gelöscht wurde:
| App-Entwickler, AWS Administrator, AWS DevOps |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Zerstöre die Umwelt. | Stellen Sie vor dem Aufräumen des Stacks Folgendes sicher:
AWSCDKKann nach Abschluss des Tests verwendet werden, um alle Stacks und die zugehörigen Ressourcen zu löschen, indem der folgende Befehl ausgeführt wird.
Wenn Sie ein AWS Profil für die Anmeldeinformationen erstellt haben, verwenden Sie das Profil. Bestätigen Sie die Aufforderung zum Löschen des Stacks, um den Stack zu löschen. | AWSAdministrator, AWS DevOps |
Bereinigen Sie Amazon CloudWatch Logs. | Beim Löschen des Stacks werden keine CloudWatch Protokolle (Protokollgruppen und Protokolle) bereinigt, die vom Stack generiert wurden. Bereinigen Sie die CloudWatch Ressourcen manuell mithilfe der CloudWatch Konsole oder derAPI. | App-Entwickler AWS DevOps, AWS Administrator |
Zugehörige Ressourcen
AWSCDK. NET
Werkstatt CDK. NETReferenz
Zusätzliche Informationen
Technologie-Stack für die Steuerungsebene
Der CDK Code, der eingeschrieben ist. NETwird verwendet, um die Infrastruktur der Steuerungsebene bereitzustellen, die aus den folgenden Ressourcen besteht:
APIGateway
Dient als REST API Einstiegspunkt für den Steuerebenen-Stack.
Lambda-Funktion für Mandanten-Onboarding
Diese Lambda-Funktion wird von API Gateway mit der m-Methode initiiert.
Eine POST API Methodenanforderung führt dazu, dass (
tenant name
,tenant description
) in die DynamoDB-TabelleTenant Onboarding
eingefügt wird.In diesem Codebeispiel wird der Mandantenname auch als Teil des Tenant-Stack-Namens und der Namen der Ressourcen innerhalb dieses Stacks verwendet. Dies soll die Identifizierung dieser Ressourcen erleichtern. Dieser Mandantenname muss in der gesamten Einrichtung eindeutig sein, um Konflikte oder Fehler zu vermeiden. Die detaillierte Einrichtung der Eingabevalidierung wird in der IAMRollendokumentation und im Abschnitt Einschränkungen erläutert.
Der Persistenzprozess für die DynamoDB-Tabelle ist nur erfolgreich, wenn der Mandantenname in keinem anderen Datensatz in der Tabelle verwendet wird.
Der Mandantenname ist in diesem Fall der Partitionsschlüssel für diese Tabelle, da nur der Partitionsschlüssel als Bedingungsausdruck verwendet werden kann.
PutItem
Wenn der Mandantenname noch nie zuvor aufgezeichnet wurde, wird der Datensatz erfolgreich in der Tabelle gespeichert.
Wenn der Mandantenname jedoch bereits von einem vorhandenen Datensatz in der Tabelle verwendet wird, schlägt der Vorgang fehl und löst eine DynamoDB-Ausnahme
ConditionalCheckFailedException
aus. Die Ausnahme wird verwendet, um eine Fehlermeldung (HTTP BadRequest
) zurückzugeben, die angibt, dass der Mandantenname bereits existiert.Eine
DELETE
API Methodenanforderung entfernt den Datensatz für einen bestimmten Mandantennamen aus derTenant Onboardin
G-Tabelle.Das Löschen von DynamoDB-Datensätzen in diesem Beispiel ist erfolgreich, auch wenn der Datensatz nicht existiert.
Wenn der Zieldatensatz existiert und gelöscht wird, wird ein DynamoDB-Stream-Datensatz erstellt. Andernfalls wird kein Downstream-Datensatz erstellt.
Einbindung von Mandanten in DynamoDB mit aktivierten Amazon DynamoDB DynamoDB-Streams
Dadurch werden die Metadateninformationen des Mandanten aufgezeichnet, und bei jedem Speichern oder Löschen von Datensätzen wird ein Stream flussabwärts an die
Tenant Infrastructure
Lambda-Funktion gesendet.Lambda-Funktion für Mandanteninfrastruktur
Diese Lambda-Funktion wird durch den DynamoDB-Stream-Datensatz aus dem vorherigen Schritt initiiert. Wenn sich der Datensatz auf ein
INSERT
Ereignis bezieht, wird er aufgerufen, AWS CloudFormation um eine neue Mandanteninfrastruktur mit der CloudFormation Vorlage zu erstellen, die in einem S3-Bucket gespeichert ist. Wenn der Datensatz für istREMOVE
, initiiert er das Löschen eines vorhandenen Stacks auf der Grundlage des FeldsTenant Name
des Stream-Datensatzes.S3 bucket
Dies dient zum Speichern der CloudFormation Vorlage.
IAMRollen für jede Lambda-Funktion und eine Servicerolle für CloudFormation
Jede Lambda-Funktion hat ihre eigene IAM Rolle mit den geringsten Rechten, um ihre Aufgabe zu erfüllen. Die
Tenant On-boarding
Lambda-Funktion hat beispielsweise Lese-/Schreibzugriff auf DynamoDB, und dieTenant Infrastructure
Lambda-Funktion kann nur den DynamoDB-Stream lesen.Eine benutzerdefinierte CloudFormation Servicerolle wird für die Bereitstellung von Mandanten-Stacks erstellt. Diese Servicerolle enthält zusätzliche Berechtigungen für die CloudFormation Stack-Bereitstellung (z. B. den AWS KMS Schlüssel). Dadurch werden Rollen zwischen Lambda aufgeteilt und alle Berechtigungen CloudFormation für eine einzelne Rolle (Infrastructure Lambda-Rolle) vermieden.
Berechtigungen, die leistungsstarke Aktionen (wie das Erstellen und Löschen von CloudFormation Stacks) ermöglichen, sind gesperrt und nur für Ressourcen zulässig, die mit beginnen.
tenantcluster-
Die Ausnahme liegt AWS KMS in der Benennungskonvention für Ressourcen. Dem aufgenommenen Mandantennamen von API werdentenantcluster-
zusammen mit anderen Validierungsprüfungen vorangestellt (nur alphanumerisch mit Bindestrich und begrenzt auf weniger als 30 Zeichen, um in die meisten AWS Ressourcenbenennungen zu passen). Dadurch wird sichergestellt, dass der Mandantenname nicht versehentlich zu einer Störung der Stacks oder Ressourcen der Kerninfrastruktur führt.
Technologie-Stack für Mandanten
Eine CloudFormation Vorlage wird im S3-Bucket gespeichert. Die Vorlage stellt den mandantenspezifischen AWS KMS Schlüssel, einen CloudWatch Alarm, ein SNS Thema, eine SQS Warteschlange und eine SQS Richtlinie bereit.
Der AWS KMS Schlüssel wird von Amazon SNS und Amazon SQS für die Datenverschlüsselung ihrer Nachrichten verwendet. Die Sicherheitspraktiken für AwsSolutions— SNS2 und AwsSolutions — SQS2
Die SQS Richtlinie wird in der SQS Amazon-Warteschlange verwendet, damit das erstellte SNS Thema die Nachricht an die Warteschlange weiterleiten kann. Ohne die SQS Richtlinie wird der Zugriff verweigert. Weitere Informationen finden Sie in der SNSAmazon-Dokumentation.