Impedire gli aggiornamenti delle risorse stack - AWS CloudFormation

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

Impedire gli aggiornamenti delle risorse stack

Quando si crea uno stack, sono consentite tutte le operazioni di aggiornamento su tutte le risorse. Per impostazione predefinita, chiunque abbia le autorizzazioni per aggiornare lo stack può aggiornare tutte le risorse nello stack. Durante un aggiornamento, alcune risorse potrebbero richiedere un'interruzione o essere completamente sostituite, con conseguente creazione di un nuovo storage fisico o completamente nuovo. IDs È possibile impedire che le risorse stack vengano involontariamente aggiornate o eliminate durante un aggiornamento dello stack utilizzando le policy stack. Una stack policy è un JSON documento che definisce le azioni di aggiornamento che possono essere eseguite su risorse designate.

Dopo aver impostato una policy stack, tutte le risorse nello stack vengono protette per impostazione predefinita. Per permettere gli aggiornamenti di risorse specifiche, è necessario specificare una dichiarazione Allow esplicita per tali risorse nella policy stack. È possibile definire una sola policy stack per stack, ma è possibile proteggere più risorse all'interno di una singola policy. Una politica dello stack si applica a tutti CloudFormation gli utenti che tentano di aggiornare lo stack. Non è possibile associare policy stack diverse a utenti diversi.

Una policy stack si applica solo durante gli aggiornamenti dello stack. Non fornisce controlli di accesso come AWS Identity and Access Management (IAM) politica. Utilizzare una policy stack solo come meccanismo a prova di errore per evitare gli aggiornamenti accidentali di specifiche risorse stack. Per controllare l'accesso a AWS risorse o azioni, usoIAM.

Esempio di policy stack

L'esempio di stack policy seguente impedisce gli aggiornamenti della risorsa ProductionDatabase:

{ "Statement" : [ { "Effect" : "Allow", "Action" : "Update:*", "Principal": "*", "Resource" : "*" }, { "Effect" : "Deny", "Action" : "Update:*", "Principal": "*", "Resource" : "LogicalResourceId/ProductionDatabase" } ] }

Quando si imposta una policy stack, tutte le risorse vengono protette per impostazione predefinita. Per permettere gli aggiornamenti di tutte le risorse, aggiungiamo una dichiarazione Allow che permette tutte le azioni su tutte le risorse. Anche se la dichiarazione Allow specifica tutte le risorse, la dichiarazione esplicita Deny la sostituisce per la risorsa con l'ID logico ProductionDatabase. Questa dichiarazione Deny impedisce tutte le azioni di aggiornamento, come per esempio la sostituzione o l'eliminazione, sulla risorsa ProductionDatabase.

L'elemento Principal è necessario, ma supporta solo il carattere jolly (*), il che significa che la dichiarazione si applica a tutti i principali.

Nota

Durante un aggiornamento dello stack, aggiorna CloudFormation automaticamente le risorse che dipendono da altre risorse aggiornate. Ad esempio, CloudFormation aggiorna una risorsa che fa riferimento a una risorsa aggiornata. CloudFormation non apporta modifiche fisiche, come l'ID della risorsa, alle risorse aggiornate automaticamente, ma se a tali risorse è associata una policy di stack, è necessario disporre dell'autorizzazione per aggiornarle.

Definizione di una policy stack

Quando si crea uno stack, non è impostata nessuna policy stack, quindi sono consentite tutte le operazioni di aggiornamento su tutte le risorse. Per proteggere le risorse stack dalle operazioni di aggiornamento, definire una policy stack e quindi impostarla sullo stack. Una politica dello stack è un JSON documento che definisce le azioni di aggiornamento dello CloudFormation stack che CloudFormation gli utenti possono eseguire e le risorse a cui tali azioni si applicano. Si imposta la policy stack al momento della creazione di uno stack, specificando un file di testo che contiene la policy stack o digitandola. Quando si imposta una policy stack sullo stack, qualsiasi aggiornamento non esplicitamente consentito viene negato per impostazione predefinita.

Una policy stack si definisce in cinque elementi: Effect, Action, Principal, Resource e Condition. Il seguente pseudo codice mostra la sintassi di policy stack.

{ "Statement" : [ { "Effect" : "Deny_or_Allow", "Action" : "update_actions", "Principal" : "*", "Resource" : "LogicalResourceId/resource_logical_ID", "Condition" : { "StringEquals_or_StringLike" : { "ResourceType" : [resource_type, ...] } } } ] }
Effect

Determina se le azioni specificate vengono negate o consentite sulla/e risorsa/e specificata/e. È possibile specificare solo Deny o Allow, come per esempio:

"Effect" : "Deny"
Importante

Se una policy stack include istruzioni sovrapposte (sia consentendo sia negando gli aggiornamenti di una risorsa), una dichiarazione Deny sostituisce sempre una dichiarazione Allow. Per garantire che una risorsa venga protetta, utilizzare una dichiarazione Deny per tale risorsa.

Azione

Specifica le operazioni di aggiornamento che sono negate o consentite:

Update:Modify

Specifica le operazioni di aggiornamento durante le quali le risorse potrebbero non avere interruzioni o avere alcune interruzioni durante l'applicazione delle modifiche. Tutte le risorse mantengono la loro fisicità. IDs

Update:Replace

Specifica le azioni di aggiornamento durante le quali le risorse vengono ricreate. CloudFormationcrea una nuova risorsa con gli aggiornamenti specificati e quindi elimina la vecchia risorsa. Poiché la risorsa viene ricreata, l'ID fisico della nuova risorsa potrebbe essere diverso.

Update:Delete

Specifica le operazioni di aggiornamento durante le quali le risorse vengono rimosse. Gli aggiornamenti che rimuovono completamente le risorse da un modello stack richiedono questa operazione.

Aggiorna:*

Specifica tutte le operazioni di aggiornamento. L'asterisco è una carta jolly che rappresenta tutte le operazioni di aggiornamento.

L'esempio seguente mostra come specificare solo le operazioni di sostituzione ed eliminazione:

"Action" : ["Update:Replace", "Update:Delete"]

Per permettere tutte le operazioni di aggiornamento tranne una, utilizzare NotAction. Per esempio, per permettere tutte le operazioni di aggiornamento tranne Update:Delete, utilizzare NotAction, come illustrato in questo esempio:

{ "Statement" : [ { "Effect" : "Allow", "NotAction" : "Update:Delete", "Principal": "*", "Resource" : "*" } ] }
Principale

L'elemento Principal specifica l'entità a cui si applica la policy. Tale elemento è necessario ma supporta solo il carattere jolly (*), il che significa che la policy si applica a tutti i principali.

Risorsa

Speciifica la logica IDs delle risorse a cui si applica la politica. Per specificare i tipi di risorse, utilizzare l'elemento Condition.

Per specificare una singola risorsa, utilizzare il suo ID logico. Per esempio:

"Resource" : ["LogicalResourceId/myEC2instance"]

È possibile utilizzare una wild card con logicoIDs. Per esempio, se si utilizza un prefisso comune di ID logico per tutte le risorse correlate, è possibile specificarle tutte con un carattere jolly:

"Resource" : ["LogicalResourceId/CriticalResource*"]

È inoltre possibile utilizzare un elemento Not con le risorse. Per esempio, per permettere gli aggiornamenti di tutte le risorse tranne una, utilizzare un elemento NotResource per proteggere tale risorsa:

{ "Statement" : [ { "Effect" : "Allow", "Action" : "Update:*", "Principal": "*", "NotResource" : "LogicalResourceId/ProductionDatabase" } ] }

Quando si imposta una policy stack, qualsiasi aggiornamento non esplicitamente consentito viene negato. Consentendo gli aggiornamenti di tutte le risorse ad eccezione della risorsa ProductionDatabase, si rifiutano gli aggiornamenti alla risorsa ProductionDatabase.

Condizioni

Specifica il tipo di risorsa a cui si applica la policy. Per specificare la logica IDs di risorse specifiche, usa l'Resourceelemento.

È possibile specificare un tipo di risorsa, ad esempio tutte le istanze RDS DB EC2 e tutte, come illustrato nell'esempio seguente:

{ "Statement" : [ { "Effect" : "Deny", "Principal" : "*", "Action" : "Update:*", "Resource" : "*", "Condition" : { "StringEquals" : { "ResourceType" : ["AWS::EC2::Instance", "AWS::RDS::DBInstance"] } } }, { "Effect" : "Allow", "Principal" : "*", "Action" : "Update:*", "Resource" : "*" } ] }

L'Allowistruzione concede le autorizzazioni di aggiornamento a tutte le risorse e l'Denyistruzione nega gli aggiornamenti alle EC2 istanze DB. RDS La dichiarazione Deny sostituisce sempre le operazioni di permesso.

È possibile utilizzare un carattere jolly con i tipi di risorse. Ad esempio, puoi negare le autorizzazioni di aggiornamento a tutte le EC2 risorse Amazon, come istanze, gruppi di sicurezza e sottoreti, utilizzando una wild card, come mostrato nell'esempio seguente:

"Condition" : { "StringLike" : { "ResourceType" : ["AWS::EC2::*"] } }

Bisogna utilizzare la condizione StringLike quando si utilizzano i caratteri jolly.

Impostazione di una policy stack

Puoi usare la console o AWS CLI per applicare una politica dello stack quando si crea uno stack. Puoi anche usare il AWS CLI per applicare una politica di stack a uno stack esistente. Dopo aver applicato una policy di stack, non è possibile rimuoverla dallo stack, ma è possibile utilizzare la AWS CLI per modificarla.

Le politiche dello stack si applicano a tutti CloudFormation gli utenti che tentano di aggiornare lo stack. Non è possibile associare policy stack diverse a utenti diversi.

Per informazioni sulla scrittura delle policy stack, consulta Definizione di una policy stack.

Per impostare una policy stack quando si crea uno stack (console)
  1. Apri il AWS CloudFormation console in https://console.aws.amazon.com/cloudformation.

  2. Nella pagina CloudFormation Stacks, scegli Crea stack.

  3. Nella procedura guidata Create Stack (Crea stack), nella pagina Configure stack options (Configura opzioni stack), espandere la sezione Advanced (Avanzate), quindi scegliere Stack policy (Policy stack).

  4. Specificare la policy dello stack:

    • Per scrivere una policy direttamente nella console, scegliere Enter stack policy (Inserisci policy stack) e quindi la policy di stack direttamente nel campo di testo.

    • Per usare una policy definita in un file separato, scegliere Upload a file (Carica un file), quindi Choose file (Scegli file) per selezionare il file contenente la policy di stack.

Per impostare una politica dello stack quando crei uno stack (AWS CLI)
  • Utilizzare il comando aws cloudformation create-stack con l'opzione --stack-policy-body per digitare in una policy modificata o l'opzione --stack-policy-url per specificare un file contenente la policy.

Per impostare una politica di stack su uno stack esistente (AWS CLI solo)
  • Utilizzare il comando aws cloudformation set-stack-policy con l'opzione --stack-policy-body per digitare in una policy modificata o l'opzione --stack-policy-url per specificare un file contenente la policy.

    Nota

    Per aggiungere una policy a uno stack esistente, è necessario disporre dell'autorizzazione per CloudFormation SetStackPolicyOperazione .

Aggiornamento delle risorse protette

Per aggiornare le risorse protette, creare una policy temporanea che sovrascriva la policy stack e permetta gli aggiornamenti di tali risorse. Specificare la policy di sostituzione quando si aggiorna lo stack. La policy di sostituzione non modifica in modo permanente la policy stack.

Per aggiornare le risorse protette, è necessario disporre dell'autorizzazione a utilizzare il CloudFormation SetStackPolicyOperazione . Per informazioni sull'impostazione delle CloudFormation autorizzazioni, vedereControlla l'accesso con AWS Identity and Access Management.

Nota

Durante un aggiornamento dello stack, aggiorna CloudFormation automaticamente le risorse che dipendono da altre risorse aggiornate. Ad esempio, CloudFormation aggiorna una risorsa che fa riferimento a una risorsa aggiornata. CloudFormation non apporta modifiche fisiche, come l'ID delle risorse, alle risorse aggiornate automaticamente, ma se a tali risorse è associata una policy di stack, è necessario disporre dell'autorizzazione per aggiornarle.

Per aggiornare una risorsa protetta (console)
  1. Aprire il AWS CloudFormation console in https://console.aws.amazon.com/cloudformation.

  2. Selezionare lo stack che si desidera aggiornare, selezionare Stack actions (Operazioni stack), poi Update Stack (Aggiorna stack).

  3. Se non è stato modificato il modello di stack, selezionare Use current template (Utilizza modello corrente), quindi fare clic su Next (Avanti). Se è stato modificato il modello, selezionare Replace current template (Sostituisci modello corrente) e specificare la posizione del modello aggiornato nella sezione Specify template (Specificare modello):

    • Per un modello memorizzato localmente nel computer, selezionare Upload a template file (Carica un file modello). Scegliere Choose File (Scegli file) per accedere al file e selezionarlo e fare clic su Next (Avanti).

    • Per un modello archiviato in un bucket Amazon S3, seleziona Amazon S3. URL Inserisci o incolla il codice URL per il modello, quindi fai clic su Avanti.

      Se disponi di un modello in un bucket con la funzione Versioni multiple abilitata, puoi indicare una versione specifica di modello, ad esempio https://s3.amazonaws.com/templates/myTemplate.template?versionId=123ab1cdeKdOW5IH4GAcYbEngcpTJTDW. Per ulteriori informazioni, consulta Utilizzo di oggetti in un bucket che supporta la funzione Controllo delle versioni nella Guida per l'utente di Amazon Simple Storage Service.

  4. Se il modello contiene parametri, nella pagina Specify stack details (Specifica dettagli stack) immettere o modificare i valori di parametro, quindi selezionare Next (Avanti).

    CloudFormation popola ogni parametro con il valore attualmente impostato nello stack, ad eccezione dei parametri dichiarati con l'NoEchoattributo. È possibile utilizzare i valori correnti per questi parametri scegliendo Use existing value (Utilizza valore esistente).

    Per ulteriori informazioni sull'utilizzo di NoEcho per mascherare le informazioni sensibili e sull'utilizzo dei parametri dinamici per gestire i segreti, consulta la best practice Non incorporare le credenziali nei modelli.

  5. Specificare una policy di stack di sostituzione.

    1. Nella pagina Configure stack options (Configura opzioni stack), nella sezione Advanced options (Opzioni avanzate), selezionare Stack policy (Policy stack).

    2. Selezionare Upload a file (Carica un file).

    3. Fare clic su Choose file (Scegli file) e passare al file che contiene le policy di stack di sostituzione o digitare una policy.

    4. Scegli Next (Successivo).

    Le policy di sostituzione devono specificare una dichiarazione Allow per le risorse protette che si desidera aggiornare. Per esempio, per aggiornare tutte le risorse protette, specificare una policy di sostituzione temporanea che permetta tutti gli aggiornamenti:

    { "Statement" : [ { "Effect" : "Allow", "Action" : "Update:*", "Principal": "*", "Resource" : "*" } ] }
    Nota

    CloudFormation applica la politica di esclusione solo durante questo aggiornamento. La policy di sostituzione non modifica in modo permanente la policy stack. Per modificare una policy stack, consulta Modifica di una policy stack .

  6. Esaminare le informazioni stack e le modifiche inviate.

    Verifica di aver inviato le informazioni corrette, ad esempio i valori dei parametri o il modello URL corretti. Se il modello contiene IAM risorse, scegli Riconosco che questo modello può creare IAM risorse per specificare che desideri utilizzare IAM le risorse del modello. Per ulteriori informazioni sull'utilizzo IAM delle risorse nei modelli, consultaControlla l'accesso con AWS Identity and Access Management.

    Nella sezione Anteprima delle modifiche, verifica che CloudFormation vengano apportate tutte le modifiche previste. Ad esempio, verifica che CloudFormation aggiunga, rimuova e modifichi le risorse che intendevi aggiungere, rimuovere o modificare. CloudFormationgenera questa anteprima creando un set di modifiche per lo stack. Per ulteriori informazioni, consulta Aggiorna CloudFormation gli stack utilizzando i set di modifiche.

  7. Se le modifiche sono quelle desiderate, fare clic su Update (Aggiorna).

    Nota

    A questo punto, è possibile visualizzare il set di modifiche per rivedere gli aggiornamenti proposti più accuratamente. A tale scopo, fate clic su Visualizza set di modifiche anziché su Aggiorna. CloudFormation visualizza il set di modifiche generato in base agli aggiornamenti. Quando si è pronti per eseguire l'aggiornamento dello stack, fare clic su Execute (Esegui).

    CloudFormation visualizza la pagina dei dettagli dello stack relativo allo stack. Lo stato dello stack è ora _IN_. UPDATE PROGRESS Dopo aver CloudFormation completato con successo l'aggiornamento dello stack, imposta lo stato dello stack su _. UPDATE COMPLETE

    Se l'aggiornamento dello stack fallisce CloudFormation, ripristina automaticamente le modifiche e imposta lo stato dello stack su _ _. UPDATE ROLLBACK COMPLETE

Per aggiornare una risorsa protetta (AWS CLI)
  • Utilizzo dell'update-stackcomando con l'--stack-policy-during-update-bodyopzione di digitare una politica modificata o l'--stack-policy-during-update-urlopzione per specificare un file contenente la politica.

    Nota

    CloudFormation applica la politica di override solo durante questo aggiornamento. La policy di sostituzione non modifica in modo permanente la policy stack. Per modificare una policy stack, consulta Modifica di una policy stack .

Modifica di una policy stack

Per proteggere le risorse aggiuntive o per rimuovere la protezione dalle risorse, modificare la policy stack. Per esempio, quando si aggiunge un database che si desidera proteggere allo stack, aggiungere una dichiarazione Deny per quel database alla policy stack. Per modificare la politica, è necessario disporre del permesso di utilizzare il SetStackPolicyOperazione .

Usa il AWS CLI per modificare le politiche dello stack.

Per modificare una politica dello stack (AWS CLI)
  • Utilizzo dell'set-stack-policycomando con la --stack-policy-body possibilità di digitare una policy modificata o l'--stack-policy-urlopzione di specificare un file contenente la policy.

Non è possibile eliminare una policy stack. Per rimuovere tutta la protezione da tutte le risorse, si modifica la policy per permettere esplicitamente tutte le operazioni su tutte le risorse. La policy seguente permette tutti gli aggiornamenti su tutte le risorse:

{ "Statement" : [ { "Effect" : "Allow", "Action" : "Update:*", "Principal": "*", "Resource" : "*" } ] }

Ulteriori esempi di policy stack

Le policy di esempio seguenti mostrano come impedire gli aggiornamenti di tutte le risorse stack e di risorse specifiche e come impedire tipologie specifiche di aggiornamenti.

Impedire gli aggiornamenti di tutte le risorse stack

Per impedire gli aggiornamenti di tutte le risorse stack, la policy seguente specifica una dichiarazione Deny per tutte le operazioni di aggiornamento su tutte le risorse.

{ "Statement" : [ { "Effect" : "Deny", "Action" : "Update:*", "Principal": "*", "Resource" : "*" } ] }

Impedire gli aggiornamenti di una singola risorsa

La policy seguente nega tutte le operazioni di aggiornamento sul database con l'ID logico MyDatabase. Essa consente tutte le operazioni di aggiornamento su tutte le altre risorse stack con una dichiarazione Allow. La dichiarazione Allow non si applica alla risorsa MyDatabase perché la dichiarazione Deny sostituisce sempre le operazioni di permesso.

{ "Statement" : [ { "Effect" : "Deny", "Action" : "Update:*", "Principal": "*", "Resource" : "LogicalResourceId/MyDatabase" }, { "Effect" : "Allow", "Action" : "Update:*", "Principal": "*", "Resource" : "*" } ] }

È possibile ottenere lo stesso risultato dell'esempio precedente utilizzando un rifiuto per default. Quando impostate una politica di stack, CloudFormation nega qualsiasi aggiornamento che non sia esplicitamente consentito. La policy seguente consente gli aggiornamenti di tutte le risorse ad eccezione della risorsa ProductionDatabase, che viene rifiutata per default.

{ "Statement" : [ { "Effect" : "Allow", "Action" : "Update:*", "Principal": "*", "NotResource" : "LogicalResourceId/ProductionDatabase" } ] }
Importante

Vi è rischio nell'utilizzo di un rifiuto per default. Se si dispone di una dichiarazione Allow altrove nella policy (come per esempio una dichiarazione Allow che utilizza un carattere jolly), è possibile concedere inconsapevolmente l'autorizzazione all'aggiornamento di risorse per le quali non lo si voleva. Poiché un rifiuto esplicito sostituisce qualsiasi operazione di permesso, è possibile fare in modo che una risorsa venga protetta utilizzando una dichiarazione Deny.

Impedire gli aggiornamenti di tutte le istanze di un tipo di risorsa

La seguente politica nega tutte le azioni di aggiornamento sul tipo di risorsa dell'istanza RDS DB. Essa consente tutte le operazioni di aggiornamento su tutte le altre risorse stack con una dichiarazione Allow. L'Allowistruzione non si applica alle risorse dell'istanza RDS DB perché un'Denyistruzione ha sempre la precedenza sulle azioni di autorizzazione.

{ "Statement" : [ { "Effect" : "Deny", "Action" : "Update:*", "Principal": "*", "Resource" : "*", "Condition" : { "StringEquals" : { "ResourceType" : ["AWS::RDS::DBInstance"] } } }, { "Effect" : "Allow", "Action" : "Update:*", "Principal": "*", "Resource" : "*" } ] }

Impedire gli aggiornamenti di sostituzione per un'istanza

La policy seguente rifiuta gli aggiornamenti che causerebbero una sostituzione dell'istanza con l'ID logico MyInstance. Essa consente tutte le operazioni di aggiornamento su tutte le altre risorse stack con una dichiarazione Allow. La dichiarazione Allow non si applica alla risorsa MyInstance perché la dichiarazione Deny sostituisce sempre le operazioni di permesso.

{ "Statement" : [ { "Effect" : "Deny", "Action" : "Update:Replace", "Principal": "*", "Resource" : "LogicalResourceId/MyInstance" }, { "Effect" : "Allow", "Action" : "Update:*", "Principal": "*", "Resource" : "*" } ] }

Impedire gli aggiornamenti degli stack nidificati

La seguente politica nega tutte le azioni di aggiornamento sul tipo di risorsa CloudFormation dello stack (stack annidati). Essa consente tutte le operazioni di aggiornamento su tutte le altre risorse stack con una dichiarazione Allow. L'Allowistruzione non si applica alle risorse dello CloudFormation stack perché l'Denyistruzione sostituisce sempre le azioni allow.

{ "Statement" : [ { "Effect" : "Deny", "Action" : "Update:*", "Principal": "*", "Resource" : "*", "Condition" : { "StringEquals" : { "ResourceType" : ["AWS::CloudFormation::Stack"] } } }, { "Effect" : "Allow", "Action" : "Update:*", "Principal": "*", "Resource" : "*" } ] }