Autorizzare l'accesso ai servizi con IAM

Distribuire applicazioni su AWS

Dunieski Otano

Amazon Web Services Solutions Architect

La chiave nel commit

  • Una access key a lunga durata finisce nel repo
  • Un bot scanner la trova e fa salire i costi
  • Ruoli e minimo privilegio evitano tutto questo

Chiave di accesso AWS trapelata per errore in un commit, segnalata come rischio di sicurezza

Distribuire applicazioni su AWS

Principals IAM: utenti, ruoli e policy

Diagramma IAM a tre colonne: Principal (utente, servizio o ruolo) a sinistra, documento Policy con azioni Allow/Deny al centro, IAM Role con credenziali temporanee e di breve durata a destra

  • Principal: chi effettua la richiesta
  • Policy: documento JSON che concede permessi
  • Role: insieme di permessi che un'entità può assumere
  • I ruoli si assumono; gli utenti hanno credenziali longeve
Distribuire applicazioni su AWS

Credenziali programmatiche fatte bene

  • Lambda: un execution role concede i permessi
  • EC2: un instance profile fornisce le credenziali del ruolo
  • ECS: task role delimita i permessi per task
  • Niente access key longeve in codice o config

Tre servizi compute AWS usano ruoli senza chiavi longeve: Lambda con execution role, EC2 con instance profile ed ECS con task role, ciascuno con rotazione automatica delle credenziali

Distribuire applicazioni su AWS

AssumeRole e STS

  • STS AssumeRole: ottieni credenziali temporanee per un ruolo
  • Usato per accesso cross-account
  • La trust policy controlla chi può assumere il ruolo
  • Le credenziali sono a breve durata e scadono da sole

Flusso STS AssumeRole cross-account: il chiamante nell'Account A richiede credenziali a STS, la trust policy sul ruolo dell'Account B lo consente, STS restituisce credenziali a breve durata che scadono automaticamente

Distribuire applicazioni su AWS

Minimo privilegio e struttura delle policy

Una policy ha tre parti obbligatorie (Effect, Action e Resource) più un Condition facoltativo:

{
  "Effect": "Allow",
  "Action": "dynamodb:PutItem",
  "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/Orders",
  "Condition": {
    "Bool": { "aws:SecureTransport": "true" }
  }
}
Distribuire applicazioni su AWS

Dove finisce IAM e inizia il tuo codice


IAM: il livello dei servizi

  • Autorizza le chiamate AWS API: questo ruolo può chiamare questa operazione?
  • Non può imporre regole per tenant o per record

Il tuo codice: il livello dei dati

  • Verifica l'utente autenticato rispetto ai dati richiesti
  • Usali insieme: IAM protegge il servizio, il tuo codice i dati
Distribuire applicazioni su AWS

Un execution role a minimo privilegio, nella pratica

Execution role minimo per Lambda: singolo permesso DynamoDB PutItem concesso solo su una tabella ARN, senza caratteri jolly su azione o risorsa

  • Una Lambda deve scrivere su una tabella DynamoDB
  • Concedi dynamodb:PutItem solo sull'ARN di quella tabella
  • Niente caratteri jolly su azione o risorsa
  • Aggiungi altro solo se una chiamata reale viene negata
Distribuire applicazioni su AWS

Esercitiamoci!

Distribuire applicazioni su AWS

Preparing Video For Download...