Valutazione delle policy IAM e deny esplicito

Uso di AWS Security per sviluppatori

Rahul Singh

Technical Product Manager

Una policy è un elenco di regole

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

Tre campi di una statement IAM impilati su una singola spina e numerati da uno a tre: Effect è allow o deny, Action è quale chiamata API, e Resource è l'oggetto indicato, nominato da un ARN.

Uso di AWS Security per sviluppatori

Una policy è un elenco di regole

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

Quattro campi di una statement IAM impilati su una singola spina e numerati da uno a quattro: Effect è allow o deny, Action è quale chiamata API, Resource è l'oggetto indicato nominato da un ARN, e Condition sono le circostanze richieste. Una riga finale recita: quattro campi, una regola.

Uso di AWS Security per sviluppatori

Tre campi chiedono, uno risponde

La domanda

  • Action: è questa la chiamata
  • Resource: è questo il target
  • Condition: le circostanze coincidono

La risposta

  • Effect: allow o deny

Quattro campi di una statement IAM impilati verticalmente: Action, Resource e Condition raggruppati da una parentesi etichettata "La domanda", ed Effect raggruppato da una seconda parentesi etichettata "La risposta".

Uso di AWS Security per sviluppatori

Le regole arrivano da più posti

Un documento di policy collegato a un ruolo, con una freccia dal ruolo verso un bucket.

Basate sull'identità

  • Collegate al ruolo
  • Cosa può fare questo ruolo
Uso di AWS Security per sviluppatori

Le regole arrivano da più posti

Un documento di policy collegato a un ruolo, con una freccia dal ruolo verso un bucket.

Un documento di policy collegato a una risorsa, con una freccia dal principal verso un bucket.

Basate sull'identità

  • Collegate al ruolo
  • Cosa può fare questo ruolo

Basate sulla risorsa

  • Collegate all'oggetto da raggiungere
  • Chi può accedere a questo bucket
Uso di AWS Security per sviluppatori

Quando le regole non concordano

{"Effect": "Allow", "Action": "s3:*", "Resource": "*"}
{"Effect": "Deny",  "Action": "s3:DeleteObject", "Resource": "*"}
Uso di AWS Security per sviluppatori

Quando le regole non concordano

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

Request: s3:DeleteObject risulta: Denied.

Un deny esplicito batte qualsiasi allow, anche se ampio

Una statement di allow e una di deny che confluiscono nella stessa richiesta; il percorso di deny è evidenziato e l'esito è denied.

Uso di AWS Security per sviluppatori

Ordine di valutazione e deny implicito

Diagramma di flusso della valutazione delle policy IAM: una richiesta API verifica prima un deny esplicito applicabile, poi un allow applicabile, e arriva al deny implicito se non trova nessuno dei due.

  • Deny esplicito: qualcosa ha detto no
  • Allow: qualcosa ha detto sì e niente ha detto no
  • Deny implicito: nessuno ha detto nulla
Uso di AWS Security per sviluppatori

Quattro richieste, tre esiti

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

{"Effect": "Deny", "Action": "s3:DeleteObject",
 "Resource": "*"}
  • s3:GetObject → allow: l'allow ampio lo copre
  • s3:DeleteObject → deny esplicito: una statement dice no
  • kms:Decrypt, dynamodb:GetItem → deny implicito: questa policy non menziona quei servizi
  • KMS gestisce le chiavi di cifratura; DynamoDB è un database key-value gestito
Uso di AWS Security per sviluppatori

Perché aggiungere permessi spesso non basta

Stesso errore, due cause

Deny esplicito

  • Un altro allow non cambia nulla
  • Trova il deny, poi limitane l'ambito o rimuovilo

Deny implicito

  • Un allow mirato basta
  • Sull'identità che ha effettuato la chiamata

Un errore AccessDenied che si dirama in due cause. A sinistra è stato trovato un deny, quindi altri allow non cambiano l'esito. A destra non è stato trovato un allow, quindi un allow mirato sull'identità chiamante lo risolve.

Uso di AWS Security per sviluppatori

Esercitiamoci!

Uso di AWS Security per sviluppatori

Preparing Video For Download...