Gestisci i set di AWS autorizzazioni in modo dinamico utilizzando Terraform - Prontuario AWS

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à.

Gestisci i set di AWS autorizzazioni in modo dinamico utilizzando Terraform

Vinicius Elias e Marcos Vinicius Pinto Jordão, Amazon Web Services

Riepilogo

AWS IAM Identity Center migliora AWS Identity and Access Management (IAM) fornendo un hub centralizzato per la gestione dell'accesso Single Sign-On alle applicazioni cloud. Account AWS Tuttavia, la gestione manuale dei set di autorizzazioni di IAM Identity Center può diventare sempre più complessa e soggetta a errori man mano che l'organizzazione cresce. Questa complessità può portare a potenziali lacune di sicurezza e sovraccarichi amministrativi.

Questa soluzione consente di gestire i set di autorizzazioni tramite Infrastructure as Code (IaC) utilizzando una pipeline di integrazione e distribuzione continua (CI/CD) creata con tecnologia nativa. Servizi AWS Consente una perfetta integrazione del meccanismo di assegnazione del set di autorizzazioni con gli eventi del AWS Control Tower ciclo di vita o un ambiente Account Factory for Terraform (AFT). Questo approccio fornisce configurazioni di identità dinamiche sia per quelle nuove che per quelle esistenti. Account AWS

EventBridge Le regole di Amazon monitorano Account AWS la creazione e gli aggiornamenti, il che aiuta le configurazioni delle identità a rimanere sincronizzate con la struttura organizzativa. Dopo aver creato o aggiornato gli account in AWS Control Tower o AFT, viene attivata la pipeline. Valuta un set di file JSON con definizioni di set di autorizzazioni e regole di assegnazione. Quindi la pipeline applica e sincronizza le impostazioni su tutti gli account.

Questo approccio offre i seguenti vantaggi:

  • Coerenza: elimina la deriva manuale della configurazione all'interno dell'organizzazione AWS

  • Verificabilità: mantiene una cronologia completa di tutte le modifiche alla gestione delle identità

  • Scalabilità: applica automaticamente le configurazioni man mano che l'ambiente cresce AWS

  • Sicurezza: riduce l'errore umano nell'assegnazione delle autorizzazioni

  • Conformità: facilita il rispetto dei requisiti normativi attraverso modifiche documentate e regole di assegnazione

Prerequisiti e limitazioni

  • Un ambiente multi-account con AWS Control Tower e configurato. AWS Organizations Facoltativamente, puoi usare AFT con. AWS Control Tower

  • Un amministratore delegato di IAM Identity Center Account AWS a ricevere la soluzione. Per ulteriori informazioni, consulta Amministrazione delegata nella documentazione di IAM Identity Center.

  • Un repository del sistema di controllo della versione (VCS) per gestire il codice principale. Per un esempio, consultate il repository della soluzione. GitHub

  • AWS Risorse necessarie per la gestione del backend Terraform, come un bucket Amazon Simple Storage Service (Amazon S3) e una tabella Amazon DynamoDB.

Limitazioni

  • La pipeline utilizza AWS risorse native e Terraform open source. La pipeline non è predisposta per effettuare chiamate verso ecosistemi di terze parti.

  • Alcuni Servizi AWS non sono disponibili in tutti. Regioni AWS Per la disponibilità regionale, vedi AWS Servizi per regione. Per endpoint specifici, consulta Endpoints and quotas del servizio e scegli il link relativo al servizio.

Architettura

Il diagramma seguente mostra i componenti e il flusso di lavoro di questo modello.

Componenti e flusso di lavoro per gestire i set di autorizzazioni AWS utilizzando Terraform.

AWS Control Tower flusso di eventi

La soluzione inizia con l'integrazione degli eventi provenienti da entrambi AWS Control Tower o da AFT. La scelta tra l'uno o l'altro servizio viene effettuata al momento dell'implementazione tramite una definizione variabile. Indipendentemente dal metodo utilizzato, la pipeline viene attivata ogni volta che un account viene creato o aggiornato. La pipeline riconcilia le politiche archiviate nell'archivio di gestione dei set di autorizzazioni.

Di seguito sono riportati gli eventi del ciclo di vita: AWS Control Tower

  • CreateManagedAccount— Quando viene creato un nuovo account

  • UpdateManagedAccount— Quando viene aggiornato un account esistente

Routing degli eventi

EventBridge funge da servizio centrale di elaborazione degli eventi, registrando gli eventi generati nell'account. AWS Control Tower Quando si verificano degli eventi, li indirizza EventBridge in modo intelligente a un bus di eventi centralizzato nell'account della soluzione. AWS Control Tower gli eventi del ciclo di vita seguono schemi di routing distinti. Se AFT è definito come origine dell'evento, l'account di gestione AFT gestisce gli eventi anziché l'account. AWS Control Tower Questa architettura basata sugli eventi consente risposte automatiche ai cambiamenti organizzativi senza intervento manuale.

Processo di integrazione AFT

Quando gli eventi AWS Control Tower del ciclo di vita raggiungono l'account di gestione AFT, attivano automaticamente più processi a valle intrinseci ad AFT. Una volta completato il flusso di lavoro di personalizzazione dell'account AFT, pubblica un messaggio nell'argomento dedicato Amazon Simple Notification Service (aft-notificationsAmazon SNS). Questo argomento attiva la aft-new-account-forward-event AWS Lambda funzione implementata da questa soluzione. La funzione Lambda invia l'evento al bus degli eventi dell'account della soluzione, dove viene utilizzato per avviare la pipeline.

Infrastruttura come pipeline di codice

La pipeline di soluzioni funziona come un meccanismo di implementazione completamente automatizzato. Il AWS CodePipeline servizio monitora continuamente l'archivio per rilevare eventuali modifiche. Dopo aver rilevato nuovi commit, avvia automaticamente il flusso di lavoro di distribuzione e avvia un processo sequenziale che include fasi di convalida ed esecuzione. Il sistema esegue plan le operazioni Terraform per identificare le modifiche proposte, seguite dai apply comandi Terraform per implementare tali modifiche nell'ambiente. AWS In particolare, la pipeline funziona senza cancelli di approvazione manuale. Questo approccio consente una rapida implementazione delle modifiche all'infrastruttura mantenendo al contempo la verificabilità tramite i registri della pipeline e i file di stato Terraform.

La pipeline sfrutta le funzionalità di Terraform AWS CodeBuild per eseguire le operazioni di Terraform in un ambiente controllato con le autorizzazioni appropriate. Attraverso questo approccio IaC, la pipeline può eseguire operazioni complete di gestione delle autorizzazioni, tra cui:

  • Creare nuovi set di autorizzazioni.

  • Aggiorna i set di autorizzazioni esistenti.

  • Rimuovere i set di autorizzazioni non necessari.

  • Gestisci l'assegnazione di queste autorizzazioni tra account e gruppi all'interno delle AWS organizzazioni.

Per mantenere la coerenza dell'infrastruttura e prevenire modifiche in conflitto, la soluzione implementa il sistema di gestione dello stato di backend Terraform utilizzando un bucket Amazon S3 e una tabella Amazon DynamoDB dedicata. Questo approccio fornisce una posizione di archiviazione persistente per i file di stato Terraform e meccanismi di blocco dello stato per impedire modifiche simultanee alle stesse risorse.

Il codice Terraform principale utilizza il modulo Terraform ufficiale. AWS permission-sets Questo modulo può gestire dinamicamente i set di autorizzazioni in IAM Identity Center, sulla base di modelli di set di autorizzazioni.

Gestione del controllo del codice sorgente

I modelli di set di autorizzazioni (file JSON) risiedono in un sistema di controllo delle versioni esterno, ad esempio GitHub, che fornisce un archivio centralizzato per le configurazioni di gestione delle identità. Questo approccio stabilisce un'unica fonte di verità per le definizioni dei set di autorizzazioni, consentendo al contempo lo sviluppo collaborativo attraverso pratiche standard di revisione del codice. Gli utenti autorizzati possono apportare modifiche a questi modelli seguendo i processi di gestione delle modifiche organizzative. Questi commit fungono da trigger principale per la pipeline di distribuzione automatizzata, che avvia il processo di aggiornamento dell'infrastruttura.

Per un esempio di come configurare i set di autorizzazioni utilizzando il file JSON nel repository, consulta Informazioni aggiuntive.

Strumenti

Servizi AWS

  • AWS CodeBuildè un servizio di compilazione completamente gestito che consente di compilare il codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.

  • AWS CodeConnectionsconsente a AWS risorse e servizi, ad esempio, di connettersi a repository di codice esterni CodePipeline, come. GitHub

  • AWS CodePipelineaiuta a modellare e configurare rapidamente le diverse fasi di un rilascio software e ad automatizzare i passaggi necessari per rilasciare le modifiche software in modo continuo.

  • AWS Command Line Interface (AWS CLI) è uno strumento open source che consente di interagire Servizi AWS tramite comandi nella shell della riga di comando.

  • AWS Control Towerti aiuta a configurare e gestire un ambiente con AWS più account, seguendo le migliori pratiche prescrittive.

  • Amazon DynamoDB è un servizio di database NoSQL interamente gestito che offre prestazioni elevate, prevedibili e scalabili.

  • Amazon EventBridge è un servizio di bus eventi senza server che ti aiuta a connettere le tue applicazioni con dati in tempo reale provenienti da una varietà di fonti. Ad esempio, AWS Lambda funzioni, endpoint di invocazione HTTP che utilizzano destinazioni API o bus di eventi in altro modo. Account AWS

  • AWS Identity and Access Management (IAM) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.

  • AWS IAM Identity Centerti aiuta a gestire centralmente l'accesso Single Sign-On (SSO) a tutte le tue applicazioni e a quelle sul cloud. Account AWS

  • AWS Lambda è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.

  • AWS Organizationsè un servizio di gestione degli account che ti aiuta a consolidare più account Account AWS in un'organizzazione da creare e gestire centralmente.

  • Amazon Simple Notification Service (Amazon SNS) ti aiuta a coordinare e gestire lo scambio di messaggi tra editori e clienti, inclusi server Web e indirizzi e-mail. Abilita le notifiche push per gli eventi di gestione degli account, assicurando che le parti interessate siano informate di importanti modifiche o azioni all'interno del sistema.

  • Amazon Simple Storage Service (Amazon S3) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.

Altri strumenti

  • Terraform è uno strumento di infrastruttura come codice (IaC) HashiCorp che ti aiuta a creare e gestire risorse cloud e locali.

Deposito di codici

Il codice per questo pattern è disponibile nell'organizzazione AWS Samples del repository sample-terraform-aws-permission-sets-pipeline. GitHub

Best practice

  • Aggiungi sempre le versioni dei moduli e dei provider Terraform utilizzati per eseguire il codice in produzione.

  • Utilizza uno strumento di analisi statico del codice, come Checkov, per scansionare il codice e quindi risolvere i problemi di sicurezza.

  • Segui il principio del privilegio minimo e concedi le autorizzazioni minime necessarie per eseguire un'attività. Per ulteriori informazioni, consulta le best practice relative alla concessione dei privilegi minimi e alla sicurezza nella documentazione IAM.

Epiche

AttivitàDescrizioneCompetenze richieste

Crea risorse di backend Terraform.

Se non hai ancora creato le tue AWS risorse di backend Terraform, utilizza i seguenti passaggi per creare un bucket Amazon S3 s3-tf-backend-{ACCOUNT_ID} () e una tabella DynamoDB (). ddb-tf-backend

  1. Accedi al luogo in Account AWS cui distribuirai la soluzione e apri nella home page. AWS CloudShell AWS Control Tower Regione AWS

  2. Esegui i seguenti comandi, sostituendo il segnaposto {ACCOUNT_ID} con il tuo ID: Account AWS

aws s3api create-bucket --bucket s3-tf-backend-{ACCOUNT_ID} aws s3api put-bucket-versioning --bucket s3-tf-backend-{ACCOUNT_ID} --versioning-configuration Status=Enabled aws dynamodb create-table --table-name ddb-tf-backend --attribute-definitions AttributeName=LockID,AttributeType=S --key-schema AttributeName=LockID,KeyType=HASH --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1
Amministratore AWS

Crea un ruolo per più account.

È necessario fornire un ruolo IAM tra account nella configurazione del provider event-source-account Terraform AWS . Se non hai ancora creato questo ruolo, utilizza i seguenti passaggi per crearlo:

  1. Accedi a Account AWS quella che sarà la fonte del tuo evento (account di AWS Control Tower gestione o account AFT) e apri AWS CloudShell.

  2. Esegui il comando seguente, sostituendo il segnaposto {ACCOUNT_ID} con l' Account AWS ID che stai utilizzando per questa soluzione, non con l'ID attuale Account AWS :

aws iam create-role \ --role-name CrossAccountRole \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{ACCOUNT_ID}:root" }, "Action": "sts:AssumeRole" } ] }'
  1. Controlla l'output del comando e copia il ruolo Amazon Resource Name (ARN) (ad esempio,arn:aws:iam::111122223333:role/CrossAccountRole).

  2. Per allegare una policy IAM al ruolo, esegui il seguente comando:

aws iam attach-role-policy \ --role-name CrossAccountRole \ --policy-arn arn:aws:iam::aws:policy/AdministratorAccess

Questo esempio utilizza la policy IAM AWS gestita AdministratorAccess. Se preferisci, puoi utilizzare una politica più specifica.

Amministratore AWS
AttivitàDescrizioneCompetenze richieste

Crea un repository dedicato.

Questa attività presuppone che tu stia utilizzando. GitHub Crea un repository dedicato per archiviare il codice Terraform principale e i file JSON del modello di set di autorizzazioni.

DevOps ingegnere

Prepara il codice del set di autorizzazioni.

Per informazioni su come strutturare i seguenti file, consultate il codice di esempio nel repository della soluzione:

── main.tf

─ output.tf

── providers.jinja

── modelli

Copia il contenuto, conserva i providers.jinja valori e apporta le modifiche necessarie agli altri file. Ad esempio, aggiungi i file modello del set di autorizzazioni templates o aggiungi la versione del aws-ia/permission-sets/aws modulo nel main.tf file.

DevOps ingegnere

Effettua le tue modifiche.

Conferma e invia le modifiche al repository che hai creato in precedenza. Salva il nome del repository e la sua GitHub organizzazione, ad esempio. myorg/aws-ps-pipeline

DevOps ingegnere
AttivitàDescrizioneCompetenze richieste

Scarica il contenuto.

Scaricate (clonate) il contenuto dal repository della soluzione.

DevOps ingegnere

Soddisfa le variabili.

Crea un terraform.tfvars file e aggiungi le seguenti variabili necessarie:

  • repository_name— Nome dell'archivio dei set di autorizzazioni creato in precedenza

  • branch_name— Nome del ramo del repository del set di autorizzazioni

  • vcs_provider— Il tuo provider VCS

  • account_lifecycle_events_source— La fonte degli eventi che innescano la pipeline (AWS Control Tower o AFT)

repository_name = "myorg/aws-ps-pipeline" branch_name = "main" vcs_provider = "github" account_lifecycle_events_source = "CT"

Per informazioni sulle opzioni variabili aggiuntive, consultate il file variables.tf nel repository di questo pattern. GitHub

DevOps ingegnere

Regola la configurazione del backend Terraform.

Nel backend.tf file, sostituisci i segnaposto con i tuoi valori. Usa la AWS Control Tower home Regione AWS e fornisci i nomi del bucket Amazon S3 e della tabella DynamoDB creati in precedenza.

terraform { required_version = ">=1.6" backend "s3" { region = "{region}" bucket = "{bucket_name}" key = "terraform.tfstate" dynamodb_table = "{table_name}" encrypt = "true" } }

Se preferisci, puoi usare la tua configurazione di backend Terraform.

DevOps ingegnere

Regola la configurazione del provider Terraform.

Nel providers.tf file, sostituisci i segnaposto con le tue informazioni. Utilizza la regione AWS Control Tower principale e fornisci l'ARN del ruolo IAM tra account precedentemente creato per il provider. event-source-account

provider "aws" { region = "{region}" } provider "aws" { alias = "event-source-account" region = "{region}" assume_role { role_arn = "{role_arn}" } }
DevOps ingegnere
AttivitàDescrizioneCompetenze richieste

Seleziona il Account AWS.

Ti consigliamo di implementare la soluzione nell'account amministratore delegato di IAM Identity Center. Tuttavia, puoi anche distribuirla nell'account di gestione. AWS Organizations

Per accedere all'account selezionato nella stessa regione dell'istanza IAM Identity Center, utilizza il AWS CLI. Assicurati che il ruolo IAM che stai utilizzando sia autorizzato ad assumere il ruolo specificato per il event-source-account provider nei passaggi precedenti. Inoltre, questo ruolo deve avere accesso alle AWS risorse utilizzate nella configurazione del backend Terraform.

Amministratore AWS

Esegui Terraform manualmente.

Per inizializzare, pianificare e applicare le configurazioni, esegui i seguenti comandi Terraform nell'ordine mostrato:

  1. terraform init

  2. terraform plan

  3. terraform apply

DevOps ingegnere

Il controllo dei risultati della distribuzione.

Nell'account amministratore delegato di IAM Identity Center, verifica che la aws-ps-pipeline pipeline sia stata creata. Verifica anche che esista una AWS CodeConnections connessione con lo stato In sospeso.

AWS DevOps

Completa la CodeConnections configurazione.

Per completare la CodeConnections configurazione, procedi nel seguente modo:

  1. Vai a CodeConnections, seleziona la connessione che è stata creata e scegli Aggiorna connessione in sospeso.

  2. Fornisci GitHub le tue credenziali, installa una nuova GitHub app o selezionane una esistente che abbia accesso all'archivio dei set di autorizzazioni e scegli Connect.

La pipeline dovrebbe ora avere accesso all'archivio dei set di autorizzazioni.

Per istruzioni dettagliate, consulta Aggiornare una connessione in sospeso nella documentazione della console Developer Tools.

AWS DevOps
AttivitàDescrizioneCompetenze richieste

Esegui la pipeline tramite AWS Control Tower gli aggiornamenti AFT.

Dopo la creazione o la modifica di un account utilizzando AWS Control Tower o AFT (a seconda del tipo di eventi del ciclo di vita scelti), viene avviata la pipeline.

Amministratore AWS

Esegui la pipeline modificando il codice.

Dopo aver modificato il codice e averlo inviato al main ramo, viene avviata la pipeline.

AWS DevOps

Esegui la pipeline manualmente.

Per avviare la pipeline manualmente, utilizzate la funzione Release change in. AWS CodePipeline

AWS DevOps

Risoluzione dei problemi

ProblemaSoluzione

Accesso negato

Verifica di disporre delle autorizzazioni necessarie per distribuire la soluzione.

CodeConnections problemi

  • Verifica che lo stato della connessione sia Disponibile anziché In sospeso.

  • Verifica che la CodeConnections configurazione sia completata correttamente con GitHub le credenziali. Per ulteriori informazioni, consulta Aggiornare una connessione in sospeso nella documentazione della console Developer Tools.

  • Assicurati che l' GitHub app disponga delle autorizzazioni di accesso adeguate all'archivio dei set di autorizzazioni.

Problemi di esecuzione della pipeline

  • Controlla i CloudWatch log di Amazon per eventuali errori di esecuzione della pipeline.

  • Assicurati che la delegazione di IAM Identity Center sia configurata correttamente. Altrimenti, può causare errori nella pipeline durante la lettura Account AWS dei metadati.

Problemi di distribuzione dei set di autorizzazioni

  • Verifica che la sintassi JSON nei file modello del set di autorizzazioni sia corretta.

  • Verifica che esistano le policy gestite da IAM a cui si fa riferimento nei modelli.

  • Verifica se i gruppi e gli utenti specificati nelle assegnazioni esistono in IAM Identity Center.

Risorse correlate

Servizio AWS documentazione

Altre risorse

Informazioni aggiuntive

File JSON con set di autorizzazioni di esempio

L'esempio seguente mostra come configurare un set di autorizzazioni utilizzando il file JSON nel repository:

{ "Name": "ps-billing", // Permission set identifier "Comment": "Sample permission set for billing access", // Comment to document the purpose of the permission set "Description": "Billing access in AWS", // Detailed description "SessionDuration": "PT4H", // Session duration = 4 hours (ISO 8601 format) "ManagedPolicies": [ // List of AWS IAM managed policies "arn:aws:iam::aws:policy/job-function/Billing", "arn:aws:iam::aws:policy/job-function/SupportUser", "arn:aws:iam::aws:policy/AWSSupportAccess", "arn:aws:iam::aws:policy/job-function/ViewOnlyAccess" ], "CustomerPolicies": [], // References to IAM policies previously created "CustomPolicy": {}, // Inline IAM policy defined directly in the permission set "PermissionBoundary": { // AWS or customer managed IAM policy to be used as boundary "ManagedPolicy": "", "CustomerPolicy": "" }, "Assignments": [ // Define the assignment rules { "all_accounts": true, // Apply to ALL active AWS accounts in organization "principal": "G_BILLING_USERS", // Group/user name in Identity Center "type": "GROUP", // Can be "GROUP" or "USER" "account_id": [], // List of AWS account ID (empty since all_accounts=true) "account_ou": [], // List of AWS Organizational Unit IDs with target AWS accounts "account_tag": [] // List of tags (key:value) to match AWS Organization accounts tags } ] }

Per ulteriori informazioni, consulta lo schema JSON nella documentazione del modulo AWS Permission Sets sul sito Web Terraform.

Suggerimenti

  • Puoi utilizzare i blocchi di importazione Terraform per importare un set di autorizzazioni esistente nella soluzione.

  • È possibile utilizzare AFT per implementare la pipeline del set di AWS autorizzazioni in un account delegato. Per ulteriori informazioni, consulta AFT Blueprints.