Best practice di sicurezza - AWS Guida prescrittiva

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Best practice di sicurezza

La corretta gestione dell'autenticazione, dei controlli di accesso e della sicurezza è fondamentale per un utilizzo sicuro di Terraform Provider. AWS Questa sezione descrive le migliori pratiche in materia di:

  • Ruoli e autorizzazioni IAM per l'accesso con privilegi minimi

  • Protezione delle credenziali per impedire l'accesso non autorizzato ad account e risorse AWS

  • Crittografia dello stato remoto per proteggere i dati sensibili

  • Scansione dell'infrastruttura e del codice sorgente per identificare configurazioni errate

  • Controlli di accesso per l'archiviazione remota dello stato

  • Applicazione delle policy di Sentinel per implementare le barriere di governance

Seguire queste best practice aiuta a rafforzare il livello di sicurezza quando si utilizza Terraform per gestire l'infrastruttura. AWS

Segui il principio del privilegio minimo

Il privilegio minimo è un principio di sicurezza fondamentale che si riferisce alla concessione solo delle autorizzazioni minime richieste a un utente, processo o sistema per eseguire le funzioni previste. È un concetto fondamentale nel controllo degli accessi e una misura preventiva contro l'accesso non autorizzato e le potenziali violazioni dei dati.

Il principio del privilegio minimo viene enfatizzato più volte in questa sezione perché si riferisce direttamente al modo in cui Terraform autentica ed esegue azioni contro provider di cloud come. AWS

Quando si utilizza Terraform per fornire e gestire AWS le risorse, agisce per conto di un'entità (utente o ruolo) che richiede le autorizzazioni appropriate per effettuare chiamate API. Non seguire il privilegio minimo comporta gravi rischi per la sicurezza:

  • Se Terraform dispone di autorizzazioni eccessive oltre a quelle necessarie, un'errata configurazione involontaria potrebbe apportare modifiche o eliminazioni indesiderate.

  • Le concessioni di accesso eccessivamente permissive aumentano l'ambito di impatto se i file di stato o le credenziali di Terraform vengono compromessi.

  • Il mancato rispetto del privilegio minimo contrasta con le migliori pratiche di sicurezza e i requisiti di conformità normativa per la concessione dell'accesso minimo richiesto.

Uso di ruoli IAM

Utilizza i ruoli IAM anziché gli utenti IAM, ove possibile, per migliorare la sicurezza con AWS Terraform Provider. I ruoli IAM forniscono credenziali di sicurezza temporanee che ruotano automaticamente, eliminando la necessità di gestire le chiavi di accesso a lungo termine. I ruoli offrono anche controlli di accesso precisi tramite le policy IAM.

Concedi l'accesso con il minimo privilegio utilizzando le policy IAM

Costruisci con cura le policy IAM per garantire che i ruoli e gli utenti dispongano solo del set minimo di autorizzazioni richiesto per il loro carico di lavoro. Inizia con una policy vuota e aggiungi in modo iterativo i servizi e le azioni consentiti. Per eseguire questa operazione:

  • Abilita IAM Access Analyzer per valutare le policy ed evidenziare le autorizzazioni inutilizzate che possono essere rimosse.

  • Esamina manualmente le policy per rimuovere tutte le funzionalità che non sono essenziali per la responsabilità prevista del ruolo.

  • Utilizza le variabili e i tag delle policy IAM per semplificare la gestione delle autorizzazioni.

Policy ben strutturate garantiscono l'accesso sufficiente per adempiere alle responsabilità del carico di lavoro e nient'altro. Definisci le azioni a livello operativo e consenti le chiamate solo alle API richieste su risorse specifiche.

Seguire questa best practice riduce la portata dell'impatto e segue i principi di sicurezza fondamentali della separazione dei compiti e dell'accesso con privilegi minimi. Inizia l'accesso aperto e rigoroso gradualmente, se necessario, invece di iniziare con open access e provare a limitare l'accesso in un secondo momento.

Assumi ruoli IAM per l'autenticazione locale

Quando esegui Terraform localmente, evita di configurare chiavi di accesso statiche. Utilizza invece i ruoli IAM per concedere temporaneamente l'accesso privilegiato senza esporre credenziali a lungo termine.

Innanzitutto, crea un ruolo IAM con le autorizzazioni minime necessarie e aggiungi una relazione di fiducia che consenta di assumere il ruolo IAM dal tuo account utente o dall'identità federata. Ciò autorizza l'uso temporaneo del ruolo.

Esempio di politica di relazione fiduciaria:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/terraform-execution" }, "Action": "sts:AssumeRole" } ] }

Quindi, esegui il AWS CLI comando aws sts assume-role per recuperare credenziali di breve durata per il ruolo. Queste credenziali sono generalmente valide per un'ora.

AWS CLI esempio di comando:

aws sts assume-role --role-arn arn:aws:iam::111122223333:role/terraform-execution --role-session-name terraform-session-example

L'output del comando contiene una chiave di accesso, una chiave segreta e un token di sessione che è possibile utilizzare per l'autenticazione per AWS:

{ "AssumedRoleUser": { "AssumedRoleId": "AROA3XFRBF535PLBIFPI4:terraform-session-example", "Arn": "arn:aws:sts::111122223333:assumed-role/terraform-execution/terraform-session-example" }, "Credentials": { "SecretAccessKey": " wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": " AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtpZ3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE", "Expiration": "2024-03-15T00:05:07Z", "AccessKeyId": "ASIAIOSFODNN7EXAMPLE" } }

Il AWS Provider può anche gestire automaticamente l'assunzione del ruolo.

Esempio di configurazione del provider per l'assunzione di un ruolo IAM:

provider "aws" { assume_role { role_arn = "arn:aws:iam::111122223333:role/terraform-execution" session_name = "terraform-session-example" } }

Ciò garantisce privilegi elevati esclusivamente per la durata della sessione Terraform. Le chiavi temporanee non possono essere divulgate perché scadono automaticamente dopo la durata massima della sessione.

I vantaggi principali di questa best practice includono una maggiore sicurezza rispetto alle chiavi di accesso di lunga durata, controlli di accesso dettagliati sul ruolo per i privilegi minimi e la possibilità di revocare facilmente l'accesso modificando le autorizzazioni del ruolo. Utilizzando i ruoli IAM, eviti anche di dover archiviare direttamente i segreti localmente negli script o su disco, il che ti aiuta a condividere la configurazione Terraform in modo sicuro tra un team.

Usa i ruoli IAM per l'autenticazione Amazon EC2

Quando esegui Terraform da istanze Amazon Elastic Compute Cloud (Amazon EC2), evita di archiviare le credenziali a lungo termine a livello locale. Utilizza invece i ruoli IAM e i profili di istanza per concedere automaticamente le autorizzazioni con privilegi minimi.

Innanzitutto, crea un ruolo IAM con le autorizzazioni minime e assegna il ruolo al profilo dell'istanza. Il profilo di istanza consente alle istanze EC2 di ereditare le autorizzazioni definite nel ruolo. Quindi, avvia le istanze specificando il profilo dell'istanza. L'istanza verrà autenticata tramite il ruolo allegato.

Prima di eseguire qualsiasi operazione Terraform, verifica che il ruolo sia presente nei metadati dell'istanza per confermare che le credenziali siano state ereditate con successo.

TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/iam/security-credentials/

Questo approccio evita l'inserimento di AWS chiavi permanenti negli script o nella configurazione Terraform all'interno dell'istanza. Le credenziali temporanee sono rese disponibili a Terraform in modo trasparente tramite il ruolo e il profilo dell'istanza.

I principali vantaggi di questa best practice includono una maggiore sicurezza rispetto alle credenziali a lungo termine, un sovraccarico di gestione delle credenziali ridotto e la coerenza tra ambienti di sviluppo, test e produzione. L'autenticazione dei ruoli IAM semplifica le esecuzioni di Terraform dalle istanze EC2, rafforzando al contempo l'accesso con privilegi minimi.

Utilizza credenziali dinamiche per gli spazi di lavoro HCP Terraform

HCP Terraform è un servizio gestito fornito da HashiCorp che aiuta i team a utilizzare Terraform per fornire e gestire l'infrastruttura su più progetti e ambienti. Quando esegui Terraform in HCP Terraform, utilizza credenziali dinamiche per semplificare e proteggere l'autenticazione. AWS Terraform scambia automaticamente le credenziali temporanee ad ogni esecuzione senza la necessità di assumere ruoli IAM.

I vantaggi includono una rotazione segreta più semplice, una gestione centralizzata delle credenziali tra le aree di lavoro, le autorizzazioni con privilegi minimi e l'eliminazione delle chiavi codificate. Affidarsi a chiavi temporanee con hash migliora la sicurezza rispetto alle chiavi di accesso di lunga durata.

Usa i ruoli IAM in AWS CodeBuild

In AWS CodeBuild, esegui le tue build utilizzando un ruolo IAM assegnato al CodeBuild progetto. Ciò consente a ogni build di ereditare automaticamente le credenziali temporanee dal ruolo invece di utilizzare chiavi a lungo termine.

Esegui GitHub azioni in remoto su HCP Terraform

Configura i flussi di lavoro GitHub Actions per eseguire Terraform in remoto sulle aree di lavoro HCP Terraform. Affidati a credenziali dinamiche e al blocco remoto dello stato anziché alla gestione dei segreti. GitHub

Usa GitHub Actions with OIDC e configura l'azione Credenziali AWS

Utilizza lo standard OpenID Connect (OIDC) per federare GitHub l'identità Actions tramite IAM. Utilizza l'azione Configura AWS credenziali per scambiare il GitHub token con AWS credenziali temporanee senza bisogno di chiavi di accesso a lungo termine.

Da utilizzare GitLab con OIDC e AWS CLI

Utilizza lo standard OIDC per federare le GitLab identità tramite IAM per l'accesso temporaneo. Affidandoti a OIDC, eviti di dover gestire direttamente le chiavi di accesso a lungo termine all'interno. AWS GitLab Le credenziali vengono just-in-time scambiate, il che migliora la sicurezza. Gli utenti ottengono inoltre l'accesso con il privilegio minimo in base alle autorizzazioni nel ruolo IAM.

Utilizza utenti IAM unici con strumenti di automazione legacy

Se disponi di strumenti e script di automazione che non dispongono del supporto nativo per l'utilizzo dei ruoli IAM, puoi creare singoli utenti IAM per concedere l'accesso programmatico. Il principio del privilegio minimo è ancora valido. Riduci al minimo le autorizzazioni relative alle policy e affidati a ruoli separati per ogni pipeline o script. Man mano che passi a strumenti o strumenti più moderni, inizia a supportare i ruoli in modo nativo e passa gradualmente a tali ruoli.

avvertimento

Gli utenti IAM dispongono di credenziali a lungo termine, il che rappresenta un rischio per la sicurezza. Per contribuire a mitigare questo rischio, ti consigliamo di fornire a questi utenti solo le autorizzazioni necessarie per eseguire l'attività e di rimuoverli quando non sono più necessari.

Usa il plugin Jenkins AWS Credentials

Usa il plug-in AWS Credentials di Jenkins per configurare centralmente e inserire le credenziali nelle build in AWS modo dinamico. In questo modo si evita di inserire i segreti nel controllo del codice sorgente.

Monitora, convalida e ottimizza continuamente il privilegio minimo

Nel tempo, potrebbero essere concesse autorizzazioni aggiuntive che possono superare le politiche minime richieste. Analizza continuamente l'accesso per identificare e rimuovere eventuali autorizzazioni non necessarie.

Monitora continuamente l'utilizzo delle chiavi di accesso

Se non puoi evitare di utilizzare le chiavi di accesso, utilizza i report sulle credenziali IAM per trovare le chiavi di accesso non utilizzate più vecchie di 90 giorni e revoca le chiavi inattive sia negli account utente che nei ruoli macchina. Avvisa gli amministratori affinché confermino manualmente la rimozione delle chiavi per i dipendenti e i sistemi attivi.

Il monitoraggio dell'utilizzo delle chiavi consente di ottimizzare le autorizzazioni poiché è possibile identificare e rimuovere i permessi non utilizzati. Quando si segue questa best practice con la rotazione delle chiavi di accesso, si limita la durata delle credenziali e si applica l'accesso con privilegi minimi.

AWS offre diversi servizi e funzionalità che è possibile utilizzare per configurare avvisi e notifiche per gli amministratori. Ecco alcune opzioni:

  • AWS Config: È possibile utilizzare AWS Config le regole per valutare le impostazioni di configurazione delle AWS risorse, incluse le chiavi di accesso IAM. Puoi creare regole personalizzate per verificare condizioni specifiche, ad esempio chiavi di accesso non utilizzate che risalgono a un numero specifico di giorni. Quando una regola viene violata, AWS Config può avviare una valutazione per la correzione o inviare notifiche a un argomento di Amazon Simple Notification Service (Amazon SNS).

  • AWS Security Hub: Security Hub offre una visione completa del livello di sicurezza del tuo AWS account e può aiutarti a rilevare e notificare potenziali problemi di sicurezza, incluse le chiavi di accesso IAM inutilizzate o inattive. Security Hub può integrarsi con Amazon EventBridge e Amazon SNS o inviare notifiche AWS Chatbot agli amministratori.

  • AWS Lambda: le funzioni Lambda possono essere richiamate da vari eventi, tra cui Amazon CloudWatch Events o AWS Config regole. Puoi scrivere funzioni Lambda personalizzate per valutare l'utilizzo delle chiavi di accesso IAM, eseguire controlli aggiuntivi e inviare notifiche utilizzando servizi come Amazon SNS o. AWS Chatbot

Convalida continuamente le politiche IAM

Utilizza IAM Access Analyzer per valutare le policy associate ai ruoli e identificare eventuali servizi non utilizzati o azioni in eccesso concesse. Implementa revisioni periodiche degli accessi per verificare manualmente che le politiche soddisfino i requisiti attuali.

Confronta la policy esistente con la policy generata da IAM Access Analyzer e rimuovi tutte le autorizzazioni non necessarie. È inoltre necessario fornire report agli utenti e revocare automaticamente le autorizzazioni non utilizzate dopo un periodo di prova. Ciò contribuisce a garantire che le politiche minime rimangano in vigore.

La revoca proattiva e frequente di accessi obsoleti riduce al minimo le credenziali che potrebbero essere a rischio durante una violazione. L'automazione offre un'igiene sostenibile e a lungo termine delle credenziali e un'ottimizzazione delle autorizzazioni. Il rispetto di questa best practice limita l'ambito dell'impatto applicando in modo proattivo il privilegio minimo tra identità e risorse. AWS

Archiviazione sicura dello stato remoto

L'archiviazione dello stato remoto si riferisce all'archiviazione del file di stato Terraform in remoto anziché localmente sulla macchina su cui è in esecuzione Terraform. Il file di stato è fondamentale perché tiene traccia delle risorse fornite da Terraform e dei relativi metadati.

La mancata protezione dello stato remoto può portare a problemi seri come la perdita di dati sullo stato, l'incapacità di gestire l'infrastruttura, l'eliminazione involontaria delle risorse e l'esposizione di informazioni sensibili che potrebbero essere presenti nel file di stato. Per questo motivo, proteggere l'archiviazione dello stato remoto è fondamentale per l'utilizzo di Terraform a livello di produzione.

Abilita la crittografia e i controlli di accesso

Usa la crittografia lato server (SSE) di Amazon Simple Storage Service (Amazon S3) per crittografare lo stato remoto a riposo.

Limita l'accesso diretto ai flussi di lavoro collaborativi

  • Strutturate i flussi di lavoro di collaborazione in HCP Terraform o in una pipeline CI/CD all'interno del vostro repository Git per limitare l'accesso diretto allo stato.

  • Affidati alle richieste pull, esegui approvazioni, controlli delle politiche e notifiche per coordinare le modifiche.

Il rispetto di queste linee guida aiuta a proteggere gli attributi sensibili delle risorse ed evita conflitti con le modifiche dei membri del team. La crittografia e le rigide protezioni di accesso aiutano a ridurre la superficie di attacco, mentre i flussi di lavoro di collaborazione favoriscono la produttività.

Usa AWS Secrets Manager

Esistono molte risorse e fonti di dati in Terraform che memorizzano valori segreti in testo semplice nel file di stato. Evita di memorizzare i segreti nello stato: usa invece. AWS Secrets Manager

Invece di tentare di crittografare manualmente i valori sensibili, affidati al supporto integrato di Terraform per la gestione degli stati sensibili. Quando esportate valori sensibili in output, assicuratevi che i valori siano contrassegnati come sensibili.

Scansiona continuamente l'infrastruttura e il codice sorgente

Scansiona in modo proattivo e continuo sia l'infrastruttura che il codice sorgente alla ricerca di rischi quali credenziali esposte o configurazioni errate per rafforzare il livello di sicurezza. Risolvi tempestivamente i risultati riconfigurando o applicando patch alle risorse.

Utilizza i servizi per la scansione dinamica AWS

Utilizza strumenti AWS nativi come Amazon Inspector, AWS Security HubAmazon Detective e Amazon GuardDuty per monitorare l'infrastruttura fornita tra account e regioni. Pianifica le scansioni ricorrenti in Security Hub per tenere traccia delle variazioni di implementazione e configurazione. Scansiona istanze EC2, funzioni Lambda, contenitori, bucket S3 e altre risorse.

Esegui analisi statiche

Incorpora analizzatori statici come Checkov direttamente nelle pipeline CI/CD per scansionare il codice di configurazione Terraform (HCL) e identificare i rischi preventivamente prima dell'implementazione. Ciò sposta i controlli di sicurezza a un punto precedente del processo di sviluppo (denominato spostamento a sinistra) e impedisce un'infrastruttura configurata in modo errato.

Garantisci una pronta riparazione

Per tutti i risultati della scansione, assicurati una pronta riparazione aggiornando la configurazione di Terraform, applicando patch o riconfigurando le risorse manualmente, a seconda dei casi. Riduci i livelli di rischio affrontando le cause alla radice.

L'utilizzo sia della scansione dell'infrastruttura che della scansione del codice fornisce informazioni su più livelli sulle configurazioni Terraform, sulle risorse fornite e sul codice dell'applicazione. Ciò massimizza la copertura del rischio e della conformità attraverso controlli preventivi, investigativi e reattivi, integrando al contempo la sicurezza nelle fasi iniziali del ciclo di vita dello sviluppo del software (SDLC).

Applica i controlli delle politiche

Utilizza framework di codice come le politiche HashiCorp Sentinel per fornire barriere di governance e modelli standardizzati per il provisioning dell'infrastruttura con Terraform.

Le politiche Sentinel possono definire requisiti o restrizioni sulla configurazione di Terraform per allinearsi agli standard organizzativi e alle migliori pratiche. Ad esempio, puoi utilizzare le politiche Sentinel per:

  • Richiedi tag su tutte le risorse.

  • Limita i tipi di istanze a un elenco approvato.

  • Applica le variabili obbligatorie.

  • Impedire la distruzione delle risorse di produzione.

L'integrazione dei controlli delle policy nei cicli di vita della configurazione Terraform consente l'applicazione proattiva degli standard e delle linee guida dell'architettura. Sentinel fornisce una logica politica condivisa che aiuta ad accelerare lo sviluppo prevenendo al contempo pratiche non approvate.