Verwendung von IAM Richtlinienbedingungen für eine differenzierte 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.

Verwendung von IAM Richtlinienbedingungen für eine differenzierte Zugriffskontrolle

Wenn Sie in DynamoDB Berechtigungen gewähren, können Sie Bedingungen angeben, die bestimmen, wie eine Berechtigungsrichtlinie wirksam wird.

Übersicht

In DynamoDB haben Sie die Möglichkeit, Bedingungen für die Erteilung von Berechtigungen mithilfe einer IAM Richtlinie anzugeben (sieheIdentity and Access Management für Amazon DynamoDB). Beispielsweise ist Folgendes möglich:

  • Erteilen von Berechtigungen, damit den Benutzern schreibgeschützter Zugriff auf bestimmte Elemente und Attribute in einer Tabelle oder einem sekundären Index gewährt wird.

  • Erteilen von Berechtigungen, damit den Benutzern lesegeschützter Zugriff auf bestimmte Attribute in einer Tabelle, basierend auf der Identität dieses Benutzers, gewährt wird.

In DynamoDB können Sie Bedingungen in einer IAM Richtlinie mithilfe von Bedingungsschlüsseln angeben, wie im Anwendungsfall im folgenden Abschnitt dargestellt.

Anmerkung

Einige AWS Dienste unterstützen auch Tag-basierte Bedingungen, DynamoDB jedoch nicht.

Anwendungsfall für Berechtigungen

Neben der Steuerung des Zugriffs auf API DynamoDB-Aktionen können Sie auch den Zugriff auf einzelne Datenelemente und Attribute steuern. Sie können z. B. Folgendes tun:

  • Erteilen von Berechtigungen für eine Tabelle, aber Einschränken des Zugriffs auf bestimmte Elemente in dieser Tabelle basierend auf bestimmten Primärschlüsselwerten. Ein Beispiel wäre eine Social-Network-Anwendung für Spiele, in der alle gespeicherten Spieldaten eines Benutzers in einer einzelnen Tabelle gespeichert werden, der Benutzer aber keinen Zugriff auf die Datenelemente hat, die er nicht besitzt. Dies wird in der folgenden Darstellung gezeigt:

    Ein Anwendungsfall, der einem Benutzer Zugriff auf Tabellenebene gewährt, aber den Zugriff auf bestimmte Datenelemente einschränkt.
  • Ausblenden von Informationen, so dass nur eine Teilmenge der Attribute für den Benutzer sichtbar ist. Ein Beispiel dafür ist eine Anwendung, die Flugdaten für nahegelegene Flughäfen, basierend auf dem Standort des Benutzers, anzeigt. Namen von Airlines, Ankunfts- und Abflugzeiten und Flugnummer werden alle angezeigt. Jedoch werden Attribute, wie z. B. Pilotennamen oder die Anzahl der Passagiere ausgeblendet, wie in der folgenden Abbildung dargestellt:

    Ein Anwendungsfall, bei dem Benutzern nur eine Teilmenge der Daten angezeigt wird, bestimmte Datenattribute jedoch ausgeblendet werden.

Zur Implementierung dieser Art von differenzierter Zugriffskontrolle, schreiben Sie eine IAM-Berechtigungsrichtlinie, die Bedingungen für den Zugriff auf Sicherheitsanmeldeinformationen und den dazugehörigen Berechtigungen angibt. Anschließend wenden Sie die Richtlinie auf Benutzer, Gruppen oder Rollen an, die Sie mit der IAM Konsole erstellen. Ihre IAM-Richtlinie kann den Zugriff auf einzelne Elemente in einer Tabelle oder auf die Attribute dieser Elemente oder auf beides gleichzeitig beschränken.

Sie können wahlweise den Web-Identitätsverbund verwenden, um den Zugriff von Benutzern zu kontrollieren, die durch Login with Amazon, Facebook oder Google authentifiziert werden. Weitere Informationen finden Sie unter Verwenden des Web-Identitätsverbunds.

Sie verwenden das IAM Condition Element, um eine detaillierte Zugriffskontrollrichtlinie zu implementieren. Indem ein Condition-Element einer Berechtigungsrichtlinie hinzugefügt wird, können Sie den Zugriff auf Elemente und Attribute in DynamoDB-Tabellen und -Indizes, basierend auf Ihren besonderen Geschäftsanforderungen, gewähren oder verweigern.

Nehmen wir beispielsweise eine mobile Spielanwendung, mit der Spieler aus einer Auswahl verschiedener Spiele wählen und diese auch spielen können. Die Anwendung nutzt eine DynamoDB-Tabelle mit dem Namen GameScores, um Highscores und andere Benutzerdaten zu verfolgen. Jedes Element in der Tabelle wird durch eine Benutzer-ID und den Namen des Spiels, das der Benutzer gespielt hat, eindeutig identifiziert. Die GameScores-Tabelle verfügt über einen Primärschlüssel, der aus einem Partitionsschlüssel (UserId) und einem Sortierschlüssel (GameTitle) besteht. Benutzer haben nur Zugriff auf Spieldaten, die mit ihrer Benutzer-ID verknüpft sind. Ein Benutzer, der ein Spiel spielen möchte, muss zu einer IAM-Rolle mit dem Namen GameRole gehören, der eine Sicherheitsrichtlinie zugewiesen ist.

Um Benutzerberechtigungen in dieser Anwendung zu verwalten, können Sie eine Berechtigungsrichtlinie wie die folgende schreiben:

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowAccessToOnlyItemsMatchingUserID", "Effect":"Allow", "Action":[ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:LeadingKeys":[ "${www.amazon.com:user_id}" ], "dynamodb:Attributes":[ "UserId", "GameTitle", "Wins", "Losses", "TopScore", "TopScoreDateTime" ] }, "StringEqualsIfExists":{ "dynamodb:Select":"SPECIFIC_ATTRIBUTES" } } } ] }

Zusätzlich zum Gewähren von Berechtigungen für bestimmte Action-Aktionen (Element GameScores) in der Tabelle Resource (Element ) verwendet das Element Condition folgende DynamoDB-spezifische Bedingungsschlüssel, die die Berechtigungen wie folgt begrenzen:

  • dynamodb:LeadingKeys – Dieser Bedingungsschlüssel gewährt Benutzern ausschließlich den Zugriff auf die Elemente, in denen der Partitions-Schlüsselwert ihrer Benutzer-ID entspricht. Diese ${www.amazon.com:user_id}-ID ist eine Ersetzungsvariable. Weitere Informationen zu Ersetzungsvariablen finden Sie unter Verwenden des Web-Identitätsverbunds.

  • dynamodb:Attributes – Dieser Bedingungsschlüssel begrenzt den Zugriff auf angegebene Attribute, sodass nur die Aktionen, die in der Berechtigungsrichtlinie aufgeführt sind, die Werte für diese Attribute zurückgeben können. Zusätzlich stellt die StringEqualsIfExists-Klausel sicher, dass die Anwendung immer eine Liste der spezifischen Attribute bereitstellen muss, nach denen gehandelt wird, und dass die Anwendung nicht alle Attribute anfordern kann.

Wenn eine IAM Richtlinie ausgewertet wird, ist das Ergebnis immer entweder wahr (Zugriff ist erlaubt) oder falsch (Zugriff verweigert). Wenn irgendein Teil des Condition-Elements False ist, dann wird die gesamte Richtlinie als False gewertet und der Zugriff wird verweigert.

Wichtig

Wenn Sie dynamodb:Attributes verwenden, müssen Sie die Namen aller Primärschlüssel und Indexschlüsselattribute für die Tabelle und alle sekundären Indizes, die in der Richtlinie aufgeführt sind, angeben. Andernfalls kann DynamoDB diese Schlüsselattribute nicht verwenden, um die angeforderte Aktion durchzuführen.

IAMRichtliniendokumente dürfen nur die folgenden Unicode-Zeichen enthalten: horizontales Tabulatorzeichen (U+0009), Zeilenvorschub (U+000A), Zeilenwechsel (U+000D) und Zeichen im Bereich U+0020 bis U+00FF.

Festlegung von Bedingungen: Verwenden von Bedingungsschlüsseln

AWS stellt eine Reihe vordefinierter Bedingungsschlüssel (AWS-weite Bedingungsschlüssel) für alle Dienste bereit, die die Zugriffskontrolle unterstützen. AWS IAM Sie können beispielsweise den aws:SourceIp-Bedingungsschlüssel verwenden, um die IP-Adresse des Anforderers zu prüfen, bevor eine Aktion durchgeführt werden darf. Weitere Informationen und eine Liste der AWS-weiten Schlüssel finden Sie im IAM Benutzerhandbuch unter Verfügbare Schlüssel für Bedingungen.

Die folgende Tabelle zeigt die DynamoDB-Service-spezifischen Bedingungsschlüssel, die für DynamoDB gültig sind.

DynamoDB-Bedingungsschlüssel Beschreibung
dynamodb:LeadingKeys

Repräsentiert das erste Schlüsselattribut der Tabelle – mit anderen Worten, der Partitionsschlüssel. Der Schlüsselname LeadingKeys ist im Plural, sogar wenn der Schlüssel mit Einzelelementaktionen verwendet wird. Zudem müssen Sie den Modifikator ForAllValues verwenden, wenn LeadingKeys in einer Bedingung genutzt wird.

dynamodb:Select

Repräsentiert den Parameter Select einer Query- oder Scan-Anforderung. Select kann jeden der folgenden Werte annehmen:

  • ALL_ATTRIBUTES

  • ALL_PROJECTED_ATTRIBUTES

  • SPECIFIC_ATTRIBUTES

  • COUNT

dynamodb:Attributes

Stellt eine Liste der Attributnamen in einer Anforderung oder der Attribute dar, die von einer Anforderung zurückgegeben werden. AttributesWerte werden auf die gleiche Weise benannt und haben dieselbe Bedeutung wie die Parameter für bestimmte API DynamoDB-Aktionen, wie im Folgenden dargestellt:

  • AttributesToGet

    Verwendet von: BatchGetItem, GetItem, Query, Scan

  • AttributeUpdates

    Verwendet von: UpdateItem

  • Expected

    Verwendet von: DeleteItem, PutItem, UpdateItem

  • Item

    Verwendet von: PutItem

  • ScanFilter

    Verwendet von: Scan

dynamodb:ReturnValues

Repräsentiert den Parameter ReturnValues einer Anforderung. ReturnValues kann jeden der folgenden Werte annehmen:

  • ALL_OLD

  • UPDATED_OLD

  • ALL_NEW

  • UPDATED_NEW

  • NONE

dynamodb:ReturnConsumedCapacity

Repräsentiert den Parameter ReturnConsumedCapacity einer Anforderung. ReturnConsumedCapacity kann einen der folgenden Werte annehmen:

  • TOTAL

  • NONE

Begrenzen des Benutzerzugriffs

Viele IAM Berechtigungsrichtlinien ermöglichen es Benutzern, nur auf die Elemente in einer Tabelle zuzugreifen, bei denen der Wert des Partitionsschlüssels mit der Benutzer-ID übereinstimmt. Beispielsweise begrenzen die zuvor genannten Grenzwerte der Spielanwendung den Zugriff so, dass Benutzer nur auf Spieldaten Zugriff haben, die mit ihrer Benutzer-ID verknüpft sind. Die IAM-Ersetzungsvariablen ${www.amazon.com:user_id}, ${graph.facebook.com:id} und ${accounts.google.com:sub} enthalten Benutzer-IDs für die Anmeldung bei Amazon, Facebook und Google. Um zu erfahren, wie eine Anwendung sich bei einem dieser Identitätsanbieter anmeldet und diese IDs erhält, klicken Sie auf Verwenden des Web-Identitätsverbunds.

Anmerkung

Jedes der Beispiele im folgenden Abschnitt legt die Effect-Klausel auf Allow fest und gibt nur die Aktionen, Ressourcen und Parameter an, die erlaubt sind. Zugriff hat lediglich das, was in der IAM-Richtlinie aufgeführt ist.

In einigen Fällen ist es möglich, diese Richtlinien umzuschreiben, damit sie auf Verweigerung basieren (dies bedeutet, die Effect-Klausel auf Deny festzulegen und die gesamte Logik in der Richtlinie umzukehren). Allerdings empfehlen wir, dass Sie die Nutzung von Richtlinien, die auf Verweigerung basieren, mit DynamoDB vermeiden, weil es verglichen mit Richtlinien, die auf Berechtigung basieren, schwierig ist, sie korrekt zu schreiben. Darüber hinaus können future Änderungen an der DynamoDB API (oder Änderungen an vorhandenen API Eingaben) dazu führen, dass eine auf Ablehnung basierende Richtlinie unwirksam wird.

Beispielrichtlinien: Verwenden von Bedingungen für die differenzierte Zugriffskontrolle

In diesem Abschnitt werden einige Richtlinien für die Implementierung einer differenzierten Zugriffskontrolle auf DynamoDB-Tabellen und Indizes dargestellt.

Anmerkung

Alle Beispiele verwenden die Region us-west-2 und enthalten ein fiktives Konto. IDs

Das folgende Video erklärt die detaillierte Zugriffskontrolle in DynamoDB anhand von Richtlinienbedingungen. IAM

1: Berechtigungen erteilen, die den Zugriff auf Elemente mit einem bestimmten Partitions-Schlüsselwert beschränken

Die folgende Berechtigungsrichtlinie erteilt Berechtigungen, die eine Reihe von DynamoDB-Aktionen in der GamesScore Tabelle erlauben. Sie verwendet den dynamodb:LeadingKeys-Bedingungsschlüssel, um Benutzeraktionen nur für diejenigen Elemente einzuschränken, deren UserID-Partitions-Schlüsselwert der eindeutigen Benutzer-ID von „Login with Amazon“ für diese Anwendung entspricht.

Wichtig

Die Liste von Aktionen schließt Berechtigungen für Scan nicht mit ein, weil Scan alle Elemente zurückgibt, unabhängig von den Hauptschlüsseln.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"FullAccessToUserItems", "Effect":"Allow", "Action":[ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:LeadingKeys":[ "${www.amazon.com:user_id}" ] } } } ] }
Anmerkung

Bei der Verwendung von Richtlinienvariablen müssen Sie explizit die Version 2012-10-17 in der Richtlinie angeben. Die Standardversion der Zugriffsrichtliniensprache, 2008-10-17, unterstützt keine Richtlinienvariablen.

Um schreibgeschützten Zugriff zu implementieren, können Sie alle Aktionen entfernen, die die Daten ändern können. In der folgenden Richtlinie werden nur die Aktionen in die Bedingung integriert, die schreibgeschützten Zugriff erteilen.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"ReadOnlyAccessToUserItems", "Effect":"Allow", "Action":[ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:LeadingKeys":[ "${www.amazon.com:user_id}" ] } } } ] }
Wichtig

Wenn Sie dynamodb:Attributes verwenden, müssen Sie die Namen aller Primärschlüssel und Indexschlüsselattribute für die Tabelle und alle sekundären Indizes, die in der Richtlinie aufgeführt sind, angeben. Andernfalls kann DynamoDB diese Schlüsselattribute nicht verwenden, um die angeforderte Aktion durchzuführen.

2: Berechtigungen erteilen, die den Zugriff auf bestimmte Attribute in einer Tabelle beschränken

Die folgende Berechtigungsrichtlinie erlaubt den Zugriff auf nur zwei bestimmte Attribute in einer Tabelle, indem sie den dynamodb:Attributes-Bedingungsschlüssel hinzufügt. Diese Attribute können in einem bedingten Schreib- oder Scan-Filter gelesen, geschrieben oder evaluiert werden.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"LimitAccessToSpecificAttributes", "Effect":"Allow", "Action":[ "dynamodb:UpdateItem", "dynamodb:GetItem", "dynamodb:Query", "dynamodb:BatchGetItem", "dynamodb:Scan" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:Attributes":[ "UserId", "TopScore" ] }, "StringEqualsIfExists":{ "dynamodb:Select":"SPECIFIC_ATTRIBUTES", "dynamodb:ReturnValues":[ "NONE", "UPDATED_OLD", "UPDATED_NEW" ] } } } ] }
Anmerkung

Die Richtlinie verfolgt einen Listen-Ansatz, der den Zugriff auf eine benannte Gruppe von Attributen erteilt. Sie können eine äquivalente Richtlinie schreiben, die stattdessen den Zugriff auf andere Attribute verweigert. Wir empfehlen diesen Ansatz einer Ablehnungsliste nicht. Benutzer können die Namen dieser verweigerten Attribute anhand des Prinzips der geringsten Rechte bestimmen, wie es in Wikipedia unter http://en.wikipedia erklärt wird. org/wiki/Principle_of_least_privilege und mithilfe einer Zulassungsliste alle erlaubten Werte aufzuzählen, anstatt die verweigerten Attribute anzugeben.

Diese Richtlinie erlaubt PutItem, DeleteItem und BatchWriteItem nicht. Diese Aktionen ersetzen immer das gesamte vorherige Element. Dies würde Benutzern ermöglichen, die vorherigen Werte für Attribute, auf die sie nicht zugriffsberechtigt sind, zu löschen.

Die StringEqualsIfExists-Klausel in der Berechtigungsrichtlinie gewährleistet Folgendes:

  • Wenn der Benutzer den Parameter Select angibt, dann muss sein Wert SPECIFIC_ATTRIBUTES sein. Diese Anforderung verhindert, dass die API Aktion unzulässige Attribute zurückgibt, z. B. aus einer Indexprojektion.

  • Wenn der Benutzer den Parameter ReturnValues angibt, dann muss sein Wert NONE, UPDATED_OLD oder UPDATED_NEW sein. Dies ist erforderlich, weil die UpdateItem-Aktion ebenfalls implizite Lesevorgänge durchführt, um zu überprüfen, ob ein zu ersetzendes Element existiert, und damit vorherige Attributwerte, wenn angefordert, zurückgegeben werden können. Eine solche Einschränkung von ReturnValues stellt sicher, dass Benutzer nur die zulässigen Attribute lesen oder schreiben können.

  • Die StringEqualsIfExists-Klausel gewährleistet, dass nur einer dieser Parameter – Select oder ReturnValues – pro Anforderung im Kontext der zulässigen Aktionen genutzt werden kann.

Es folgen einige Variationen dieser Richtlinie:

  • Um nur Leseaktionen zu erlauben, können Sie UpdateItem aus der Liste der zulässigen Aktionen entfernen. Da keine der verbleibenden Aktionen ReturnValues akzeptiert, können Sie ReturnValues aus der Bedingung entfernen. Sie können auch StringEqualsIfExists zu StringEquals ändern, weil der Parameter Select immer einen Wert hat (ALL_ATTRIBUTES, sofern nicht anders angegeben).

  • Um nur Leseaktionen zu erlauben, können Sie alles außer UpdateItem aus der Liste der zulässigen Aktionen entfernen. Da UpdateItem den Parameter Select nicht verwendet, können Sie Select aus der Bedingung entfernen. Sie müssen auch StringEqualsIfExists zu StringEquals ändern, weil der Parameter ReturnValues immer einen Wert hat (NONE sofern nicht anders angegeben).

  • Um alle Attribute zu erlauben, deren Name einem Muster entspricht, verwenden Sie StringLike anstatt StringEquals und verwenden Sie Platzhalter (*) für mehrere Zeichen.

3: Erteilen von Berechtigungen zum Verhindern von Aktualisierungen auf bestimmte Attribute

Die folgende Berechtigungsrichtlinie beschränkt den Benutzerzugriff, so dass nur die Aktualisierung bestimmter Attribute zulässig ist, die von dem dynamodb:Attributes-Bedingungsschlüssel identifiziert wurden. Die StringNotLike-Bedingung hindert eine Anwendung daran, die Attribute zu aktualisieren, die mithilfe des dynamodb:Attributes-Bedingungsschlüssels angegeben wurden.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"PreventUpdatesOnCertainAttributes", "Effect":"Allow", "Action":[ "dynamodb:UpdateItem" ], "Resource":"arn:aws:dynamodb:us-west-2:123456789012:table/GameScores", "Condition":{ "ForAllValues:StringNotLike":{ "dynamodb:Attributes":[ "FreeGamesAvailable", "BossLevelUnlocked" ] }, "StringEquals":{ "dynamodb:ReturnValues":[ "NONE", "UPDATED_OLD", "UPDATED_NEW" ] } } } ] }

Beachten Sie Folgendes:

  • Die UpdateItem-Aktion benötigt, wie andere Schreibaktionen, Lesezugriff auf die Elemente, damit sie Werte vor und nach dem Aktualisieren zurückgeben kann. In der Richtlinie beschränken Sie die Aktionen, so dass nur auf Attribute zugegriffen werden kann, die für eine Aktualisierung zulässig sind, indem der dynamodb:ReturnValues-Bedingungsschlüssel angegeben wird. Der Bedingungsschlüssel beschränkt ReturnValues in der Anforderung auf das Angeben von NONE, UPDATED_OLD oder UPDATED_NEW und schließt ALL_OLD oder ALL_NEW nicht mit ein.

  • Die PutItem- und DeleteItem-Aktionen ersetzen ein gesamtes Element und erlauben daher Anwendungen, beliebige Attribute zu ändern. Wenn Sie also eine Anwendung darauf beschränken, nur bestimmte Attribute zu aktualisieren, sollten Sie für diese keine Genehmigung erteilenAPIs.

4: Erteilen von Berechtigungen, um nur projizierte Attribute in einem Index abzufragen

Die folgende Berechtigungsrichtlinie erlaubt Abfragen über einen sekundären Index (TopScoreDateTimeIndex), indem der dynamodb:Attributes-Bedingungsschlüssel verwendet wird. Die Richtlinie beschränkt auch Abfragen auf das Anfordern nur bestimmter Attribute, die in den Index projiziert wurden.

Um eine Anwendung aufzufordern, eine Liste von Attributen in der Abfrage anzugeben, gibt die Richtlinie auch den Bedingungsschlüssel dynamodb:Select an, um sicherzustellen, dass der Parameter Select der Query-DynamoDB-Aktion SPECIFIC_ATTRIBUTES lautet. Die Liste von Attributen ist auf eine spezifische Liste beschränkt, die mithilfe des dynamodb:Attributes-Bedingungsschlüssels bereitgestellt wird.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"QueryOnlyProjectedIndexAttributes", "Effect":"Allow", "Action":[ "dynamodb:Query" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/index/TopScoreDateTimeIndex" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:Attributes":[ "TopScoreDateTime", "GameTitle", "Wins", "Losses", "Attempts" ] }, "StringEquals":{ "dynamodb:Select":"SPECIFIC_ATTRIBUTES" } } } ] }

Die folgende Berechtigungsrichtlinie ist ähnlich, aber die Abfrage muss alle Attribute anfordern, die in den Index projiziert wurden.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"QueryAllIndexAttributes", "Effect":"Allow", "Action":[ "dynamodb:Query" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/index/TopScoreDateTimeIndex" ], "Condition":{ "StringEquals":{ "dynamodb:Select":"ALL_PROJECTED_ATTRIBUTES" } } } ] }

5: Erteilen von Berechtigungen für das Beschränken des Zugriffs auf bestimmte Attribute und Partitions-Schlüsselwerte

Die folgende Berechtigungsrichtlinie erlaubt bestimmte DynamoDB-Aktionen in einer Tabelle (angegeben im Element Action) und einem Tabellenindex (angegeben im Element Resource). Die Richtlinie verwendet den dynamodb:LeadingKeys-Bedingungsschlüssel, um Berechtigungen nur auf die Elemente zu beschränken, deren Partitions-Schlüsselwert der Facebook-ID des Benutzers entspricht.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"LimitAccessToCertainAttributesAndKeyValues", "Effect":"Allow", "Action":[ "dynamodb:UpdateItem", "dynamodb:GetItem", "dynamodb:Query", "dynamodb:BatchGetItem" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores", "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/index/TopScoreDateTimeIndex" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:LeadingKeys":[ "${graph.facebook.com:id}" ], "dynamodb:Attributes":[ "attribute-A", "attribute-B" ] }, "StringEqualsIfExists":{ "dynamodb:Select":"SPECIFIC_ATTRIBUTES", "dynamodb:ReturnValues":[ "NONE", "UPDATED_OLD", "UPDATED_NEW" ] } } } ] }

Beachten Sie Folgendes:

  • Schreibaktionen, die von der Richtlinie (UpdateItem) zugelassen werden, können nur attribute-A oder attribute-B ändern.

  • Da die Richtlinie UpdateItem zulässt, kann eine Anwendung neue Elemente einfügen und die ausgeblendeten Attribute sind in den neuen Elementen dann Null. Wenn diese Attribute in TopScoreDateTimeIndex projiziert werden, bietet die Richtlinie den zusätzlichen Vorteil, dass Abfragen verhindert werden, die Abrufe aus der Tabelle verursachen.

  • Anwendungen können nur die in dynamodb:Attributes aufgeführten Attribute lesen. Mit dieser vorhandenen Richtlinie muss eine Anwendung den Parameter Select auf SPECIFIC_ATTRIBUTES in Leseanforderungen festlegen und es können nur Listenattribute angefordert werden. Die Anwendung kann bei Schreibanforderungen ReturnValues nicht auf ALL_OLD oder ALL_NEW festlegen und sie kann keine bedingten Schreibvorgänge basierend auf beliebigen anderen Attributen durchführen.

Verwandte Themen