Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

IAM-Policies: wer darf was

Nach dieser Lektion: Ich kann eine Policy lesen und sagen, ob ein Aufruf erlaubt ist.

Lektion, 55 Min.Keine Befehle

Wer entscheidet, welche Tür aufgeht?

Der Schülerausweis öffnet die Tür zur Bibliothek, aber nicht die zum Lehrerzimmer. Jemand hat aufgeschrieben, welche Türen jeder Ausweis öffnen darf.

In der Cloud ist es genauso. Eine IAM-Policy ist die geschriebene Liste dessen, was eine Person oder ein Programm tun darf. Diese Lektion zeigt, wie Sie eine Policy lesen und sagen, ob ein Aufruf erlaubt ist.

Am Ende dieser Lektion

Notiz

Ich kann eine Policy lesen und sagen, ob ein Aufruf erlaubt ist.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Policyein Dokument, das aufführt, was getan werden darf und was nicht
Statementeine einzelne Regel innerhalb einer Policy
Effectob ein Statement erlaubt oder verweigert
Actionder Aufruf, der gemacht wirds3:GetObject
Resourcedas, worauf der Aufruf gemacht wird
Minimalprinzipnur den Zugriff geben, den eine Aufgabe braucht

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Eine Policy ist eine Liste von Statements

Eine Policy ist ein JSON-Dokument. Es hat eine Version und eine Liste namens Statement. Jedes Statement sagt drei Dinge: den Effect, die Action und die Resource.

Der Effect ist Allow oder Deny. Die Action ist der Aufruf, etwa s3:GetObject, der eine Datei liest. Die Resource ist das, worauf der Aufruf geht, benannt durch einen langen Text, einen ARN. Diese Policies sind erfunden. Nichts hier braucht ein Konto.

Run: eine Policy lesen

Code: python
policy = {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": ["s3:GetObject", "s3:PutObject"],
            "Resource": "arn:aws:s3:::fotos-demo/*",
        },
        {
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::fotos-demo/privat/*",
        },
    ],
}

for anweisung in policy["Statement"]:
    print(anweisung["Effect"], anweisung["Action"], anweisung["Resource"])
# Ändern Sie "Deny" in "Allow". Das Programm liest es trotzdem. Ändert sich die Bedeutung?

Ein Stern passt auf jede Zeichenfolge

Jeden Dateinamen aufzuschreiben, würde ewig dauern. Darum darf ein Muster einen Stern enthalten. Ein Stern passt auf jede Folge von Zeichen, auch auf gar keine.

Die Resource "arn:aws:s3:::fotos-demo/" passt auf jedes Objekt in diesem Bucket. Die Action "s3:" passt auf jeden S3-Aufruf. Ein Muster ohne Stern muss genau übereinstimmen.

Beispiel: auf welche Texte ein Muster passt

MusterTextPasst?
s3:*s3:GetObjectJa
s3:*sqs:SendMessageNein, es beginnt nicht mit s3:
s3:Get*s3:GetObjectJa
s3:Get*s3:PutObjectNein
fotos/*fotos/Ja, der Stern passt auf nichts
*.jpgkatze.jpgJa
s3:GetObjects3:GetObjectAclNein, kein Stern, also genau

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Deny gewinnt immer

Um einen Aufruf zu entscheiden, suchen Sie jedes Statement, dessen Action und Resource beide auf ihn passen. Wenden Sie dann drei Regeln an.

Sagt ein passendes Statement Deny, wird der Aufruf verweigert. Das ist ein ausdrückliches Deny, und es gewinnt gegen jedes Allow. Verweigert keins, aber eins erlaubt, ist der Aufruf erlaubt. Passt nichts, wird er trotzdem verweigert. Das ist ein stilles Deny.

Beispiel: drei Aufrufe auf der Fotos-Policy

AufrufPassende StatementsErgebnis
s3:GetObject auf fotos-demo/katze.jpgnur AllowErlaubt
s3:GetObject auf fotos-demo/privat/ausweis.jpgAllow und DenyVerweigert: ausdrückliches Deny gewinnt
sqs:SendMessage auf eine WarteschlangekeineVerweigert: stilles Deny

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein häufiger Fehler

Warnung

Viele denken, ein Aufruf sei erlaubt, solange keine Policy ihn verbietet. Es ist umgekehrt. Ein Aufruf wird verweigert, solange kein Statement ihn erlaubt, und ein Deny schlägt jedes Allow.

Run: drei Regeln in Code

Code: python
passend = ["Allow", "Deny"]

if "Deny" in passend:
    ergebnis = "verweigert: ausdrückliches Deny"
elif "Allow" in passend:
    ergebnis = "erlaubt"
else:
    ergebnis = "verweigert: stilles Deny"
print(ergebnis)
# Ändern Sie passend in ["Allow"], dann in []. Was gibt jede Fassung aus?

Nur das Wenigste geben, das funktioniert

Eine Foto-Seite muss Fotos lesen und hinzufügen. Löschen muss sie nicht, und die Warteschlangen braucht sie auch nicht. Darum nennt ihre Policy nur diese zwei Actions, und nur für diesen einen Bucket.

Das ist das Minimalprinzip. Wird die Seite einmal missbraucht, endet der Schaden bei dem, was die Policy erlaubte.

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.