Evaluarea politicilor IAM și refuzul explicit

Securitatea AWS pentru dezvoltatori

Rahul Singh

Technical Product Manager

O politică este o listă de reguli

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

Trei câmpuri ale unei declarații IAM aliniate pe o singură axă și numerotate de la unu la trei: Effect este allow sau deny, Action este apelul API, iar Resource este lucrul vizat, identificat printr-un ARN.

Securitatea AWS pentru dezvoltatori

O politică este o listă de reguli

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

Patru câmpuri ale unei declarații IAM aliniate pe o singură axă și numerotate de la unu la patru: Effect este allow sau deny, Action este apelul API, Resource este lucrul vizat, identificat printr-un ARN, iar Condition reprezintă circumstanțele necesare. O linie finală spune: patru câmpuri, o regulă.

Securitatea AWS pentru dezvoltatori

Trei câmpuri întreabă, unul răspunde

Întrebarea

  • Action: este acesta apelul
  • Resource: este aceasta ținta
  • Condition: se potrivesc circumstanțele

Răspunsul

  • Effect: allow sau deny

Cele patru câmpuri ale unei declarații IAM aliniate vertical: Action, Resource și Condition grupate sub o acoladă etichetată "Întrebarea", iar Effect grupat sub o a doua acoladă etichetată "Răspunsul".

Securitatea AWS pentru dezvoltatori

Regulile provin din mai multe surse

Un document de politică atașat unui rol, cu o săgeată de la rol către un bucket.

Bazat pe identitate

  • Atașat rolului
  • Ce poate face acest rol
Securitatea AWS pentru dezvoltatori

Regulile provin din mai multe surse

Un document de politică atașat unui rol, cu o săgeată de la rol către un bucket.

Un document de politică atașat unei resurse, cu o săgeată de la principal către un bucket.

Bazat pe identitate

  • Atașat rolului
  • Ce poate face acest rol

Bazat pe resursă

  • Atașat lucrului accesat
  • Cine poate accesa acest bucket
Securitatea AWS pentru dezvoltatori

Când regulile se contrazic

{"Effect": "Allow", "Action": "s3:*", "Resource": "*"}
{"Effect": "Deny",  "Action": "s3:DeleteObject", "Resource": "*"}
Securitatea AWS pentru dezvoltatori

Când regulile se contrazic

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

Cerere: s3:DeleteObject rezultă în: Refuzat.

Un refuz explicit are prioritate față de orice permisiune, oricât de largă

O declarație allow și o declarație deny, ambele influențând aceeași cerere, cu calea deny evidențiată și rezultatul marcat ca refuzat.

Securitatea AWS pentru dezvoltatori

Ordinea evaluării și refuzul implicit

Diagramă a evaluării politicilor IAM: o cerere API verifică mai întâi dacă există un refuz explicit aplicabil, apoi o permisiune aplicabilă, iar dacă niciuna nu este găsită, ajunge la refuz implicit.

  • Refuz explicit: ceva a spus nu
  • Allow: ceva a spus da, și nimic nu a spus nu
  • Refuz implicit: nimic nu a spus nimic
Securitatea AWS pentru dezvoltatori

Patru cereri, trei rezultate

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

{"Effect": "Deny", "Action": "s3:DeleteObject",
 "Resource": "*"}
  • s3:GetObject → allow: permisiunea largă o acoperă
  • s3:DeleteObject → refuz explicit: o declarație spune nu
  • kms:Decrypt, dynamodb:GetItem → refuz implicit: această politică nu menționează niciodată aceste servicii
  • KMS stochează chei de criptare; DynamoDB este o bază de date gestionată de tip cheie-valoare
Securitatea AWS pentru dezvoltatori

De ce adăugarea de permisiuni eșuează adesea

Aceeași eroare, două cauze

Refuz explicit

  • O altă permisiune nu schimbă nimic
  • Găsește refuzul, apoi limitează-l sau elimină-l

Refuz implicit

  • O singură permisiune restrânsă
  • Pe identitatea care a făcut apelul

O eroare AccessDenied care se ramifică în două cauze. În stânga, a fost găsit un refuz, așa că mai multe permisiuni nu schimbă nimic. În dreapta, nu a fost găsită nicio permisiune, așa că o singură permisiune restrânsă pe identitatea apelantă rezolvă problema.

Securitatea AWS pentru dezvoltatori

Hai să exersăm!

Securitatea AWS pentru dezvoltatori

Preparing Video For Download...