

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.

# Erstellen Sie eine serverlose Architektur mit mehreren Mandanten in Amazon Service OpenSearch
<a name="build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service"></a>

*Tabby Ward und Nisha Gambhir, Amazon Web Services*

## Zusammenfassung
<a name="build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service-summary"></a>

Amazon OpenSearch Service ist ein verwalteter Service, der die Bereitstellung, den Betrieb und die Skalierung von Elasticsearch, einer beliebten Open-Source-Such- und Analyse-Engine, vereinfacht. OpenSearch Der Service bietet eine Freitextsuche sowie die Erfassung und das Dashboarding von Streaming-Daten wie Logs und Metriken nahezu in Echtzeit. 

Anbieter von Software as a Service (SaaS) nutzen OpenSearch Service häufig, um eine Vielzahl von Anwendungsfällen abzudecken, z. B. um Kundeninformationen auf skalierbare und sichere Weise zu gewinnen und gleichzeitig Komplexität und Ausfallzeiten zu reduzieren.

Die Verwendung von OpenSearch Service in einer Umgebung mit mehreren Mandanten bringt eine Reihe von Überlegungen mit sich, die sich auf die Partitionierung, Isolierung, Bereitstellung und Verwaltung Ihrer SaaS-Lösung auswirken. SaaS-Anbieter müssen überlegen, wie sie ihre Elasticsearch-Cluster bei sich ständig ändernden Workloads effektiv skalieren können. Sie müssen auch berücksichtigen, wie sich Stufenbildung und laute Nachbarschaftsbedingungen auf ihr Partitionierungsmodell auswirken könnten.

In diesem Muster werden die Modelle untersucht, die zur Darstellung und Isolierung von Mandantendaten mit Elasticsearch-Konstrukten verwendet werden. Darüber hinaus konzentriert sich das Muster auf eine einfache serverlose Referenzarchitektur als Beispiel, um die Indizierung und Suche mithilfe von OpenSearch Service in einer Umgebung mit mehreren Mandanten zu demonstrieren. Es implementiert das Pool-Datenpartitionierungsmodell, das denselben Index für alle Mandanten verwendet und gleichzeitig die Datenisolierung eines Mandanten gewährleistet. Dieses Muster verwendet die folgenden AWS Dienste: Amazon API Gateway AWS Lambda, Amazon Simple Storage Service (Amazon S3) und OpenSearch Service.

Weitere Informationen zum Poolmodell und anderen Datenpartitionierungsmodellen finden Sie im Abschnitt [Zusätzliche Informationen](#build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service-additional).

## Voraussetzungen und Einschränkungen
<a name="build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service-prereqs"></a>

**Voraussetzungen**
+ Ein aktiver AWS-Konto
+ [AWS Command Line Interface (AWS CLI) Version 2.x](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html), installiert und konfiguriert auf macOS, Linux oder Windows
+ [Python-Version 3.9](https://www.python.org/downloads/release/python-3921/)
+ [pip3](https://pip.pypa.io/en/stable/) — Der Python-Quellcode wird als ZIP-Datei bereitgestellt, die in einer Lambda-Funktion bereitgestellt wird. Wenn Sie den Code lokal verwenden oder anpassen möchten, gehen Sie wie folgt vor, um den Quellcode zu entwickeln und neu zu kompilieren:

  1. Generieren Sie die `requirements.txt` Datei, indem Sie den folgenden Befehl im selben Verzeichnis wie die Python-Skripte ausführen: `pip3 freeze > requirements.txt`

  1. Installieren Sie die Abhängigkeiten: `pip3 install -r requirements.txt`

**Einschränkungen**
+ Dieser Code läuft in Python und unterstützt derzeit keine anderen Programmiersprachen. 
+ Die Beispielanwendung bietet keine AWS regionsübergreifende Unterstützung oder Unterstützung für Disaster Recovery (DR). 
+ Dieses Muster dient nur zu Demonstrationszwecken. Es ist nicht für die Verwendung in einer Produktionsumgebung vorgesehen.

## Architektur
<a name="build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service-architecture"></a>

Das folgende Diagramm veranschaulicht die allgemeine Architektur dieses Musters. Die Architektur umfasst Folgendes:
+ Lambda zum Indizieren und Abfragen des Inhalts 
+ OpenSearch Dienst zur Durchführung der Suche 
+ API Gateway zur Bereitstellung einer API-Interaktion mit dem Benutzer
+ Amazon S3 zum Speichern von Rohdaten (nicht indexiert)
+ Amazon CloudWatch zur Überwachung von Protokollen
+ AWS Identity and Access Management (IAM), um Mandantenrollen und Richtlinien zu erstellen

![Serverlose Mehrmandanten-Architektur auf hohem Niveau.](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/750196bb-03f6-4b6e-92cd-eb7141602547/images/1a8501e7-0776-4aca-aed3-28e3ada1d15d.png)


**Automatisierung und Skalierung**

Der Einfachheit halber wird das Muster für AWS CLI die Bereitstellung der Infrastruktur und für die Bereitstellung des Beispielcodes verwendet. Sie können eine CloudFormation Vorlage oder AWS Cloud Development Kit (AWS CDK) Skripts erstellen, um das Muster zu automatisieren.

## Tools
<a name="build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service-tools"></a>

**AWS-Services**
+ [AWS CLI](https://aws.amazon.com/cli/)ist ein einheitliches Tool zur Verwaltung AWS-Services von Ressourcen mithilfe von Befehlen in Ihrer Befehlszeilen-Shell.
+ [Lambda](https://aws.amazon.com/lambda/) ist ein Rechendienst, mit dem Sie Code ausführen können, ohne Server bereitzustellen oder zu verwalten. Lambda führt Ihren Code nur bei Bedarf aus und skaliert automatisch – von einigen Anforderungen pro Tag bis zu Tausenden pro Sekunde.
+ [API Gateway](https://aws.amazon.com/api-gateway/) dient AWS-Service zum Erstellen, Veröffentlichen, Verwalten, Überwachen und Sichern von REST, HTTP und WebSocket APIs in jeder Größenordnung.
+ [Amazon S3](https://aws.amazon.com/s3/) ist ein Objektspeicherservice, mit dem Sie jederzeit und von überall im Internet eine beliebige Menge an Informationen speichern und abrufen können.
+ [OpenSearch Service](https://aws.amazon.com/opensearch-service/) ist ein vollständig verwalteter Service, der es Ihnen leicht macht, Elasticsearch kostengünstig und skalierbar bereitzustellen, zu sichern und auszuführen.

**Code**

Der Anhang enthält Beispieldateien für dieses Muster. Dazu zählen:
+ `index_lambda_package.zip`— Die Lambda-Funktion für die Indizierung von Daten im OpenSearch Service mithilfe des Poolmodells.
+ `search_lambda_package.zip`— Die Lambda-Funktion für die Suche nach Daten im OpenSearch Service.
+ `Tenant-1-data`— Beispiel für Rohdaten (nicht indexiert) für Tenant-1.
+ `Tenant-2-data`— Stichprobe von Rohdaten (nicht indexiert) für Tenant-2.

**Wichtig**  
Die Geschichten in diesem Muster enthalten AWS CLI Befehlsbeispiele, die für Unix, Linux und macOS formatiert sind. Ersetzen Sie unter Windows den umgekehrten Schrägstrich (\\), das Unix-Fortsetzungszeichen, am Ende jeder Zeile durch ein Caret-Zeichen oder Zirkumflex (^).

**Anmerkung**  
Ersetzen Sie in AWS CLI Befehlen alle Werte in den spitzen Klammern (<>) durch korrekte Werte.

## Epen
<a name="build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service-epics"></a>

### Erstellen und konfigurieren Sie einen S3-Bucket
<a name="create-and-configure-an-s3-bucket"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen S3-Bucket. | Erstellen Sie einen S3-Bucket in Ihrem AWS-Region. Dieser Bucket enthält die nicht indizierten Mandantendaten für die Beispielanwendung. Stellen Sie sicher, dass der Name des S3-Buckets global eindeutig ist, da der Namespace von allen gemeinsam genutzt wird. AWS-Konten<br />Um einen S3-Bucket zu erstellen, können Sie den Befehl AWS CLI [create-bucket](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/create-bucket.html) wie folgt verwenden:<pre>aws s3api create-bucket \<br />  --bucket <tenantrawdata> \<br />  --region <your-AWS-Region></pre><br />wo `tenantrawdata` ist der Name des S3-Buckets. (Sie können jeden eindeutigen Namen verwenden, [der den Richtlinien zur Benennung von Buckets entspricht](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html).) | Cloud-Architekt, Cloud-Administrator | 

### Erstellen und konfigurieren Sie einen Elasticsearch-Cluster
<a name="create-and-configure-an-elasticsearch-cluster"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine OpenSearch Dienstdomäne. | Führen Sie den AWS CLI [create-elasticsearch-domain](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/es/create-elasticsearch-domain.html)Befehl aus, um eine OpenSearch Dienstdomäne zu erstellen:<pre>aws es create-elasticsearch-domain \<br />  --domain-name vpc-cli-example \<br />  --elasticsearch-version 7.10 \<br />  --elasticsearch-cluster-config InstanceType=t3.medium.elasticsearch,InstanceCount=1 \<br />  --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=10 \<br />  --domain-endpoint-options "{\"EnforceHTTPS\": true}" \<br />  --encryption-at-rest-options "{\"Enabled\": true}" \<br />  --node-to-node-encryption-options "{\"Enabled\": true}" \<br />  --advanced-security-options "{\"Enabled\": true, \"InternalUserDatabaseEnabled\": true, \<br />    \"MasterUserOptions\": {\"MasterUserName\": \"KibanaUser\", \<br />    \"MasterUserPassword\": \"NewKibanaPassword@123\"}}" \<br />  --vpc-options "{\"SubnetIds\": [\"<subnet-id>\"], \"SecurityGroupIds\": [\"<sg-id>\"]}" \<br />  --access-policies "{\"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \ <br />    \"Principal\": {\"AWS\": \"*\" }, \"Action\":\"es:*\", \<br />    \"Resource\": \"arn:aws:es:<region>:<account-id>:domain\/vpc-cli-example\/*\" } ] }"</pre><br />Die Anzahl der Instanzen ist auf 1 gesetzt, da die Domäne zu Testzwecken dient. Sie müssen mithilfe des `advanced-security-options` Parameters eine differenzierte Zugriffskontrolle aktivieren, da die Details nach der Erstellung der Domäne nicht mehr geändert werden können. <br />Dieser Befehl erstellt einen Master-Benutzernamen (`KibanaUser`) und ein Passwort, mit denen Sie sich bei der Kibana-Konsole anmelden können.<br />Da die Domain Teil einer Virtual Private Cloud (VPC) ist, müssen Sie sicherstellen, dass Sie die Elasticsearch-Instanz erreichen können, indem Sie die zu verwendende Zugriffsrichtlinie angeben.<br />Weitere Informationen finden Sie in der AWS Dokumentation unter [Starten Ihrer Amazon OpenSearch Service-Domains innerhalb einer VPC](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-vpc.html). | Cloud-Architekt, Cloud-Administrator | 
| Richten Sie einen Bastion-Host ein. | Richten Sie eine Amazon Elastic Compute Cloud (Amazon EC2) Windows-Instance als Bastion-Host für den Zugriff auf die Kibana-Konsole ein. Die Elasticsearch-Sicherheitsgruppe muss Datenverkehr von der EC2 Amazon-Sicherheitsgruppe zulassen. Eine Anleitung finden Sie im Blogbeitrag [Controlling Network Access to EC2 Instances Using a Bastion Server.](https://aws.amazon.com/blogs/security/controlling-network-access-to-ec2-instances-using-a-bastion-server/)<br />Wenn der Bastion-Host eingerichtet wurde und Sie die Sicherheitsgruppe, die der Instance zugeordnet ist, verfügbar haben, verwenden Sie den AWS CLI [authorize-security-group-ingress](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/authorize-security-group-ingress.html)Befehl, um der Elasticsearch-Sicherheitsgruppe die Erlaubnis hinzuzufügen, Port 443 von der Amazon-Sicherheitsgruppe EC2 (Bastion Host) zuzulassen.<pre>aws ec2 authorize-security-group-ingress \<br />  --group-id <SecurityGroupIdfElasticSearch> \ <br />  --protocol tcp \<br />  --port 443 \<br />  --source-group <SecurityGroupIdfBashionHostEC2></pre> | Cloud-Architekt, Cloud-Administrator | 

### Erstellen und konfigurieren Sie die Lambda-Index-Funktion
<a name="create-and-configure-the-lam-index-function"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie die Lambda-Ausführungsrolle. | Führen Sie den Befehl AWS CLI [create-role](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-role.html) aus, um der Lambda-Indexfunktion Zugriff auf und Ressourcen zu AWS-Services gewähren:<pre>aws iam create-role \<br />  --role-name index-lambda-role \<br />  --assume-role-policy-document file://lambda_assume_role.json</pre><br />wo `lambda_assume_role.json` ist ein JSON-Dokument, das der Lambda-Funktion wie folgt `AssumeRole` Berechtigungen gewährt:<pre>{<br />     "Version": "2012-10-17",		 	 	 <br />     "Statement": [<br />         {<br />             "Effect": "Allow",<br />             "Principal": {<br />                 "Service": "lambda.amazonaws.com"<br />               },<br />             "Action": "sts:AssumeRole"<br />         }<br />     ]<br /> }</pre> | Cloud-Architekt, Cloud-Administrator | 
| Hängen Sie verwaltete Richtlinien an die Lambda-Rolle an. | Führen Sie den AWS CLI [attach-role-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/attach-role-policy.html)Befehl aus, um verwaltete Richtlinien an die im vorherigen Schritt erstellte Rolle anzuhängen. Diese beiden Richtlinien gewähren der Rolle Berechtigungen zum Erstellen einer elastic network interface und zum Schreiben von Protokollen in CloudWatch Logs.<pre>aws iam attach-role-policy \<br />  --role-name index-lambda-role \<br />  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole<br /><br />aws iam attach-role-policy \<br />  --role-name index-lambda-role \<br />  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole </pre> | Cloud-Architekt, Cloud-Administrator | 
| Erstellen Sie eine Richtlinie, um der Lambda-Indexfunktion die Berechtigung zum Lesen der S3-Objekte zu erteilen. | Führen Sie den Befehl AWS CLI [create-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-policy.html) aus, um der Lambda-Indexfunktion die `s3:GetObject` Erlaubnis zu erteilen, die Objekte im S3-Bucket zu lesen:<pre>aws iam create-policy \<br />  --policy-name s3-permission-policy \<br />  --policy-document file://s3-policy.json</pre><br />Bei der Datei `s3-policy.json` handelt es sich um ein unten gezeigtes JSON-Dokument, das `s3:GetObject` Berechtigungen für den Lesezugriff auf S3-Objekte gewährt. Wenn Sie bei der Erstellung des S3-Buckets einen anderen Namen verwendet haben, geben Sie im `Resource ` Abschnitt den richtigen Bucket-Namen an:<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />           "Effect": "Allow",<br />           "Action": "s3:GetObject",<br />           "Resource": "arn:aws:s3:::<tenantrawdata>/*"<br />        }<br />    ]<br />}</pre> | Cloud-Architekt, Cloud-Administrator | 
| Hängen Sie die Amazon S3 S3-Berechtigungsrichtlinie an die Lambda-Ausführungsrolle an. | Führen Sie den AWS CLI [attach-role-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/attach-role-policy.html)Befehl aus, um die Amazon S3 S3-Berechtigungsrichtlinie, die Sie im vorherigen Schritt erstellt haben, an die Lambda-Ausführungsrolle anzuhängen:<pre>aws iam attach-role-policy \<br />  --role-name index-lambda-role \<br />  --policy-arn <PolicyARN></pre><br />wo `PolicyARN` ist der Amazon-Ressourcenname (ARN) der Amazon S3-Genehmigungsrichtlinie. Sie können diesen Wert aus der Ausgabe des vorherigen Befehls abrufen. | Cloud-Architekt, Cloud-Administrator | 
| Erstellen Sie die Lambda-Index-Funktion. | Führen Sie den Befehl AWS CLI [create-function](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-function.html) aus, um die Lambda-Indexfunktion zu erstellen, die auf Service zugreift: OpenSearch <pre>aws lambda create-function \<br />  --function-name index-lambda-function \<br />  --zip-file fileb://index_lambda_package.zip \<br />  --handler lambda_index.lambda_handler \<br />  --runtime python3.9 \<br />  --role "arn:aws:iam::account-id:role/index-lambda-role" \<br />  --timeout 30 \<br />  --vpc-config "{\"SubnetIds\": [\"<subnet-id1\>", \"<subnet-id2>\"], \<br />    \"SecurityGroupIds\": [\"<sg-1>\"]}"</pre> | Cloud-Architekt, Cloud-Administrator | 
| Erlauben Sie Amazon S3, die Lambda-Index-Funktion aufzurufen. | Führen Sie den Befehl AWS CLI [add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) aus, um Amazon S3 die Erlaubnis zu erteilen, die Lambda-Index-Funktion aufzurufen:<pre>aws lambda add-permission \<br />  --function-name index-lambda-function \<br />  --statement-id s3-permissions \<br />  --action lambda:InvokeFunction \<br />  --principal s3.amazonaws.com \<br />  --source-arn "arn:aws:s3:::<tenantrawdata>" \<br />  --source-account "<account-id>" </pre> | Cloud-Architekt, Cloud-Administrator | 
| Fügen Sie einen Lambda-Trigger für das Amazon S3 S3-Ereignis hinzu. | Führen Sie den AWS CLI [put-bucket-notification-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-notification-configuration.html)Befehl aus, um Benachrichtigungen an die Lambda-Indexfunktion zu senden, wenn das Amazon S3 `ObjectCreated` S3-Ereignis erkannt wird. Die Indexfunktion wird immer dann ausgeführt, wenn ein Objekt in den S3-Bucket hochgeladen wird. <pre>aws s3api put-bucket-notification-configuration \<br />  --bucket <tenantrawdata> \<br />  --notification-configuration file://s3-trigger.json</pre><br />Die Datei `s3-trigger.json` ist ein JSON-Dokument im aktuellen Ordner, das die Ressourcenrichtlinie zur Lambda-Funktion hinzufügt, wenn das Amazon S3 `ObjectCreated` S3-Ereignis eintritt. | Cloud-Architekt, Cloud-Administrator | 

### Lambda-Suchfunktion erstellen und konfigurieren
<a name="create-and-configure-the-lam-search-function"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie die Lambda-Ausführungsrolle. | Führen Sie den Befehl AWS CLI [create-role](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-role.html) aus, um der Lambda-Suchfunktion Zugriff auf und Ressourcen zu AWS-Services gewähren:<pre>aws iam create-role \<br />  --role-name search-lambda-role \<br />  --assume-role-policy-document file://lambda_assume_role.json</pre><br />wo `lambda_assume_role.json` befindet sich ein JSON-Dokument im aktuellen Ordner, das der Lambda-Funktion wie folgt `AssumeRole` Berechtigungen gewährt:<pre>{<br />     "Version": "2012-10-17",		 	 	 <br />     "Statement": [<br />         {<br />             "Effect": "Allow",<br />             "Principal": {<br />                 "Service": "lambda.amazonaws.com"<br />               },<br />             "Action": "sts:AssumeRole"<br />         }<br />     ]<br /> }</pre> | Cloud-Architekt, Cloud-Administrator | 
| Hängen Sie verwaltete Richtlinien an die Lambda-Rolle an. | Führen Sie den AWS CLI [attach-role-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/attach-role-policy.html)Befehl aus, um verwaltete Richtlinien an die im vorherigen Schritt erstellte Rolle anzuhängen. Diese beiden Richtlinien gewähren der Rolle Berechtigungen zum Erstellen einer elastic network interface und zum Schreiben von Protokollen in CloudWatch Logs.<pre>aws iam attach-role-policy \<br />  --role-name search-lambda-role \<br />  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole<br /><br />aws iam attach-role-policy \<br />  --role-name search-lambda-role \<br />  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole </pre> | Cloud-Architekt, Cloud-Administrator | 
| Erstellen Sie die Lambda-Suchfunktion. | Führen Sie den Befehl AWS CLI [create-function](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-function.html) aus, um die Lambda-Suchfunktion zu erstellen, die auf Service zugreift: OpenSearch <pre>aws lambda create-function \<br />  --function-name search-lambda-function \<br />  --zip-file fileb://search_lambda_package.zip \<br />  --handler lambda_search.lambda_handler \<br />  --runtime python3.9 \<br />  --role "arn:aws:iam::account-id:role/search-lambda-role" \<br />  --timeout 30 \<br />  --vpc-config "{\"SubnetIds\": [\"<subnet-id1\>", \"<subnet-id2>\"], \<br />    \"SecurityGroupIds\": [\"<sg-1>\"]}"</pre> | Cloud-Architekt, Cloud-Administrator | 

### Mandantenrollen erstellen und konfigurieren
<a name="create-and-configure-tenant-roles"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie Mandanten-IAM-Rollen. | Führen Sie den Befehl AWS CLI [create-role](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-role.html) aus, um zwei Mandantenrollen zu erstellen, die zum Testen der Suchfunktion verwendet werden:<pre>aws iam create-role \<br />  --role-name Tenant-1-role \<br />  --assume-role-policy-document file://assume-role-policy.json</pre><pre>aws iam create-role \<br />  --role-name Tenant-2-role \<br />  --assume-role-policy-document file://assume-role-policy.json</pre><br />Die Datei `assume-role-policy.json` ist ein JSON-Dokument im aktuellen Ordner, das der Lambda-Ausführungsrolle `AssumeRole` Berechtigungen gewährt:<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Principal": {<br />                 "AWS": "<Lambda execution role for index function>",<br />                 "AWS": "<Lambda execution role for search function>"<br />             },<br />            "Action": "sts:AssumeRole"<br />        }<br />    ]<br />}</pre> | Cloud-Architekt, Cloud-Administrator | 
| Erstellen Sie eine IAM-Richtlinie für Mandanten. | Führen Sie den Befehl AWS CLI [create-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-policy.html) aus, um eine Mandantenrichtlinie zu erstellen, die Zugriff auf Elasticsearch-Operationen gewährt:<pre>aws iam create-policy \<br />  --policy-name tenant-policy \<br />  --policy-document file://policy.json</pre><br />Die Datei `policy.json` ist ein JSON-Dokument im aktuellen Ordner, das Berechtigungen für Elasticsearch gewährt:<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": [<br />                "es:ESHttpDelete",<br />                "es:ESHttpGet",<br />                "es:ESHttpHead",<br />                "es:ESHttpPost",<br />                "es:ESHttpPut",<br />                "es:ESHttpPatch"<br />            ],<br />            "Resource": [<br />                "<ARN of Elasticsearch domain created earlier>"<br />            ]<br />        }<br />    ]<br />}</pre> | Cloud-Architekt, Cloud-Administrator | 
| Hängen Sie die Mandanten-IAM-Richtlinie an die Mandantenrollen an. | Führen Sie den AWS CLI [attach-role-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/attach-role-policy.html)Befehl aus, um die Mandanten-IAM-Richtlinie an die beiden Mandantenrollen anzuhängen, die Sie im vorherigen Schritt erstellt haben:<pre>aws iam attach-role-policy \<br />  --policy-arn arn:aws:iam::account-id:policy/tenant-policy \<br />  --role-name Tenant-1-role<br /><br />aws iam attach-role-policy \<br />  --policy-arn arn:aws:iam::account-id:policy/tenant-policy \<br />  --role-name Tenant-2-role</pre><br />Der Richtlinien-ARN stammt aus der Ausgabe des vorherigen Schritts. | Cloud-Architekt, Cloud-Administrator | 
| Erstellen Sie eine IAM-Richtlinie, um Lambda Berechtigungen zur Übernahme einer Rolle zu erteilen. | Führen Sie den Befehl AWS CLI [create-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-policy.html) aus, um eine Richtlinie zu erstellen, damit Lambda die Mandantenrolle übernimmt:<pre>aws iam create-policy \<br />  --policy-name assume-tenant-role-policy \<br />  --policy-document file://lambda_policy.json</pre><br />Die Datei `lambda_policy.json` ist ein JSON-Dokument im aktuellen Ordner, das Berechtigungen gewährt für: `AssumeRole`<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />       {<br />            "Effect": "Allow",<br />            "Action":  "sts:AssumeRole",<br />            "Resource": "<ARN of tenant role created earlier>"<br />       }<br />    ]<br />}</pre><br />Denn Sie können ein Platzhalterzeichen verwenden`Resource`, um zu vermeiden, dass für jeden Mandanten eine neue Richtlinie erstellt wird. | Cloud-Architekt, Cloud-Administrator | 
| Erstellen Sie eine IAM-Richtlinie, um der Lambda-Indexrolle Zugriff auf Amazon S3 zu gewähren. | Führen Sie den Befehl AWS CLI [create-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-policy.html) aus, um der Lambda-Indexrolle die Erlaubnis zu erteilen, auf die Objekte im S3-Bucket zuzugreifen:<pre>aws iam create-policy \<br />  --policy-name s3-permission-policy \<br />  --policy-document file://s3_lambda_policy.json</pre><br />Bei der Datei `s3_lambda_policy.json` handelt es sich um das folgende JSON-Richtliniendokument im aktuellen Ordner:<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": "s3:GetObject",<br />            "Resource": "arn:aws:s3:::tenantrawdata/*"<br />        }<br />    ]<br />}</pre> | Cloud-Architekt, Cloud-Administrator | 
| Hängen Sie die Richtlinie an die Lambda-Ausführungsrolle an. | Führen Sie den AWS CLI [attach-role-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/attach-role-policy.html)Befehl aus, um die im vorherigen Schritt erstellte Richtlinie an die zuvor erstellten Lambda-Index- und Suchausführungsrollen anzuhängen:<pre>aws iam attach-role-policy \<br />  --policy-arn arn:aws:iam::account-id:policy/assume-tenant-role-policy \<br />  --role-name index-lambda-role<br /><br />aws iam attach-role-policy \<br />  --policy-arn arn:aws:iam::account-id:policy/assume-tenant-role-policy \<br />  --role-name search-lambda-role<br /><br />aws iam attach-role-policy \<br />  --policy-arn arn:aws:iam::account-id:policy/s3-permission-policy \<br />  --role-name index-lambda-role</pre><br />Der Richtlinien-ARN stammt aus der Ausgabe des vorherigen Schritts. | Cloud-Architekt, Cloud-Administrator | 

### Erstellen und konfigurieren Sie eine Such-API
<a name="create-and-configure-a-search-api"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine REST-API in API Gateway. | Führen Sie den AWS CLI [create-rest-api](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/apigateway/create-rest-api.html)Befehl aus, um eine REST-API-Ressource zu erstellen:<pre>aws apigateway create-rest-api \<br />  --name Test-Api \<br />  --endpoint-configuration "{ \"types\": [\"REGIONAL\"] }"</pre><br />Für den Endpunkt-Konfigurationstyp können Sie angeben, `REGIONAL` dass `EDGE` anstelle eines bestimmten Kantenstandorts verwendet werden soll AWS-Region.<br />Notieren Sie sich den Wert des `id` Felds aus der Befehlsausgabe. Dies ist die API-ID, die Sie in nachfolgenden Befehlen verwenden werden. | Cloud-Architekt, Cloud-Administrator | 
| Erstellen Sie eine Ressource für die Such-API. | Die Such-API-Ressource startet die Lambda-Suchfunktion mit dem Ressourcennamen`search`. (Sie müssen keine API für die Lambda-Indexfunktion erstellen, da sie automatisch ausgeführt wird, wenn Objekte in den S3-Bucket hochgeladen werden.)[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.html) | Cloud-Architekt, Cloud-Administrator | 
| Erstellen Sie eine GET-Methode für die Such-API. | Führen Sie den Befehl AWS CLI [put-method](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/apigateway/put-method.html) aus, um eine `GET ` Methode für die Such-API zu erstellen:<pre>aws apigateway put-method \<br />  --rest-api-id <API-ID> \<br />  --resource-id <ID from the previous command output> \<br />  --http-method GET \<br />  --authorization-type "NONE" \<br />  --no-api-key-required</pre><br />Geben Sie für `resource-id` die ID aus der Ausgabe des `create-resource` Befehls an. | Cloud-Architekt, Cloud-Administrator | 
| Erstellen Sie eine Methodenantwort für die Such-API. | Führen Sie den AWS CLI [put-method-response](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/apigateway/put-method-response.html)Befehl aus, um eine Methodenantwort für die Such-API hinzuzufügen:<pre>aws apigateway put-method-response \<br />  --rest-api-id <API-ID> \<br />  --resource-id  <ID from the create-resource command output> \<br />  --http-method GET \<br />  --status-code 200 \<br />  --response-models "{\"application/json\": \"Empty\"}"</pre><br />Geben Sie für `resource-id` die ID aus der Ausgabe des vorherigen `create-resource` Befehls an. | Cloud-Architekt, Cloud-Administrator | 
| Richten Sie eine Proxy-Lambda-Integration für die Such-API ein. | Führen Sie den Befehl AWS CLI [put-integration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/apigateway/put-integration.html) aus, um eine Integration mit der Lambda-Suchfunktion einzurichten:<pre>aws apigateway put-integration \<br />  --rest-api-id <API-ID> \<br />  --resource-id  <ID from the create-resource command output> \<br />  --http-method GET \<br />  --type AWS_PROXY \<br />  --integration-http-method GET \<br />  --uri arn:aws:apigateway:region:lambda:path/2015-03-31/functions/arn:aws:lambda:<region>:<account-id>:function:<function-name>/invocations</pre><br />Geben Sie für `resource-id` die ID aus dem vorherigen Befehl an. `create-resource` | Cloud-Architekt, Cloud-Administrator | 
| Erteilen Sie API Gateway die Erlaubnis, die Lambda-Suchfunktion aufzurufen. | Führen Sie den Befehl AWS CLI [add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) aus, um API Gateway die Erlaubnis zu erteilen, die Suchfunktion zu verwenden:<pre>aws lambda add-permission \<br />  --function-name <function-name> \<br />  --statement-id apigateway-get \<br />  --action lambda:InvokeFunction \<br />  --principal apigateway.amazonaws.com \<br />  --source-arn "arn:aws:execute-api:<region>:<account-id>:api-id/*/GET/search</pre><br />Ändern Sie den `source-arn` Pfad, wenn Sie anstelle von `search` einen anderen API-Ressourcennamen verwendet haben. | Cloud-Architekt, Cloud-Administrator | 
| Stellen Sie die Such-API bereit. | Führen Sie den Befehl AWS CLI [create-deployment](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/apigateway/create-deployment.html) aus, um eine Staging-Ressource mit dem Namen zu erstellen: `dev`<pre>aws apigateway create-deployment \<br />  --rest-api-id <API-ID> \<br />  --stage-name dev</pre><br />Wenn Sie die API aktualisieren, können Sie sie mit demselben AWS CLI Befehl erneut in derselben Phase bereitstellen. | Cloud-Architekt, Cloud-Administrator | 

### Kibana-Rollen erstellen und konfigurieren
<a name="create-and-configure-kibana-roles"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Loggen Sie sich in die Kibana-Konsole ein. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.html) | Cloud-Architekt, Cloud-Administrator | 
| Erstellen und konfigurieren Sie Kibana-Rollen. | Um Daten zu isolieren und sicherzustellen, dass ein Mandant die Daten eines anderen Mandanten nicht abrufen kann, müssen Sie Document Security verwenden, sodass Mandanten nur auf Dokumente zugreifen können, die ihre Mandanten-ID enthalten.[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.html) | Cloud-Architekt, Cloud-Administrator | 
| Ordnen Sie Benutzer Rollen zu. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.html)Wir empfehlen Ihnen, die Erstellung der Mandanten- und Kibana-Rollen beim Onboarding des Mandanten zu automatisieren. | Cloud-Architekt, Cloud-Administrator | 
| Erstellen Sie den Mieterdatenindex. | Wählen Sie im Navigationsbereich unter **Verwaltung** die Option **Dev Tools** aus, und führen Sie dann den folgenden Befehl aus. Mit diesem Befehl wird der `tenant-data` Index erstellt, um die Zuordnung für die `TenantId` Eigenschaft zu definieren.<pre>PUT /tenant-data<br />{<br />  "mappings": {<br />    "properties": {<br />      "TenantId": { "type": "keyword"}<br />    }<br />  }<br />}</pre> | Cloud-Architekt, Cloud-Administrator | 

### VPC-Endpunkte für Amazon S3 erstellen und AWS STS
<a name="create-vpc-endpoints-for-s3-and-sts"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie einen VPC-Endpunkt für Amazon S3. | Führen Sie den AWS CLI [create-vpc-endpoint](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-vpc-endpoint.html)Befehl aus, um einen VPC-Endpunkt für Amazon S3 zu erstellen. Der Endpunkt ermöglicht der Lambda-Index-Funktion in der VPC den Zugriff auf Amazon S3.<pre>aws ec2 create-vpc-endpoint \<br />  --vpc-id <VPC-ID> \<br />  --service-name com.amazonaws.us-east-1.s3 \<br />  --route-table-ids <route-table-ID></pre><br />Geben Sie für `vpc-id` die VPC an, die Sie für die Lambda-Indexfunktion verwenden. Verwenden Sie für `service-name` die richtige URL für den Amazon S3 S3-Endpunkt. Geben Sie für `route-table-ids` die Routentabelle an, die dem VPC-Endpunkt zugeordnet ist. | Cloud-Architekt, Cloud-Administrator | 
| Erstellen Sie einen VPC-Endpunkt für AWS STS. | Führen Sie den AWS CLI [create-vpc-endpoint](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-vpc-endpoint.html)Befehl aus, um einen VPC-Endpunkt für AWS -Security-Token-Service (AWS STS) zu erstellen. Der Endpunkt ermöglicht den Zugriff auf den Lambda-Index und die Suchfunktionen in der VPC. AWS STS Die Funktionen verwenden AWS STS , wenn sie die IAM-Rolle übernehmen.<pre>aws ec2 create-vpc-endpoint \<br />  --vpc-id <VPC-ID> \<br />  --vpc-endpoint-type Interface \<br />  --service-name com.amazonaws.us-east-1.sts \<br />  --subnet-id <subnet-ID> \<br />  --security-group-id <security-group-ID></pre><br />Geben Sie für `vpc-id` die VPC an, die Sie für den Lambda-Index und die Suchfunktionen verwenden. Geben Sie für das Subnetz an`subnet-id`, in dem dieser Endpunkt erstellt werden soll. Geben Sie für die Sicherheitsgruppe an`security-group-id`, der dieser Endpunkt zugeordnet werden soll. (Es könnte dasselbe sein wie die Sicherheitsgruppe, die Lambda verwendet.) | Cloud-Architekt, Cloud-Administrator | 

### Testen Sie Mehrmandantenfähigkeit und Datenisolierung
<a name="test-multi-tenancy-and-data-isolation"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Aktualisieren Sie die Python-Dateien für die Index- und Suchfunktionen. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.html)Sie können den Elasticsearch-Endpunkt auf der Registerkarte „**Übersicht**“ der OpenSearch Service-Konsole abrufen. Er hat das Format`<AWS-Region>.es.amazonaws.com`. | Cloud-Architekt, App-Entwickler | 
| Aktualisieren Sie den Lambda-Code. | Verwenden Sie den AWS CLI [update-function-code](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-code.html)Befehl, um den Lambda-Code mit den Änderungen zu aktualisieren, die Sie an den Python-Dateien vorgenommen haben:<pre>aws lambda update-function-code \<br />  --function-name index-lambda-function \<br />  --zip-file fileb://index_lambda_package.zip<br /><br />aws lambda update-function-code \<br />  --function-name search-lambda-function \<br />  --zip-file fileb://search_lambda_package.zip</pre> | Cloud-Architekt, App-Entwickler | 
| Laden Sie Rohdaten in den S3-Bucket hoch. | Verwenden Sie den Befehl AWS CLI [cp](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/cp.html), um Daten für die Objekte Tenant-1 und Tenant-2 in den `tenantrawdata` Bucket hochzuladen (geben Sie den Namen des S3-Buckets an, den Sie zu diesem Zweck erstellt haben):<pre>aws s3 cp tenant-1-data s3://tenantrawdata<br />aws s3 cp tenant-2-data s3://tenantrawdata</pre><br />Der S3-Bucket ist so eingerichtet, dass er die Lambda-Indexfunktion jedes Mal ausführt, wenn Daten hochgeladen werden, sodass das Dokument in Elasticsearch indexiert wird. | Cloud-Architekt, Cloud-Administrator | 
| Suchen Sie Daten von der Kibana-Konsole aus. | Führen Sie auf der Kibana-Konsole die folgende Abfrage aus:<pre>GET tenant-data/_search</pre><br />Diese Abfrage zeigt alle in Elasticsearch indexierten Dokumente an. In diesem Fall sollten Sie zwei separate Dokumente für Tenant-1 und Tenant-2 sehen. | Cloud-Architekt, Cloud-Administrator | 
| Testen Sie die Such-API von API Gateway aus. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.html)Bildschirmdarstellungen finden Sie im Abschnitt [Zusätzliche Informationen](#build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service-additional). | Cloud-Architekt, App-Entwickler | 
| Bereinigen Sie die Ressourcen. | Bereinigen Sie alle Ressourcen, die Sie erstellt haben, um zusätzliche Gebühren für Ihr Konto zu vermeiden. | AWS DevOps, Cloud-Architekt, Cloud-Administrator | 

## Zugehörige Ressourcen
<a name="build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service-resources"></a>
+ [AWS SDK für Python (Boto)](https://aws.amazon.com/sdk-for-python/)
+ [AWS Lambda Dokumentation](https://docs.aws.amazon.com/lambda/)
+ [API Gateway Gateway-Dokumentation](https://docs.aws.amazon.com/apigateway/)
+ [Amazon S3 S3-Dokumentation](https://docs.aws.amazon.com/s3/)
+ [Amazon OpenSearch Service-Dokumentation](https://docs.aws.amazon.com/elasticsearch-service/)
  + [Feinkörnige Zugriffskontrolle in Amazon Service OpenSearch ](https://docs.amazonaws.cn/en_us/elasticsearch-service/latest/developerguide/fgac.html)
  + [Eine Suchanwendung mit Amazon OpenSearch Service erstellen](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/search-example.html)
  + [Starten Ihrer Amazon OpenSearch Service-Domains innerhalb einer VPC](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-vpc.html)

## Zusätzliche Informationen
<a name="build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service-additional"></a>

**Modelle zur Datenpartitionierung**

Es gibt drei gängige Datenpartitionierungsmodelle, die in Systemen mit mehreren Mandanten verwendet werden: Silo, Pool und Hybrid. Welches Modell Sie wählen, hängt von den Anforderungen Ihrer Umgebung in Bezug auf Compliance, Noisy Neighbor, Betrieb und Isolierung ab.

*Silo-Modell*

Im Silomodell werden die Daten jedes Mandanten in einem eigenen Speicherbereich gespeichert, in dem es nicht zu einer Vermischung von Mandantendaten kommt. Sie können zwei Ansätze verwenden, um das Silomodell mit OpenSearch Service zu implementieren: Domäne pro Mandant und Index pro Mandant.
+ **Domain pro Mandant** — Sie können pro Mandant eine separate OpenSearch Service-Domain (gleichbedeutend mit einem Elasticsearch-Cluster) verwenden. Die Platzierung jedes Mandanten in einer eigenen Domain bietet alle Vorteile, die mit der Speicherung von Daten in einem eigenständigen Konstrukt verbunden sind. Dieser Ansatz bringt jedoch Herausforderungen in Bezug auf Management und Agilität mit sich. Aufgrund seines dezentralen Charakters ist es schwieriger, den betrieblichen Zustand und die Aktivität der Mieter zu aggregieren und zu bewerten. Dies ist eine kostspielige Option, bei der jede OpenSearch Dienstdomäne mindestens über drei Masterknoten und zwei Datenknoten für Produktionsworkloads verfügen muss.

![Silomodell „Domäne pro Mandant“ für serverlose Architekturen mit mehreren Mandanten.](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/750196bb-03f6-4b6e-92cd-eb7141602547/images/c2195f82-e5ed-40bb-b76a-3b0210bf1254.png)


 
+ **Index pro Mandant** — Sie können Mandantendaten in separaten Indizes innerhalb eines Serviceclusters platzieren. OpenSearch Bei diesem Ansatz verwenden Sie bei der Erstellung und Benennung des Indexes eine Mandanten-ID, indem Sie die Mandanten-ID dem Indexnamen voranstellen. Der Ansatz „Index pro Mandant“ hilft Ihnen dabei, Ihre Siloziele zu erreichen, ohne für jeden Mandanten einen komplett separaten Cluster einzuführen. Es kann jedoch zu Speicherauslastung kommen, wenn die Anzahl der Indizes zunimmt, da für diesen Ansatz mehr Shards erforderlich sind und der Master-Knoten für mehr Zuweisung und Neuverteilung zuständig sein muss.

![Silo-Modell mit Index pro Mandant für serverlose Architekturen mit mehreren Mandanten.](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/750196bb-03f6-4b6e-92cd-eb7141602547/images/354a9463-25bb-422b-84de-d4875a7c8ea2.png)


 

**Isolierung im Silomodell — Im Silomodell** verwenden Sie IAM-Richtlinien, um die Domänen oder Indizes zu isolieren, die die Daten der einzelnen Mandanten enthalten. Diese Richtlinien verhindern, dass ein Mandant auf die Daten eines anderen Mandanten zugreift. Um Ihr Silo-Isolationsmodell zu implementieren, können Sie eine ressourcenbasierte Richtlinie erstellen, die den Zugriff auf Ihre Mandantenressource steuert. Dabei handelt es sich häufig um eine Domain-Zugriffsrichtlinie, die festlegt, welche Aktionen ein Principal an den Unterressourcen der Domain durchführen kann, einschließlich Elasticsearch-Indizes und. APIs Mit identitätsbasierten IAM-Richtlinien können Sie *zulässige* oder *verweigerte Aktionen für die Domain, Indizes* oder innerhalb von Service angeben. APIs OpenSearch Das `Action` Element einer IAM-Richtlinie beschreibt die spezifischen Aktionen, die durch die Richtlinie zugelassen oder verweigert werden, und das `Principal ` Element gibt die betroffenen Konten, Benutzer oder Rollen an.

Die folgende Beispielrichtlinie gewährt Tenant-1 vollen Zugriff (wie von angegeben`es:*`) nur auf die Unterressourcen in der Domäne. `tenant-1` Das nachstehende `/*` `Resource` Element weist darauf hin, dass diese Richtlinie für die Unterressourcen der Domain gilt, nicht für die Domain selbst. Wenn diese Richtlinie in Kraft ist, dürfen Mandanten keine neue Domäne erstellen oder Einstellungen für eine bestehende Domäne ändern.

```
{
   "Version": "2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::<aws-account-id>:user/Tenant-1"
         },
         "Action": "es:*",
         "Resource": "arn:aws:es:<Region>:<account-id>:domain/tenant-1/*"
      }
   ]
}
```

Um das Silo-Modell „Mandant pro Index“ zu implementieren, müssten Sie diese Beispielrichtlinie ändern, um Tenant-1 weiter auf den angegebenen Index oder die angegebenen Indizes zu beschränken, indem Sie den Indexnamen angeben. Die folgende Beispielrichtlinie beschränkt Tenant-1 auf den Index. `tenant-index-1` 

```
{
   "Version": "2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::123456789012:user/Tenant-1"
         },
         "Action": "es:*",
         "Resource": "arn:aws:es:<Region>:<account-id>:domain/test-domain/tenant-index-1/*"
      }
   ]
}
```

*Pool-Modell*

Im Poolmodell werden alle Mandantendaten in einem Index innerhalb derselben Domäne gespeichert. Die Mandanten-ID ist in den Daten (Dokument) enthalten und wird als Partitionsschlüssel verwendet, sodass Sie bestimmen können, welche Daten zu welchem Mandanten gehören. Dieses Modell reduziert den Verwaltungsaufwand. Der Betrieb und die Verwaltung des gepoolten Indexes sind einfacher und effizienter als die Verwaltung mehrerer Indizes. Da Mandantendaten jedoch innerhalb desselben Index zusammengefasst sind, verlieren Sie die natürliche Mandantenisolierung, die das Silomodell bietet. Dieser Ansatz kann aufgrund des Noisy-Neighbor-Effekts auch zu Leistungseinbußen führen.

![Pool-Modell für serverlose Architekturen mit mehreren Mandanten.](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/750196bb-03f6-4b6e-92cd-eb7141602547/images/c2c3bb0f-6ccd-47a7-ab67-e7f3f8c7f289.png)


 

**Mandantenisolierung im Poolmodell** — Im Allgemeinen ist es schwierig, die Mandantenisolierung im Poolmodell zu implementieren. Der im Silomodell verwendete IAM-Mechanismus ermöglicht es Ihnen nicht, die Isolierung anhand der in Ihrem Dokument gespeicherten Mandanten-ID zu beschreiben.

Ein alternativer Ansatz besteht darin, die FGAC-Unterstützung ([Fine-Grained Access Control](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/fgac.html)) zu verwenden, die von der Open Distro for Elasticsearch bereitgestellt wird. Mit FGAC können Sie Berechtigungen auf Index-, Dokument- oder Feldebene steuern. Bei jeder Anfrage wertet FGAC die Benutzeranmeldedaten aus und authentifiziert den Benutzer entweder oder verweigert den Zugriff. Wenn FGAC den Benutzer authentifiziert, ruft es alle Rollen ab, die diesem Benutzer zugeordnet sind, und verwendet den vollständigen Satz von Berechtigungen, um zu bestimmen, wie die Anfrage behandelt werden soll. 

Um die erforderliche Isolierung im Poolmodell zu erreichen, können Sie die [Sicherheit auf Dokumentebene](https://opendistro.github.io/for-elasticsearch-docs/docs/security/access-control/document-level-security/) verwenden, sodass Sie eine Rolle auf eine Teilmenge von Dokumenten in einem Index beschränken können. Die folgende Beispielrolle beschränkt Abfragen auf Tenant-1. Indem Sie diese Rolle auf Tenant-1 anwenden, können Sie die erforderliche Isolierung erreichen. 

```
{
   "bool": {
     "must": {
       "match": {
         "tenantId": "Tenant-1"
       }
     }
   }
 }
```

*Hybrides Modell*

Das Hybridmodell verwendet eine Kombination der Silo- und Poolmodelle in derselben Umgebung, um jedem Mieter (z. B. kostenlose Tarife, Standard- und Premium-Tarife) einzigartige Erlebnisse zu bieten. Jede Stufe folgt demselben Sicherheitsprofil, das im Poolmodell verwendet wurde.

 

![Hybridmodell für serverlose Architekturen mit mehreren Mandanten.](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/750196bb-03f6-4b6e-92cd-eb7141602547/images/e7def98a-38ef-435a-9881-7e95ae4d4940.png)


**Mandantenisolierung im Hybridmodell** — Im Hybridmodell verwenden Sie dasselbe Sicherheitsprofil wie im Poolmodell, wo die Verwendung des FGAC-Sicherheitsmodells auf Dokumentenebene die Mandantenisolierung ermöglichte. Diese Strategie vereinfacht zwar die Clusterverwaltung und bietet Flexibilität, verkompliziert aber andere Aspekte der Architektur. Ihr Code erfordert beispielsweise zusätzliche Komplexität, um zu bestimmen, welches Modell jedem Mandanten zugeordnet ist. Sie müssen außerdem sicherstellen, dass Abfragen für einzelne Mandanten nicht die gesamte Domäne überlasten und die Benutzererfahrung für andere Mandanten beeinträchtigen. 

**Testen im API Gateway**

*Testfenster für Tenant-1-Abfrage*

![Testfenster für Tenant-1-Abfrage.](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/750196bb-03f6-4b6e-92cd-eb7141602547/images/a6757d3f-977a-4ecc-90cb-83ab7f1c3588.png)


*Testfenster für Tenant-2-Abfrage*

 

![Testfenster für Tenant-2-Abfrage.](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/750196bb-03f6-4b6e-92cd-eb7141602547/images/31bfd656-33ca-4750-b6e6-da4d703c2071.png)


## Anlagen
<a name="attachments-750196bb-03f6-4b6e-92cd-eb7141602547"></a>

[Um auf zusätzliche Inhalte zuzugreifen, die mit diesem Dokument verknüpft sind, entpacken Sie die folgende Datei: attachment.zip](samples/p-attach/750196bb-03f6-4b6e-92cd-eb7141602547/attachments/attachment.zip)