DAX-Zugriffskontrolle - Amazon-DynamoDB

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.

DAX-Zugriffskontrolle

DynamoDB Accelerator (DAX) kann mit DynamoDB zusammenarbeiten, um Anwendungen nahtlos eine Caching-Schicht hinzuzufügen. DAX und DynamoDB verfügen jedoch über separate Zugriffssteuerungsmechanismen. Beide Dienste verwenden AWS Identity and Access Management (IAM), um ihre jeweiligen Sicherheitsrichtlinien zu implementieren, aber die Sicherheitsmodelle für DAX und DynamoDB sind unterschiedlich.

Wir empfehlen dringend, dass Sie beide Sicherheitsmodelle verstehen, damit Sie für Ihre Anwendungen mit DAX ordnungsgemäße Sicherheitsmaßnahmen implementieren können.

In diesem Abschnitt werden die Zugriffskontrollmechanismen von DAX beschrieben und beispielhafte IAM-Richtlinien bereitgestellt, die Sie an Ihre Bedürfnisse anpassen können.

Mit DynamoDB können Sie IAM-Richtlinien erstellen, die Aktionen begrenzen, die ein Benutzer mit individuellen DynamoDB-Ressourcen durchführen kann. Sie können beispielsweise eine Benutzerrolle erstellen, die ausschließlich dem Benutzer erlaubt, schreibgeschützte Aktionen auf einer bestimmten DynamoDB-Tabelle durchzuführen. (Weitere Informationen finden Sie unter Identity and Access Management für Amazon DynamoDB.) Im Vergleich dazu konzentriert sich das DAX-Sicherheitsmodell auf Cluster-Sicherheit und die Fähigkeit des Clusters zum Ausführen von DynamoDB-API-Aktionen in Ihrem Namen.

Warnung

Wenn Sie derzeit IAM-Rollen und -Richtlinien zum Einschränken des Zugriffs auf DynamoDB-Tabellendaten nutzen, kann die Verwendung von DAX diese Richtlinien unterlaufen. Beispiel: Ein Benutzer hat Zugriff auf eine DynamoDB-Tabelle über DAX, aber keinen expliziten Zugriff auf dieselbe Tabelle, wenn er direkt auf DynamoDB zugreift. Weitere Informationen finden Sie unter Identity and Access Management für Amazon DynamoDB.

DAX erzwingt keine Separation der Daten in DynamoDB auf Benutzerebene. Stattdessen erben Benutzer die Berechtigungen der IAM-Richtlinie des DAX-Clusters, wenn sie auf diesen Cluster zugreifen. Beim Zugriff auf die DynamoDB-Tabellen über DAX sind daher die einzigen aktiven Zugriffskontrollen die Berechtigungen in der IAM-Richtlinie des DAX-Clusters. Es werden keine weiteren Berechtigungen erkannt.

Wenn Sie Isolation benötigen, empfehlen wir, dass Sie zusätzliche DAX-Cluster erstellen und die IAM-Richtlinie für jeden Cluster entsprechend abgrenzen. Sie können z. B. mehrere DAX-Cluster erstellen und jedem Cluster den Zugriff auf eine einzelne Tabelle erlauben.

IAM-Servicerolle für DAX

Beim Erstellen eines DAX-Clusters, müssen Sie den Cluster mit einer IAM-Rolle verknüpfen. Dies wird als Servicerolle für den Cluster bezeichnet.

In diesem Beispiel gehen wir davon aus, dass Sie einen neuen DAX-Cluster mit dem Namen DAXCluster01 erstellen möchten. Sie könnten eine Servicerolle mit dem Namen DAX erstellen und die Rolle ServiceRole DAXCluster01 zuordnen. Die Richtlinie für DAX ServiceRole würde die DynamoDB-Aktionen definieren, die DaxCluster01 im Namen der Benutzer ausführen könnte, die mit DAXCluster01 interagieren.

Wenn Sie eine Servicerolle erstellen, müssen Sie eine Vertrauensbeziehung zwischen DAX und dem DAX-Dienst selbst angeben. ServiceRole Eine Vertrauensstellung bestimmt, welche Entitäten eine Rolle übernehmen und deren Berechtigungen nutzen können. Im Folgenden finden Sie ein Beispiel für ein Dokument zur Vertrauensstellung für DAX ServiceRole:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "dax.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Diese Vertrauensstellung ermöglicht es einem DAX-Cluster, DAX anzunehmen ServiceRole und DynamoDB-API-Aufrufe in Ihrem Namen durchzuführen.

Die zulässigen DynamoDB-API-Aktionen werden in einem IAM-Richtliniendokument beschrieben, das Sie an DAX anhängen. ServiceRole Dies ist ein Beispiel für ein Richtliniendokument.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DaxAccessPolicy", "Effect": "Allow", "Action": [ "dynamodb:DescribeTable", "dynamodb:PutItem", "dynamodb:GetItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", "dynamodb:ConditionCheckItem" ], "Resource": [ "arn:aws:dynamodb:us-west-2:123456789012:table/Books" ] } ] }

Diese Richtlinie erlaubt DAX die Durchführung aller DynamoDB-API-Aktionen an einer DynamoDB-Tabelle. Die dynamodb:DescribeTable-Aktion ist erforderlich, damit DAX Metadaten über die Tabelle beibehält, und die anderen sind Lese- und Schreibvorgänge, die für Elemente in der Tabelle ausgeführt werden. Die Tabelle mit dem Namen Books befindet sich in der Region us-west-2 und ist im Besitz der AWS-Konto-ID 123456789012.

Anmerkung

DAX unterstützt Mechanismen, um das Problem des verwirrten Stellvertreters beim dienstübergreifenden Zugriff zu verhindern. Weitere Informationen finden Sie unter Das Problem des verwirrten Stellvertreters im IAM-Benutzerhandbuch.

IAM-Richtlinie, um DAX-Cluster-Zugriff zu gewähren

Nach dem Erstellen eines DAX-Clusters müssen Sie einem Benutzer Berechtigungen erteilen, damit er auf den DAX-Cluster zugreifen kann.

Angenommen, Sie möchten einem Benutzer mit dem Namen Alice Zugriff auf DAXCluster01 gewähren. Sie würden zunächst eine IAM-Richtlinie (AliceAccessPolicy) erstellen, die die DAX-Cluster und DAX-API-Aktionen definiert, auf die der Empfänger zugreifen kann. Sie können anschließend den Zugriff gewähren, indem Sie diese Richtlinie der Benutzerin Alice zuweisen.

Mit dem folgenden Richtliniendokument erhält der Empfänger vollständigen Zugriff auf DAXCluster01.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dax:*" ], "Effect": "Allow", "Resource": [ "arn:aws:dax:us-west-2:123456789012:cache/DAXCluster01" ] } ] }

Das Richtliniendokument erlaubt den Zugriff auf den DAX-Cluster, erteilt jedoch keine DynamoDB-Berechtigungen. (Die DynamoDB-Berechtigungen werden von der DAX-Servicerolle zugewiesen.)

Sie würden für die Benutzerin Alice zunächst eine AliceAccessPolicy mit dem zuvor gezeigten Richtliniendokument erstellen. Anschließend würden Sie die Richtlinie Alice zuweisen.

Anmerkung

Anstatt die Richtlinie einem Benutzer zuzuweisen, könnten Sie sie einer IAM-Rolle zuweisen. Auf diese Weise hätten alle Benutzer, die diese Rolle übernehmen, die Berechtigungen, die Sie in der Richtlinie festgelegt haben.

Die Benutzerrichtlinie bestimmt in Verbindung mit der DAX-Servicerolle die DynamoDB-Ressourcen und API-Aktionen, auf die der Empfänger über DAX zugreifen kann.

Fallstudie: Zugreifen auf DynamoDB und DAX

Das folgende Szenario kann helfen, das Verständnis der IAM-Richtlinien für die Verwendung mit DAX zu vertiefen. (Wir werden uns für den Rest dieses Abschnitts auf dieses Szenario beziehen.) Das folgende Diagramm zeigt einen allgemeinen Überblick des Szenarios.

Ein allgemeiner Überblick über ein IAM-Richtlinienszenario für die Verwendung von DAX.

In diesem Szenario gibt es die folgenden Entitäten:

  • Ein Benutzer (Bob).

  • Eine IAM-Rolle (BobUserRole). Bob übernimmt diese Rolle zur Laufzeit.

  • Eine IAM-Richtlinie (BobAccessPolicy). Diese Richtlinie ist an BobUserRole angehängt. BobAccessPolicy definiert die Ressourcen DynamoDB und DAX, auf die BobUserRole zugreifen darf.

  • Ein DAX-Cluster (DAXCluster01).

  • Eine IAM-Servicerolle (DAXServiceRole). Diese Rolle erlaubt DAXCluster01 den Zugriff auf DynamoDB.

  • Eine IAM-Richtlinie (DAXAccessPolicy). Diese Richtlinie ist an DAXServiceRole angehängt. DAXAccessPolicy definiert die DynamoDB-APIs und Ressourcen, auf die DAXCluster01 zugreifen darf.

  • Eine DynamoDB-Tabelle (Books)

Die Kombination der Richtlinienanweisungen in BobAccessPolicy und DAXAccessPolicy bestimmt, was Bob mit der Tabelle Books machen kann. Beispielsweise kann Bob Books direkt (über den DynamoDB-Endpunkt), indirekt (über den DAX-Cluster) oder beides zugreifen. Bob könnte auch Daten von Books lesen, Daten in Books schreiben oder beides.

Zugriff auf DynamoDB, aber kein Zugriff mit DAX

Überblick über eine IAM-Richtlinie, die den direkten Zugriff auf eine Tabelle ermöglicht, den indirekten Zugriff über einen DAX-Cluster jedoch blockiert.

Es ist möglich, direkten Zugriff auf eine DynamoDB-Tabelle zuzulassen, während ein indirekter Zugriff mit einem DAX-Cluster verhindert wird. Für direkten Zugriff auf DynamoDB werden die Berechtigungen für BobUserRole durch BobAccessPolicy bestimmt (welche an die Rolle angehängt sind).

Lesezugriff auf (nur) DynamoDB

Bob kann auf DynamoDB mit BobUserRole zugreifen. Die an diese Rolle (BobAccessPolicy) angehängte IAM-Richtlinie bestimmt die DynamoDB-Tabellen, auf die BobUserRole zugreifen kann, sowie die APIs, die BobUserRole aufrufen kann.

Berücksichtigen Sie das folgende Richtliniendokument für BobAccessPolicy.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DynamoDBAccessStmt", "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:Scan" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books" } ] }

Wenn dieses Dokument an BobAccessPolicy angehängt wird, ermöglicht es BobUserRole den Zugriff auf den DynamoDB-Endpunkt und das Ausführen von schreibgeschützten Operationen mit der Books-Tabelle.

DAX erscheint nicht in dieser Richtlinie, sodass ein Zugriff über DAX verweigert wird.

Lese- und Schreibzugriff auf (nur) DynamoDB

Wenn BobUserRole Lese- und Schreibzugriff auf DynamoDB benötigt, würde die folgende Richtlinie funktionieren.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DynamoDBAccessStmt", "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem", "dynamodb:ConditionCheckItem" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books" } ] }

Erneut erscheint DAX nicht in dieser Richtlinie, sodass ein Zugriff über DAX verweigert wird.

Zugriff auf DynamoDB und DAX

Eine IAM-Richtlinie, die Zugriff sowohl auf eine DynamoDB-Tabelle als auch auf einen DAX-Cluster gewährt.

Um einen Zugriff auf einen DAX-Cluster zu erlauben, müssen Sie DAX-spezifische Aktionen in einer IAM-Richtlinie angeben.

Die folgenden DAX-spezifischen Aktionen entsprechen ihren Gegenstücken mit vergleichbaren Namen in der DynamoDB-API:

  • dax:GetItem

  • dax:BatchGetItem

  • dax:Query

  • dax:Scan

  • dax:PutItem

  • dax:UpdateItem

  • dax:DeleteItem

  • dax:BatchWriteItem

  • dax:ConditionCheckItem

Das Gleiche gilt für den dax:EnclosingOperation-Bedingungsschlüssel.

Schreibgeschützter Zugriff auf DynamoDB und schreibgeschützter Zugriff auf DAX

In diesem Beispiel gehen wir davon aus, dass Bob Lesezugriff auf die Books-Tabelle aus DynamoDB und DAX benötigt. Die folgende Richtlinie (BobUserRole zugeordnet) gewährt diesen Zugriff.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DAXAccessStmt", "Effect": "Allow", "Action": [ "dax:GetItem", "dax:BatchGetItem", "dax:Query", "dax:Scan" ], "Resource": "arn:aws:dax:us-west-2:123456789012:cache/DAXCluster01" }, { "Sid": "DynamoDBAccessStmt", "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:Scan" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books" } ] }

Die Richtlinie enthält eine Anweisung für den DAX-Zugriff (DAXAccessStmt) und eine zweite Anweisung für den DynamoDBaccess (DynamoDBAccessStmt). Diese Anweisungen würden Bob gestatten, GetItem-, BatchGetItem-, Query- und Scan-Anforderungen an den DAXCluster01 zu senden.

Die Servicerolle für DAXCluster01 würde jedoch auch Lesezugriff auf die Books-Tabelle in DynamoDB erfordern. Die folgende, an DAXServiceRole angehängte IAM-Richtlinie würde diese Anforderung erfüllen.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DynamoDBAccessStmt", "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:Scan" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books" } ] }

Lese-/Schreibzugriff auf DynamoDB und schreibgeschützt mit DAX

Für eine bestimmte Benutzerrolle können Sie Lese-/Schreibzugriff auf eine DynamoDB-Tabelle bereitstellen und gleichzeitig schreibgeschützten Zugriff über DAX zulassen.

Für Bob müsste die IAM-Richtlinie für BobUserRole DynamoDB-Lese- und Schreibaktionen für die Books-Tabelle zulassen und gleichzeitig schreibgeschützte Aktionen über DAXCluster01 unterstützen.

Das folgende Richtliniendokument für BobUserRole gewährt diesen Zugriff.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DAXAccessStmt", "Effect": "Allow", "Action": [ "dax:GetItem", "dax:BatchGetItem", "dax:Query", "dax:Scan" ], "Resource": "arn:aws:dax:us-west-2:123456789012:cache/DAXCluster01" }, { "Sid": "DynamoDBAccessStmt", "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem", "dynamodb:DescribeTable", "dynamodb:ConditionCheckItem" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books" } ] }

Zudem würde DAXServiceRole eine IAM-Richtlinie erforderlich machen, die DAXCluster01 schreibgeschützte Aktionen mit der Books-Tabelle erlaubt.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DynamoDBAccessStmt", "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:DescribeTable" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books" } ] }

Lese-/Schreibzugriff auf DynamoDB und Lese-/Schreibzugriff auf DAX

Angenommen, Bob benötigte Lese- und Schreibzugriff auf die Books-Tabelle, direkt aus DynamoDB oder indirekt von DAXCluster01. Das folgende Richtliniendokument, das BobAccessPolicy zugeordnet ist, gewährt diesen Zugriff.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DAXAccessStmt", "Effect": "Allow", "Action": [ "dax:GetItem", "dax:BatchGetItem", "dax:Query", "dax:Scan", "dax:PutItem", "dax:UpdateItem", "dax:DeleteItem", "dax:BatchWriteItem", "dax:ConditionCheckItem" ], "Resource": "arn:aws:dax:us-west-2:123456789012:cache/DAXCluster01" }, { "Sid": "DynamoDBAccessStmt", "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem", "dynamodb:DescribeTable", "dynamodb:ConditionCheckItem" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books" } ] }

Darüber hinaus würde DAXServiceRole eine IAM-Richtlinie fordern, die DAXCluster01 das Ausführen von Lese-/Schreibaktionen für die Books-Tabelle ermöglicht.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DynamoDBAccessStmt", "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem", "dynamodb:DescribeTable" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books" } ] }

Zugriff auf DynamoDB via DAX, aber kein direkter Zugriff auf DynamoDB

In diesem Szenario kann Bob über DAX auf die Books-Tabelle zugreifen, hat aber keinen direkten Zugriff auf die Books-Tabelle in DynamoDB. Wenn Bob also Zugriff auf DAX erhält, erhält er auch Zugriff auf eine DynamoDB-Tabelle, auf die er sonst möglicherweise nicht zugreifen könnte. Wenn Sie eine IAM-Richtlinie für die DAX-Servicerolle konfigurieren, denken Sie daran, dass jeder Benutzer, dem über die Benutzerzugriffsrichtlinie Zugriff auf den DAX-Cluster gewährt wird, Zugriff auf die in dieser Richtlinie angegebenen Tabellen erhält. In diesem Fall erhält BobAccessPolicy Zugriff auf die in DAXAccessPolicy angegebenen Tabellen.

Ein Szenario, in dem ein Benutzer über einen DAX-Cluster ohne direkten DynamoDB-Zugriff auf eine Tabelle zugreifen kann.

Wenn Sie derzeit IAM-Rollen und -Richtlinien verwenden, um den Zugriff auf DynamoDB-Tabellen und -Daten einzuschränken, kann die Verwendung von DAX diese Richtlinien untergraben. In der folgenden Richtlinie hat Bob zugriff auf eine DynamoDB-Tabelle über DAX, aber keinen expliziten direkten Zugriff auf dieselbe Tabelle in DynamoDB.

Das folgende Richtliniendokument (BobAccessPolicy), das an BobUserRole angehängt ist, würde diesen Zugriff gewähren.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DAXAccessStmt", "Effect": "Allow", "Action": [ "dax:GetItem", "dax:BatchGetItem", "dax:Query", "dax:Scan", "dax:PutItem", "dax:UpdateItem", "dax:DeleteItem", "dax:BatchWriteItem", "dax:ConditionCheckItem" ], "Resource": "arn:aws:dax:us-west-2:123456789012:cache/DAXCluster01" } ] }

In dieser Zugriffsrichtlinie gibt es keine Berechtigungen, um direkt auf DynamoDB zuzugreifen.

Zusammen mit BobAccessPolicy gibt BobUserRole der Folgenden DAXAccessPolicy den Zugriff auf die DynamoDB-Tabelle Books, auch wenn BobUserRole nicht direkt auf die Books-Tabelle zugegriffen werden kann.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DynamoDBAccessStmt", "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem", "dynamodb:DescribeTable", "dynamodb:ConditionCheckItem" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books" } ] }

Wie dieses Beispiel zeigt, müssen Sie bei der Konfiguration der Zugriffskontrolle für die Benutzerzugriffsrichtlinie und die DAX-Cluster-Zugriffsrichtlinie den end-to-end Zugriff vollständig verstehen, um sicherzustellen, dass das Prinzip der geringsten Rechte eingehalten wird. Stellen Sie zudem sicher, dass, wenn Sie einem Benutzer Zugriff auf einen DAX-Cluster gewähren, zuvor festgelegte Zugriffskontrollrichtlinien nicht unterlaufen werden.