View a markdown version of this page

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 Dienstrolle mit dem Namen DAXServiceRoleDAXCluster01 erstellen und die Rolle mit DAXCluster01 verknüpfen. Die Richtlinie für DAXServiceRolewü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 dem DAX-Dienst und dem DAX-Dienst selbst angeben. DAXServiceRole 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 mit einer Vertrauensbeziehung für DAXServiceRole:

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

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

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

JSON
{ "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 Confused-Deputy-Problem 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.

JSON
{ "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-Richtlinien-Szenario 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 direkten Zugriff auf eine Tabelle ermöglicht, den indirekten Zugriff aber mit einem DAX-Cluster 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).

Read-only Zugriff auf DynamoDB (nur)

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.

JSON
{ "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.

Read/write Zugriff auf DynamoDB (nur)

Wenn read/write Zugriff auf DynamoDB BobUserRole erforderlich ist, würde die folgende Richtlinie funktionieren.

JSON
{ "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 auf eine DynamoDB-Tabelle und einen DAX-Cluster gewährt.

Um den Zugriff auf einen DAX-Cluster zu ermöglichen, müssen Sie DAX-specific Aktionen in eine IAM-Richtlinie aufnehmen.

Die folgenden DAX-specific Aktionen entsprechen ihren ähnlich benannten Gegenstücken 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.

Read-only 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.

JSON
{ "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.

JSON
{ "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" } ] }

Read/write Zugriff auf DynamoDB und schreibgeschützt mit DAX

Für eine bestimmte Benutzerrolle können Sie read/write Zugriff auf eine DynamoDB-Tabelle gewähren und gleichzeitig den 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.

JSON
{ "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.

JSON
{ "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" } ] }

Read/write Zugriff auf DynamoDB und read/write Zugriff auf DAX

Nehmen wir nun an, Bob benötigte read/write Zugriff auf die Books Tabelle, direkt von DynamoDB oder indirekt von. DAXCluster01 Das folgende Richtliniendokument, das BobAccessPolicy zugeordnet ist, gewährt diesen Zugriff.

JSON
{ "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 DAXServiceRole wäre eine IAM-Richtlinie erforderlich, die es ermöglicht, read/write Aktionen DAXCluster01 an der Tabelle auszuführen. Books

JSON
{ "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.

JSON
{ "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.

JSON
{ "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" } ] }

Wenn Sie, wie in diesem Beispiel gezeigt, die Zugriffskontrolle für die Benutzerzugriffsrichtlinie und die Zugriffsrichtlinie des DAX-Clusters konfigurieren, müssen Sie den End-to-End-Zugriff vollständig verstehen, um sicherzustellen, dass das Prinzip der Mindestberechtigung berücksichtigt wird. Stellen Sie zudem sicher, dass, wenn Sie einem Benutzer Zugriff auf einen DAX-Cluster gewähren, zuvor festgelegte Zugriffskontrollrichtlinien nicht unterlaufen werden.