IAM-Richtlinienauswertung und explizites Deny

AWS-Sicherheit für Entwickler:innen nutzen

Rahul Singh

Technical Product Manager

Eine Policy ist eine Liste von Regeln

{
  "Effect": "Allow",
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::reports/*",
  "Condition": {
    "Bool": {
      "aws:SecureTransport": "true"
    },
    "IpAddress": {
      "aws:SourceIp": "203.0.113.0/24"
    }
  }
}

Drei Felder einer IAM-Anweisung, entlang einer Achse gestapelt und von eins bis drei nummeriert: Effect ist allow oder deny, Action ist welcher API-Call, und Resource ist, worauf sie zeigt, benannt durch eine ARN.

AWS-Sicherheit für Entwickler:innen nutzen

Eine Policy ist eine Liste von Regeln

{
  "Effect": "Allow",
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::reports/*",
  "Condition": {
    "Bool": {
      "aws:SecureTransport": "true"
    },
    "IpAddress": {
      "aws:SourceIp": "203.0.113.0/24"
    }
  }
}

Vier Felder einer IAM-Anweisung, entlang einer Achse gestapelt und von eins bis vier nummeriert: Effect ist allow oder deny, Action ist welcher API-Call, Resource ist, worauf sie zeigt, benannt durch eine ARN, und Condition beschreibt die erforderlichen Umstände. Abschließender Satz: vier Felder, eine Regel.

AWS-Sicherheit für Entwickler:innen nutzen

Drei Felder fragen, ein Feld antwortet

Die Frage

  • Action: ist das der Call
  • Resource: ist das das Ziel
  • Condition: passen die Umstände

Die Antwort

  • Effect: allow oder deny

Vier Felder einer IAM-Anweisung vertikal gestapelt: Action, Resource und Condition durch eine Klammer als „Die Frage" gruppiert, und Effect durch eine zweite Klammer als „Die Antwort" gruppiert.

AWS-Sicherheit für Entwickler:innen nutzen

Regeln kommen aus mehr als einer Quelle

Ein Policy-Dokument ist an eine Rolle angehängt, mit einem Pfeil von der Rolle zu einem Bucket.

Identitätsbasiert

  • An die Rolle angehängt
  • Was kann diese Rolle tun
AWS-Sicherheit für Entwickler:innen nutzen

Regeln kommen aus mehr als einer Quelle

Ein Policy-Dokument ist an eine Rolle angehängt, mit einem Pfeil von der Rolle zu einem Bucket.

Ein Policy-Dokument ist an eine Ressource angehängt, mit einem Pfeil vom Principal zu einem Bucket.

Identitätsbasiert

  • An die Rolle angehängt
  • Was kann diese Rolle tun

Ressourcenbasiert

  • An das Zielobjekt angehängt
  • Wer darf auf diesen Bucket zugreifen
AWS-Sicherheit für Entwickler:innen nutzen

Wenn Regeln einander widersprechen

{"Effect": "Allow", "Action": "s3:*", "Resource": "*"}
{"Effect": "Deny",  "Action": "s3:DeleteObject", "Resource": "*"}
AWS-Sicherheit für Entwickler:innen nutzen

Wenn Regeln einander widersprechen

{"Effect": "Allow", "Action": "s3:*", "Resource": "*"}
{"Effect": "Deny",  "Action": "s3:DeleteObject", "Resource": "*"}

Anfrage: s3:DeleteObject ergibt: Denied.

Ein explizites Deny sticht jedes Allow, egal wie breit

Eine Allow- und eine Deny-Anweisung führen beide zu einer Anfrage; der Deny-Pfad ist hervorgehoben und das Ergebnis als denied markiert.

AWS-Sicherheit für Entwickler:innen nutzen

Die Auswertungsreihenfolge und implizites Deny

Ablaufdiagramm der IAM-Richtlinienauswertung: Eine API-Anfrage prüft zuerst auf ein zutreffendes explizites Deny, dann auf ein zutreffendes Allow, und landet beim impliziten Deny, wenn beides fehlt.

  • Explizites Deny: irgendwo steht nein
  • Allow: irgendwo steht ja, und nirgends steht nein
  • Implizites Deny: nirgends steht irgendetwas
AWS-Sicherheit für Entwickler:innen nutzen

Vier Anfragen, drei Ergebnisse

{"Effect": "Allow", "Action": "s3:*",
 "Resource": "*"}

{"Effect": "Deny", "Action": "s3:DeleteObject",
 "Resource": "*"}
  • s3:GetObject → allow: das breite Allow deckt es ab
  • s3:DeleteObject → explizites Deny: eine Anweisung sagt nein
  • kms:Decrypt, dynamodb:GetItem → implizites Deny: diese Policy erwähnt diese Services nicht
  • KMS verwaltet Schlüssel für Verschlüsselung; DynamoDB ist eine verwaltete Key-Value-Datenbank
AWS-Sicherheit für Entwickler:innen nutzen

Warum Berechtigungen hinzufügen oft nicht hilft

Gleicher Fehler, zwei Ursachen

Explizites Deny

  • Ein weiteres Allow ändert nichts
  • Finde das Deny, dann einschränken oder entfernen

Implizites Deny

  • Ein eng gefasstes Allow
  • Auf der Identität, die den Call abgesetzt hat

Ein AccessDenied-Fehler verzweigt in zwei Ursachen. Links wurde ein Deny gefunden, daher ändern weitere Allows nichts. Rechts wurde kein Allow gefunden, daher behebt ein enges Allow auf der aufrufenden Identität das Problem.

AWS-Sicherheit für Entwickler:innen nutzen

Lass uns üben!

AWS-Sicherheit für Entwickler:innen nutzen

Preparing Video For Download...