Kontenübergreifenden Zugriff auf Amazon DynamoDB konfigurieren - AWS Prescriptive Guidance

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.

Kontenübergreifenden Zugriff auf Amazon DynamoDB konfigurieren

Erstellt von Shashi Dalmia (AWS), Esteban Serna Parra () und Imhoertha Ojior () AWS AWS

Umwelt: Produktion

Technologien: Datenbanken; Sicherheit, Identität, Compliance

AWSDienste: Amazon DynamoDB; AWS Identity and Access Management; Lambda AWS

Übersicht

In diesem Muster werden die Schritte zur Konfiguration des kontoübergreifenden Zugriffs auf Amazon DynamoDB mithilfe ressourcenbasierter Richtlinien erläutert. Für Workloads, die DynamoDB verwenden, wird es immer üblicher, Strategien zur Workload-Isolierung zu verwenden, um Sicherheitsbedrohungen zu minimieren und Compliance-Anforderungen zu erfüllen. Die Implementierung von Strategien zur Workload-Isolierung erfordert häufig konto- und regionsübergreifenden Zugriff auf DynamoDB-Ressourcen mithilfe von AWS Identity and Access Management () IAM identitätsbasierten Richtlinien. Dazu gehören das Festlegen von IAM Berechtigungen und das Herstellen einer Vertrauensbeziehung zwischen den. AWS-Konten

Ressourcenbasierte Richtlinien für DynamoDB vereinfachen die Sicherheitslage für kontenübergreifende Workloads erheblich. Dieses Muster enthält Schritte und Beispielcode, um zu demonstrieren, wie Sie AWS Lambda Funktionen in einem konfigurieren können AWS-Konto , um Daten in eine DynamoDB-Datenbanktabelle in einem anderen Konto zu schreiben.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Zwei aktiv. AWS-Konten Dieses Muster bezeichnet diese Konten als Konto A und Konto B.

  • AWS Command Line Interface (AWS CLI) für den Zugriff auf Konto A installiert und konfiguriert, um die DynamoDB-Tabelle zu erstellen. Die anderen Schritte in diesem Muster enthalten Anweisungen zur Verwendung der DynamoDB IAM - und Lambda-Konsolen. Wenn Sie es AWS CLI stattdessen verwenden möchten, konfigurieren Sie es so, dass es auf beide Konten zugreift.

Einschränkungen

Architektur

Das folgende Diagramm zeigt eine Architektur mit einem einzigen Konto. AWS Lambda, Amazon Elastic Compute Cloud (AmazonEC2) und DynamoDB befinden sich alle in demselben Konto. In diesem Szenario können Lambda-Funktionen und EC2 Amazon-Instances auf DynamoDB zugreifen. Um Zugriff auf die DynamoDB-Tabelle zu gewähren, können Sie eine identitätsbasierte Richtlinie in IAM oder eine ressourcenbasierte Richtlinie in DynamoDB erstellen.

Verwenden von IAM Berechtigungen für den Zugriff auf eine DynamoDB-Tabelle in demselben Konto.

Das folgende Diagramm zeigt eine Architektur mit mehreren Konten. Wenn Ressourcen in einem AWS-Konto Konto Zugriff auf eine DynamoDB-Tabelle in einem anderen Konto benötigen, müssen Sie in DynamoDB eine ressourcenbasierte Richtlinie einrichten, um den erforderlichen Zugriff zu gewähren. Im folgenden Diagramm wird beispielsweise einer Lambda-Funktion in Konto B mithilfe einer ressourcenbasierten Richtlinie Zugriff auf die DynamoDB-Tabelle in Konto A gewährt.

Verwenden einer ressourcenbasierten Richtlinie für den Zugriff auf eine DynamoDB-Tabelle in einem anderen Konto.

Dieses Muster beschreibt den kontenübergreifenden Zugriff zwischen Lambda und DynamoDB. Sie können ähnliche Schritte für andere Konten verwenden, AWS-Services wenn die entsprechenden Berechtigungen für beide Konten konfiguriert sind. Wenn Sie beispielsweise einer Lambda-Funktion Zugriff auf einen Amazon Simple Storage Service (Amazon S3) -Bucket in Konto A gewähren möchten, können Sie in Amazon S3 eine ressourcenbasierte Richtlinie erstellen und die Berechtigungen zur Lambda-Ausführungsrolle in Konto B hinzufügen.

Tools

AWS-Services

  • Amazon DynamoDB ist ein vollständig verwalteter Service ohne SQL Datenbank, der eine schnelle, vorhersehbare und skalierbare Leistung bietet.

  • AWS Identity and Access Management (IAM) hilft Ihnen dabei, den Zugriff auf Ihre AWS Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.

  • AWS Lambda ist ein Datenverarbeitungsservice, mit dem Sie Code ausführen können, ohne dass Sie Server bereitstellen oder verwalten müssen. Es führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.

Code

Dieses Muster enthält Beispielcode im Abschnitt Zusätzliche Informationen, der zeigt, wie Sie eine Lambda-Funktion in Konto B so konfigurieren können, dass sie in die DynamoDB-Tabelle in Konto A schreibt. Der Code wird nur zur Veranschaulichung und zu Testzwecken bereitgestellt. Wenn Sie dieses Muster in einer Produktionsumgebung implementieren, verwenden Sie den Code als Referenz und passen Sie ihn an Ihre eigene Umgebung an.

Bewährte Methoden

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie eine Richtlinie in Konto B.

Diese IAM Richtlinie ermöglicht die PutItemAktion für eine DynamoDB-Tabelle in Konto A.

  1. Melden Sie sich bei Konto A im an. AWS Management Console

  2. Öffnen Sie die IAMKonsole.

  3. Wählen Sie im Navigationsbereich Policies (Richtlinien) und dann Create policy (Richtlinie erstellen).

  4. Wählen Sie auf der Seite „Berechtigungen angeben“ für den Richtlinien-Editor die Option aus JSON.

  5. Geben Sie die folgende Richtlinie ein:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A" } ] }
  6. Ersetzen Sie <Region> und <Account-A-ID> durch Ihre Werte, und wählen Sie dann Weiter aus.

  7. Geben Sie unter Richtlinienname einen eindeutigen Namen für Ihre Richtlinie ein, z. DynamoDB-PutItem-Policy B.

  8. (Optional) Fügen Sie eine Richtlinienbeschreibung hinzu.

  9. Wählen Sie Create Policy (Richtlinie erstellen) aus.

Allgemein AWS

Erstellen Sie eine Rolle in Konto B.

Die Lambda-Funktion in Konto B verwendet diese IAM Rolle, um auf die DynamoDB-Tabelle in Konto A zuzugreifen.

  1. Öffnen Sie die Konsole. IAM

  2. Wählen Sie im Navigationsbereich Roles (Rollen) und dann Create role (Rolle erstellen).

  3. Wählen Sie für Select trusted entity (Vertrauenswürdige Entität auswählen) die Option AWS-Service aus.

  4. Wählen Sie im Abschnitt Anwendungsfall die Option Lambda aus.

  5. Wählen Sie Weiter: Berechtigungen aus.

  6. Geben Sie im Feld Filterrichtlinien DynamoDB ein.

  7. Wählen Sie in der Liste der DynamoDB-Richtlinien die Option. DynamoDB-PutItem-Policy

  8. Löschen Sie das Feld Filterrichtlinien und geben Sie dann Lambda ein.

  9. Wählen Sie in der Liste der Lambda-Richtlinien die Option AWSLambdaExecute.

  10. Wählen Sie Weiter: Benennen, überprüfen und erstellen.

  11. Geben Sie unter Role name (Rollenname) einen eindeutigen Namen für die Rolle ein, z. B. DynamoDB-PutItemAccess.

  12. (Optional) Fügen Sie eine Rollenbeschreibung hinzu.

  13. (Optional) Fügen Sie der Rolle Metadaten hinzu, indem Sie Tags als Schlüssel-Wert-Paare anfügen.

  14. Wählen Sie Rolle erstellen.

Weitere Informationen zum Erstellen von Rollen finden Sie in der IAMDokumentation.

Allgemein AWS

Beachten Sie die RolleARN.

  1. Öffnen Sie die IAMKonsole.

  2. Wählen Sie im Navigationsbereich Rollen aus.

  3. Geben Sie DynamoDB-PutItemAccess im Suchfeld die Rolle ein und wählen Sie sie aus.

  4. Kopieren Sie auf der Übersichtsseite für die Rolle den Amazon-Ressourcennamen (ARN). Sie verwenden dieARN, wenn Sie die Lambda-Funktion einrichten.

Allgemein AWS
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie eine DynamoDB-Tabelle.

Verwenden Sie den folgenden AWS CLI Befehl, um eine DynamoDB-Tabelle zu erstellen.

aws dynamodb create-table \ --table-name Table-Account-A \ --attribute-definitions \ AttributeName=category,AttributeType=S \ AttributeName=item,AttributeType=S \ --key-schema \ AttributeName=category,KeyType=HASH \ AttributeName=item,KeyType=RANGE \ --provisioned-throughput \ ReadCapacityUnits=5,WriteCapacityUnits=5 \ --resource-policy \ '{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<Account-B-ID>:role/<Role-Name>" }, "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A" } ] }'

Ersetzen Sie in diesem Codebeispiel Folgendes:

  • <Account-B-ID>ist die ID von Konto B.

  • <Role-Name>ist der Name der IAM Rolle, die Sie erstellt haben, z. DynamoDB-PutItemAccess B.

  • <Region>ist der AWS-Region Ort, an dem Sie die DynamoDB-Tabelle erstellen.

  • <Account-A-ID>ist die ID von Konto A.

Hinweis: Sie geben die ressourcenbasierte Richtlinienkonfiguration in der create-table Anweisung mithilfe des Kennzeichens an--resource-policy. Diese Richtlinie bezieht sich auf ARN die DynamoDB-Tabelle in Konto A.

Weitere Informationen zum Erstellen von Tabellen finden Sie in der DynamoDB-Dokumentation.

Allgemeines AWS
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie eine Lambda-Funktion, um Daten in DynamoDB zu schreiben.

  1. Melden Sie sich bei Konto B in der an. AWS Management Console

  2. Öffnen Sie die Lambda-Konsole.

  3. Wählen Sie im Navigationsbereich Funktionen und dann Funktion erstellen aus.

  4. Geben Sie unter Name lambda_write_function ein.

  5. Wählen Sie für Runtime Python 3.8 oder höher.

  6. Wählen Sie unter Standardausführungsrolle ändern die Option Bestehende Rolle verwenden aus.

  7. Wählen Sie unter Existierende Rolle die IAM Rolle aus, die Sie erstellt haben, z. DynamoDB-PutItemAccess B.

  8. Wählen Sie Funktion erstellen aus.

  9. Fügen Sie auf der Registerkarte Code den Beispielcode ein, der im Abschnitt Zusätzliche Informationen dieses Musters bereitgestellt wird. Ersetzen Sie in diesem Codebeispiel Folgendes:

    • <Account-A-ID>ist die ID von Konto A.

    • <Region>ist der AWS-Region Ort, an dem Sie die DynamoDB-Tabelle erstellt haben.

  10. Wählen Sie Bereitstellen.

  11. Wählen Sie Test aus. Sie werden aufgefordert, ein Testereignis zu konfigurieren. Erstellen Sie ein neues Ereignis mit Ihrem bevorzugten Namen, z. B.MyTestEventForWrite, und speichern Sie dann die Konfiguration.

  12. Wählen Sie erneut Test (Testen) aus. Dadurch wird die Lambda-Funktion mit dem von Ihnen angegebenen Ereignisnamen ausgeführt.

  13. Überprüfen Sie die Ausgabe der Funktion. Es sollte angeben, dass die Funktion auf die DynamoDB-Tabelle in Konto A zugegriffen hat und Daten in diese Tabelle schreiben konnte.

Weitere Informationen zum Erstellen von Lambda-Funktionen finden Sie in der Lambda-Dokumentation.

Allgemeines AWS
AufgabeBeschreibungErforderliche Fähigkeiten

Ressourcen löschen.

Um zu vermeiden, dass Kosten im Zusammenhang mit den nach diesem Muster erstellten Ressourcen anfallen, gehen Sie wie folgt vor, um diese Ressourcen zu löschen:

  1. Löschen Sie in Konto B die Lambda-Funktion, die Sie für die Verbindung mit DynamoDB erstellt haben. Anweisungen finden Sie in der Lambda-Dokumentation.

  2. Löschen Sie in Konto A die DynamoDB-Tabelle, die Sie erstellt haben. Anweisungen finden Sie in der DynamoDB-Dokumentation.

  3. Bewährte Sicherheitsmethoden finden Sie, wenn Sie die IAM Richtlinie (DynamoDB-PutItem-Policy) löschen, wenn sie nicht mehr benötigt wird. Weitere Informationen finden Sie in der IAMDokumentation.

  4. Für bewährte Sicherheitsmethoden sollten Sie die IAM Rolle (DynamoDB-PutItemAccess) löschen, wenn sie nicht mehr benötigt wird. Weitere Informationen finden Sie in der IAMDokumentation.

Allgemein AWS

Fehlerbehebung

ProblemLösung

Beim Erstellen der Lambda-Funktion erhalten Sie eine ResourceNotFoundException Fehlermeldung.

Vergewissern Sie sich, dass Sie die AWS-Region und ID von Konto A korrekt eingegeben haben. Diese sind Teil der Tabelle ARN für die DynamoDB.

Zugehörige Ressourcen

Zusätzliche Informationen

Beispielcode

import boto3 from datetime import datetime dynamodb_client = boto3.client('dynamodb') def lambda_handler(event, context): now = datetime.now().isoformat() data = dynamodb_client.put_item(TableName='arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A', Item={"category": {"S": "Fruit"},"item": {"S": "Apple"},"time": {"S": now}}) return data

Hinweis: Wenn der DynamoDB-Client instanziiert wird, wird die DynamoDB-Tabelle anstelle ARN des Tabellennamens bereitgestellt. Dies ist erforderlich, damit die Lambda-Funktion bei ihrer Ausführung eine Verbindung zur richtigen DynamoDB-Tabelle herstellt.