Wie lange sollte ich nach dem Anwenden einer AWS IAM-Richtlinie warten, bis sie gültig ist?

74

Ich füge AWS IAM-Benutzerrichtlinien programmgesteuert hinzu und entferne sie. Die Anwendung dieser Richtlinien führt zu inkonsistenten Ergebnissen.

Dies kann beispielsweise erfolgreich sein oder auch nicht (ich verwende das Java 1.6.6 SDK):

  1. Beginnen Sie mit einem Benutzer, der aus einem bestimmten Bucket lesen kann
  2. Benutzerrichtlinien löschen (Richtlinien auflisten und dann für jede "deleteUserPolicy" aufrufen)
  3. Warten Sie, bis der Benutzer keine Benutzerrichtlinien mehr hat (rufen Sie "listUserPolicies" auf, bis ein leerer Satz zurückgegeben wird).
  4. Versuch, aus dem Eimer zu lesen (dies sollte fehlschlagen)

Wenn ich einen Haltepunkt zwischen # 3 und # 4 eingebe und einige Sekunden warte, kann der Benutzer nicht aus dem Bucket lesen, was ich erwarte. Wenn ich Haltepunkte entferne, kann der Benutzer aus dem Bucket lesen, was falsch ist.

(Dies ist auch inkonsistent, wenn ich eine Richtlinie hinzufüge und dann auf eine Ressource zugreife.)

Ich möchte wissen, wann sich eine Richtlinienänderung auf die Komponente (S3, SQS usw.) ausgewirkt hat, nicht nur auf das IAM-System. Gibt es eine Möglichkeit, eine Quittung oder Bestätigung davon zu erhalten? Oder gibt es eine gewisse Wartezeit?

Gibt es Unterlagen zu den Interna der Richtlinienanwendung?

(Zu Ihrer Information, ich habe meine Frage von https://forums.aws.amazon.com/thread.jspa?threadID=140383&tstart=0 kopiert. )

Ed Norris
quelle

Antworten:

70

Der Ausdruck "fast sofort" wird in den IAM-FAQ fünfmal verwendet und ist natürlich etwas subjektiv.

Da AWS ein global verteiltes System ist, müssen sich Ihre Änderungen verbreiten, und das gesamte System scheint so konzipiert zu sein, dass Verfügbarkeit und Partitionstoleranz im Gegensatz zu sofortiger Konsistenz bevorzugt werden .

Ich weiß nicht, ob Sie darüber nachgedacht haben, aber es liegt völlig im Rahmen der Möglichkeiten, dass Sie in Schritt 4 Ihres Ablaufs tatsächlich eine Folge von Bestanden, Nichtbestehen, Bestanden, Bestanden, Nicht Bestanden, Nicht Bestanden, Nicht Bestanden scheitern ... weil weder ein Bucket noch ein Objekt in einem Bucket tatsächlich eine einzelne Sache an einem einzigen Ort sind, wie das gemischte Konsistenzmodell verschiedener Aktionen in S3 zeigt, bei dem neue Objekte sofort konsistent sind, während Überschreibungen und Löschungen schließlich erfolgen konsistent ... Das Konzept einer Richtlinie, die "Auswirkungen" auf den Bucket oder ein Objekt hatte oder nicht, ist also kein völlig aussagekräftiges Konzept, da die Anwendung der Richtlinie selbst mit ziemlicher Sicherheit ein verteiltes Ereignis ist.

Um eine solche Anwendung von Richtlinien zu bestätigen, müsste AWS die Möglichkeit offenlegen, (zumindest indirekt) jede Entität abzufragen, die über eine replizierte Kopie dieser Richtlinie verfügt, um festzustellen, ob sie die aktuelle Version hat oder nicht ... was möglicherweise unpraktisch wäre oder gelinde gesagt unhandlich in einem System wie S3, das über 2 Billionen Objekte hinausgewachsen ist und Spitzenlasten von mehr als 1,1 Millionen Anfragen pro Sekunde bedient .

Offizielle AWS-Antworten auf diesen Forumsbeitrag enthalten weitere Informationen:

Während Änderungen, die Sie an IAM-Entitäten vornehmen, sofort in den IAM-APIs angezeigt werden, kann es einige Zeit dauern, bis die Informationen global wiedergegeben werden. In den meisten Fällen werden von Ihnen vorgenommene Änderungen in weniger als einer Minute angezeigt. Netzwerkbedingungen können manchmal die Verzögerung erhöhen, und einige Dienste können bestimmte Informationen ohne Anmeldeinformationen zwischenspeichern, die einige Zeit in Anspruch nehmen und ersetzt werden.

Die begleitende Antwort auf die Frage, was in der Zwischenzeit zu tun ist, lautete "Versuchen Sie es erneut".

Wir empfehlen eine Wiederholungsschleife nach einer leichten anfänglichen Verzögerung, da sich Ihre Änderungen in den meisten Fällen recht schnell widerspiegeln. Wenn Sie schlafen, wartet Ihr Code in den meisten Fällen viel zu lange und möglicherweise nicht lange genug für die seltenen Ausnahmen.

Wir überwachen aktiv die Leistung des Replikationssystems. Aber wie bei S3 garantieren wir nur eine eventuelle Konsistenz, keine bestimmte Obergrenze.

Michael - sqlbot
quelle
10
Normalerweise sehe ich die Änderung in 5 oder 10 Sekunden. Es ist definitiv nicht sofort, aber es ist nicht sehr langsam.
Charles Engelke
1
Vielen Dank für die Antwort - zum Glück ist dies Testcode und ich habe die Freiheit, meinen aktuellen Ansatz grundsätzlich wegzuwerfen und etwas anderes zu tun.
Ed Norris
Ich bin auf dasselbe Problem gestoßen. Schrieb ein Skript, um ein neues CodePipeline-Projekt zu erstellen. Das InvalidStructureException: CodePipeline is not authorized to perform AssumeRole on role <arn of the freshly created role>Problem tritt so lange auf, bis ich manuell 10 Sekunden zwischen der Rollenerstellung und der CodePipeline-Erstellung gewartet habe.
Trung Hieu Nguyen
18

Ich habe hier eine weitaus weniger wissenschaftliche Antwort ... aber ich denke, es wird einigen anderen Menschen helfen, sich weniger verrückt zu fühlen :). Ich dachte immer, die Dinge funktionierten nicht, während sie nur mehr Zeit in Anspruch nahmen als ich erwartet hatte.

Letzte Nacht habe ich eine Inline-Richtlinie hinzugefügt, damit ein Host Parameter vom Systemmanager abrufen kann. Ich dachte, es funktioniert nicht, weil meine CLI-Befehle viele Minuten nach der Änderung (vielleicht 5 oder so) immer noch fehlschlugen. Dann fingen sie an zu arbeiten. Das war also eine ziemlich große Verzögerung.

Gerade habe ich diese Richtlinie entfernt und es dauerte 2-3 Minuten (genug, um dies zu googeln und ein paar andere Seiten zu lesen), bis mein Host den Zugriff verlor.

Im Allgemeinen sind die Dinge auch für mich ziemlich bissig, aber wenn Sie ziemlich sicher sind, dass etwas funktionieren sollte und nicht, tun Sie sich selbst einen Gefallen und warten Sie 10 Minuten. Leider klingt die Automatisierung nach IAM-Änderungen dadurch schwieriger als gedacht!

John Humphreys - w00te
quelle
Ich habe einen neuen IAM-Schlüssel für SES erstellt. Es funktioniert in us-east-1, aber ich bin in eu-central-1 "ohne Sandbox", aber dort wird behauptet, der Schlüssel sei ungültig. Ich denke, es ist mehr als eine Stunde, in der ich ihn erstellt habe. funktioniert immer noch nicht. Ich werde schlafen und sehen, ob es morgen funktioniert.
Leif Neland
Nein, 7 Stunden später funktioniert der Schlüssel immer noch nur in us-east-1
Leif Neland
1
In meinem Fall bedeutete "fast sofort" 7 min. Eine Auszeit zu nehmen war eine produktivere Nutzung meiner Zeit, als ständig zu
aktualisieren