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à.
Fornisci ruoli IAM con privilegi minimi implementando una soluzione di distribuzione automatica di ruoli
Creato da Benjamin Morris (AWS), Aman Kaur Gandhi (AWS), Chad Moon (AWS) e Nima Fotouhi (AWS)
Riepilogo
Le autorizzazioni di ruolo sovradimensionate AWS Identity and Access Management (IAM) per le pipeline possono comportare rischi inutili per un'organizzazione. Gli sviluppatori a volte concedono ampie autorizzazioni durante lo sviluppo, ma trascurano di limitarle dopo la risoluzione dei problemi relativi al codice. Ciò causa un problema in cui sono presenti ruoli potenti senza necessità aziendali e potrebbe non essere mai stato esaminato da un tecnico della sicurezza.
Questo modello offre una soluzione a questo problema: il role vending machine (RVM). Utilizzando un modello di implementazione sicuro e centralizzato, RVM dimostra come fornire ruoli IAM con privilegi minimi per le pipeline dei singoli repository con il minimo sforzo da parte degli sviluppatori. GitHub Poiché RVM è una soluzione centrale, è possibile configurare i team di sicurezza come revisori necessari per approvare le modifiche. Questo approccio consente alla sicurezza di rifiutare le richieste di ruolo della pipeline sovraautorizzate.
La RVM accetta il codice Terraform come input e genera ruoli IAM pronti per la pipeline come output. Gli input richiesti sono l' Account AWS ID, il nome del repository e la politica delle autorizzazioni. GitHub La RVM utilizza questi input per creare la politica di fiducia e la politica di autorizzazione del ruolo. La policy di fiducia risultante consente al GitHub repository specificato di assumere il ruolo e utilizzarlo per le operazioni di pipeline.
La RVM utilizza un ruolo IAM (configurato durante il bootstrap). Questo ruolo dispone delle autorizzazioni necessarie per assumere un account role-provisioning-role in ogni account dell'organizzazione. Il ruolo è configurato tramite AWS Control Tower Account Factory for Terraform (AFT) o AWS CloudFormation StackSets. role-provisioning-rolesSono i ruoli che effettivamente creano i ruoli della pipeline per gli sviluppatori.
Prerequisiti e limitazioni
Prerequisiti
Un attivo Account AWS.
Un' GitHub organizzazione utilizzata per implementare l'infrastruttura come codice (IaC) tramite GitHub Actions. (non GitHub Enterprise/Premium/Ultimate sono obbligatori).
Un AWS ambiente con più account. Non è necessario che questo ambiente ne faccia parte AWS Organizations.
Un meccanismo per implementare un ruolo IAM in tutti Account AWS (ad esempio, AFT o CloudFormation StackSets).
Terraform versione 1.3 o successiva installata e configurata
. Terraform AWS Provider versione 4 o successiva installata e configurata
.
Limitazioni
Il codice di questo pattern è specifico di GitHub Actions e Terraform. Tuttavia, i concetti generali del pattern possono essere riutilizzati in altri framework di integrazione e distribuzione continua (CI/CD).
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 illustra il flusso di lavoro per questo modello.

Il flusso di lavoro per l'utilizzo tipico del distributore automatico di ruoli prevede i seguenti passaggi:
Uno sviluppatore invia il codice che contiene il codice Terraform per un ruolo IAM appena richiesto al repository RVM. GitHub Questa azione attiva la pipeline RVM Actions. GitHub
La pipeline utilizza una policy di trust OpenID Connect (OIDC) per assumere il ruolo di assunzione del ruolo RVM.
Durante l'esecuzione, la pipeline RVM assume il ruolo di workflow RVM nell'account in cui fornisce il nuovo ruolo IAM dello sviluppatore. (Il ruolo del workflow RVM è stato assegnato utilizzando AFT o.) CloudFormation StackSets
RVM crea il ruolo IAM dello sviluppatore con autorizzazioni e fiducia appropriate, in modo che il ruolo possa essere assunto da altre pipeline di applicazioni.
Gli sviluppatori di app possono configurare le proprie pipeline di app per assumere questo ruolo fornito da RVM.
Il ruolo creato include le autorizzazioni richieste dallo sviluppatore e una policy. ReadOnlyAccess
Il ruolo è assunto solo dalle pipeline eseguite sul main
ramo del repository specificato dallo sviluppatore. Questo approccio aiuta a garantire che per utilizzare il ruolo possano essere necessarie la protezione e le revisioni delle filiali.
Automazione e scalabilità
Le autorizzazioni con privilegi minimi richiedono attenzione ai dettagli per ogni ruolo assegnato. Questo modello riduce la complessità richiesta per creare questi ruoli, consentendo agli sviluppatori di creare i ruoli di cui hanno bisogno senza molto apprendimento o impegno aggiuntivi.
Strumenti
Servizi 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 Organizationsè un servizio di gestione degli account che ti aiuta a consolidare più account Account AWS in un'organizzazione da creare e gestire centralmente.
Altri strumenti
Git
è un sistema di controllo delle versioni distribuito e open source. Include la possibilità di creare un account aziendale . GitHub Actions
è una piattaforma di integrazione e distribuzione continua (CI/CD) strettamente integrata con i repository. GitHub Puoi utilizzare GitHub Actions per automatizzare la pipeline di compilazione, test e distribuzione. Terraform
è uno strumento di infrastruttura come codice (IaC) HashiCorp che ti aiuta a creare e gestire risorse cloud e locali.
Archivio di codici
Il codice per questo pattern è disponibile nel GitHub role-vending-machine
Best practice
Rendi facile la strada giusta e difficile quella sbagliata: rendi facile fare la cosa giusta. Se gli sviluppatori hanno difficoltà con il processo di provisioning di RVM, potrebbero tentare di creare ruoli con altri mezzi, il che mina la natura centrale di RVM. Assicurati che il tuo team di sicurezza fornisca indicazioni chiare su come utilizzare RVM in modo sicuro ed efficace.
Dovresti anche impedire agli sviluppatori di fare la cosa sbagliata. Utilizza le politiche di controllo dei servizi (SCPs) o i limiti di autorizzazione per limitare i ruoli che possono creare altri ruoli. Questo approccio può aiutare a limitare la creazione di ruoli solo a RVM e ad altre fonti attendibili.
Fornisci buoni esempi: inevitabilmente, alcuni sviluppatori adatteranno i ruoli esistenti nell'archivio RVM come modelli informali per la concessione delle autorizzazioni ai loro nuovi ruoli. Se disponete di esempi con autorizzazioni minime da cui possono copiare, ciò può ridurre il rischio che gli sviluppatori richiedano autorizzazioni ampie e con un elevato numero di jolly card. Se iniziate con ruoli altamente autorizzati e con molti jolly, il problema può moltiplicarsi col passare del tempo.
Usa convenzioni e condizioni di denominazione: anche se uno sviluppatore non conosce tutti i nomi delle risorse che la sua applicazione creerà, dovrebbe comunque limitare le autorizzazioni dei ruoli utilizzando una convenzione di denominazione. Ad esempio, se stanno creando bucket Amazon S3, il valore della loro chiave di risorsa potrebbe essere
arn:aws:s3:::myorg-myapp-dev-*
tale che il loro ruolo non disponga di autorizzazioni oltre ai bucket che corrispondono a quel nome. L'applicazione della convenzione di denominazione tramite una policy IAM ha l'ulteriore vantaggio di migliorare la conformità con la convenzione di denominazione. Questo miglioramento si verifica perché non sarà consentita la creazione di risorse non corrispondenti.Richiedi revisioni delle pull request (PR): il valore della soluzione RVM è che crea una posizione centrale in cui è possibile esaminare i nuovi ruoli della pipeline. Tuttavia, questo design è utile solo se esistono barriere che aiutano a garantire che codice sicuro e di alta qualità venga inviato alla RVM. Proteggi le filiali utilizzate per distribuire il codice (ad esempio
main
) dai push diretti e richiedi l'approvazione per tutte le richieste di unione che le riguardano.Configura ruoli di sola lettura: per impostazione predefinita, RVM fornisce una versione di ogni ruolo richiesto.
readonly
Questo ruolo può essere utilizzato nelle pipeline CI/CD che non scrivono dati, come un flusso di lavoro di pipeline.terraform plan
Questo approccio aiuta a prevenire modifiche indesiderate se un flusso di lavoro di sola lettura non funziona correttamente.Per impostazione predefinita, la
ReadOnlyAccess
policy AWS gestita è associata sia ai ruoli di sola lettura che ai ruoli di lettura-scrittura. Questa politica riduce la necessità di iterazioni per determinare le autorizzazioni richieste, ma potrebbe essere eccessivamente permissiva per alcune organizzazioni. Se lo desideri, puoi rimuovere la politica dal codice Terraform.Concedi autorizzazioni minime: segui il principio del privilegio minimo e concedi le autorizzazioni minime richieste 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à | Descrizione | Competenze richieste |
---|---|---|
Copia il repository di esempio nella tua GitHub organizzazione. | Clona
| DevOps ingegnere |
Determina il Account AWS per la RVM. | Determina quale implementazione dell'infrastruttura utilizzare Account AWS per la RVM. Non utilizzare l'account di gestione o root. | Architetto del cloud |
(Facoltativo) Consenti la creazione PRs delle pipeline dell'organizzazione. | NotaQuesto passaggio è necessario solo se si desidera consentire la creazione PRs del Per consentire la creazione delle pipeline della tua organizzazione PRs, segui i seguenti passaggi:
Per ulteriori informazioni, consulta la sezione Gestione GitHub delle impostazioni delle azioni per un repository | DevOps ingegnere |
Concedi autorizzazioni di sola lettura all'account RVM. | Crea una politica di delega nel tuo account di gestione che conceda al tuo account RVM autorizzazioni di sola lettura. Ciò consente ai GitHub flussi di lavoro RVM di generare dinamicamente un elenco degli account dell'organizzazione durante l'esecuzione dello script. AWS Utilizzate il codice seguente e sostituitelo
| Amministratore cloud |
Aggiorna i valori predefiniti dal repository di esempio. | Per configurare la RVM in modo che funzioni nel tuo ambiente specifico Regione AWS, procedi come segue:
| DevOps ingegnere |
Attività | Descrizione | Competenze richieste |
---|---|---|
Avvia il repository RVM. | Questo passaggio è necessario per creare i ruoli OIDC Trust e IAM utilizzati dalla pipeline RVM stessa, in modo che possa iniziare a operare e vendere altri ruoli. Nel contesto del tuo account RVM, esegui manualmente un comando dalla directory. | DevOps ingegnere |
Attività | Descrizione | Competenze richieste |
---|---|---|
Distribuisci i | Scegliete un metodo di distribuzione in linea con le pratiche della vostra organizzazione, come AFT o. StackSets Utilizza questo metodo per distribuire i due ruoli IAM nel Questi ruoli IAM dispongono di politiche di fiducia che consentono al ruolo di assunzione del ruolo dell'account RVM (o equivalente) di assumerlo. | Amministratore AWS |
Esegui il | Per configurare la RVM in modo che sia pronta per la creazione di ruoli nella pipeline, procedi come segue:
Una volta completato il flusso di lavoro, la RVM è pronta per:
| DevOps ingegnere |
Risoluzione dei problemi
Problema | Soluzione |
---|---|
Ho creato un ruolo utilizzando RVM, ma GitHub non sono in grado di assumerlo. | Verifica che il nome del GitHub repository corrisponda al nome fornito al modulo. Analogamente, verificate che il ramo utilizzato nella GitHub pipeline corrisponda al nome del ramo fornito al modulo. |
Il mio ruolo di sola lettura non riesce a eseguire la pipeline perché non dispone delle autorizzazioni per leggere una risorsa specifica. | Sebbene la È possibile aggiungere autorizzazioni per azioni specifiche utilizzando il |
Risorse correlate
Informazioni aggiuntive
Utilizzo GitHub degli ambienti
GitHub gli ambienti sono un approccio alternativo alle restrizioni basate sulle filiali per l'accesso ai ruoli. Se preferisci utilizzare un GitHub ambiente, di seguito è riportato un esempio della sintassi per una condizione aggiuntiva nella policy di fiducia IAM. Questa sintassi specifica che il ruolo può essere utilizzato solo quando l' GitHub azione è in esecuzione nell'ambiente. Production
"StringLike": {
"token.actions.githubusercontent.com:sub": "repo:octo-org/octo-repo:environment:Production"
}
La sintassi di esempio utilizza i seguenti valori segnaposto:
octo-org
è il nome dell'organizzazione. GitHubocto-repo
è il nome del repository.Production
è il nome specifico GitHub dell'ambiente.