Empêcher les mises à jour des ressources de la pile - AWS CloudFormation

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Empêcher les mises à jour des ressources de la pile

Lorsque vous créez une pile, toutes les actions de mise à jour sont autorisées au niveau de toutes les ressources. Par défaut, toute personne disposant des autorisations de mise à jour de la pile peuvent mettre à jour toutes les ressources correspondantes. Au cours d'une mise à jour, certaines ressources peuvent nécessiter une interruption ou être complètement remplacées, ce qui se traduit par un nouvel espace de stockage physique IDs ou un stockage complètement nouveau. Vous pouvez empêcher les ressources de la pile d'être mises à jour ou supprimées par erreur pendant une mise à jour de la pile. Une politique de pile est un JSON document qui définit les actions de mise à jour qui peuvent être effectuées sur des ressources désignées.

Une fois que vous avez défini une politique de pile, toutes les ressources de cette dernière sont protégées par défaut. Pour autoriser les mises à jour de ressources spécifiques, vous spécifiez une instruction Allow explicite pour ces ressources dans votre politique de pile. Vous ne pouvez définir qu'une seule politique de pile par pile, mais, vous pouvez protéger plusieurs ressources au sein d'une politique unique. Une politique de pile s'applique à tous les CloudFormation utilisateurs qui tentent de mettre à jour la pile. Vous ne pouvez pas associer des politiques de pile différentes à des utilisateurs distincts.

Une politique de pile s'applique uniquement au cours des mises à jour de la pile. Il ne fournit pas de contrôles d'accès comme un AWS Identity and Access Management (IAM) politique. Utilisez uniquement une politique de pile comme mécanisme de sécurité afin d'empêcher les mises à jour accidentelles de ressources spécifiques de la pile. Pour contrôler l'accès à AWS ressources ou actions, utilisezIAM.

Exemple de politique de pile

L'exemple suivant de politique de pile empêche les mises à jour de la ProductionDatabase ressource :

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

Lorsque vous définissez une politique de pile, toutes les ressources sont protégées par défaut. Pour autoriser les mises à jour de toutes les ressources, nous ajoutons une instruction Allow, qui autorise toutes les actions sur toutes les ressources. Bien que l'instruction Allow spécifie toutes les ressources, l'instruction Deny explicite prévaut pour la ressource associée à l'ID logique ProductionDatabase. Cette instruction Deny empêche toutes les actions de mise à jour, telles que le remplacement ou la suppression, u niveau de la ressource ProductionDatabase.

L'élément Principal est obligatoire, mais accepte uniquement le caractère générique (*). Autrement dit, l'instruction s'applique à tous les mandataires.

Note

Lors d'une mise à jour de la pile, met CloudFormation automatiquement à jour les ressources qui dépendent d'autres ressources mises à jour. Par exemple, CloudFormation met à jour une ressource qui fait référence à une ressource mise à jour. CloudFormation n'apporte aucune modification physique, telle que l'ID de la ressource, aux ressources mises à jour automatiquement, mais si une politique de pile est associée à ces ressources, vous devez être autorisé à les mettre à jour.

Définition d'une politique de pile

Lorsque vous créez une pile, aucune politique de pile n'est définie. Dès lors, toutes les actions de mise à jour sont autorisées sur toutes les ressources. Pour protéger les ressources de la pile contre les actions de mise à jour, spécifiez une politique de pile correspondante. Une politique de pile est un JSON document qui définit les actions de mise à jour de la CloudFormation pile que CloudFormation les utilisateurs peuvent effectuer et les ressources auxquelles ces actions s'appliquent. Vous définissez la politique de la pile lorsque vous créez cette dernière, en spécifiant un fichier texte qui contient votre politique de pile ou en saisissant les informations requises. Lorsque vous définissez une politique au niveau de votre pile, toute mise à jour qui n'est pas explicitement autorisée est refusée par défaut.

Vous pouvez spécifier une politique de pile avec cinq éléments : Effect, Action, Principal, Resource et Condition. Le code fictif suivant illustre la syntaxe de la politique de pile.

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

Détermine si les actions que vous spécifiez sont refusées ou autorisées au niveau des ressources que vous spécifiez. Vous pouvez spécifier uniquement Deny ou Allow (, par exemple).

"Effect" : "Deny"
Important

Si une politique de pile inclut des déclarations contradictoires (qui autorisent et refusent en même temps les mises à jour d'une ressource), une instruction Deny prévaut toujours sur une instruction Allow. Pour vous assurer qu'une ressource est protégée, utilisez une instruction Deny pour celle-ci.

Action

Spécifie les actions de mise à jour qui sont refusées ou autorisées :

Update:Modify

Spécifie les actions de mise à jour au cours desquelles les ressources peuvent rencontrer quelques interruptions ou aucune lorsque les modifications sont appliquées. Toutes les ressources conservent leur aspect physiqueIDs.

Update:Replace

Spécifie les actions de mise à jour au cours desquelles les ressources sont recréées. CloudFormationcrée une nouvelle ressource avec les mises à jour spécifiées, puis supprime l'ancienne ressource. Etant donné que la ressource est recréée, l'ID physique de la nouvelle ressource peut être différent.

Update:Delete

Spécifie les actions de mise à jour au cours desquelles les ressources sont supprimées. Les mises à jour qui suppriment totalement les ressources d'un modèle de pile requièrent cette action.

Mise à jour:*

Spécifie toutes les actions de mise à jour. L'astérisque est un caractère générique qui représente toutes les actions de mise à jour.

L'exemple suivant montre comment définir uniquement les actions de remplacement et de suppression :

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

Pour autoriser toutes les actions de mise à jour à l'exception de l'une d'elles, utilisez NotAction. Par exemple, pour autoriser toutes les actions de mise à jour à l'exception de l'action Update:Delete, utilisez NotAction, comme illustré dans cet exemple :

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

L'élément Principal spécifie l'entité à laquelle la politique s'applique. Cet élément est obligatoire, mais accepte uniquement le caractère générique (*). Autrement dit, l'instruction s'applique à tous les mandataires.

Ressource

Spécifie la logique IDs des ressources auxquelles la politique s'applique. Pour définir les types de ressources, utilisez l'élément Condition.

Pour spécifier une seule ressource, utilisez son ID logique. Par exemple :

"Resource" : ["LogicalResourceId/myEC2instance"]

Vous pouvez utiliser un joker avec logiqueIDs. Par exemple, si vous utilisez un préfixe d'ID logique commun pour toutes les ressources connexes, vous pouvez tous les spécifier avec un caractère générique :

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

Vous pouvez également utiliser un élément Not avec les ressources. Par exemple, pour autoriser les mises à jour de toutes les ressources à l'exception d'une seule, utilisez l'élément NotResource afin de protéger cette ressource :

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

Lorsque vous définissez une politique de pile, toute mise à jour qui n'est pas explicitement autorisée est refusée. En autorisant les mises à jour de toutes les ressources à l'exception de la ressource ProductionDatabase, vous refusez les mises à jour de ProductionDatabase.

Conditions

Spécifie le type de ressource auquel la politique s'applique. Pour définir la logique IDs de ressources spécifiques, utilisez l'Resourceélément.

Vous pouvez spécifier un type de ressource, tel que toutes les instances EC2 et les RDS instances de base de données, comme illustré dans l'exemple suivant :

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

L'Allowinstruction accorde des autorisations de mise à jour à toutes les ressources et l'Denyinstruction refuse les mises à jour EC2 et les RDS instances de base de données. L'instruction Deny prévaut toujours sur les actions autorisées.

Vous pouvez utiliser un caractère générique avec les types de ressource. Par exemple, vous pouvez refuser les autorisations de mise à jour pour toutes les EC2 ressources Amazon, telles que les instances, les groupes de sécurité et les sous-réseaux, en utilisant un caractère générique, comme illustré dans l'exemple suivant :

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

Vous devez utiliser la condition StringLike lorsque vous utilisez des caractères génériques.

Définition d'une politique de pile

Vous pouvez utiliser la console ou AWS CLI pour appliquer une politique de pile lorsque vous créez une pile. Vous pouvez également utiliser le AWS CLI pour appliquer une politique de pile à une pile existante. Après avoir appliqué une politique de pile, vous ne pouvez pas la supprimer de la pile, mais vous pouvez utiliser le AWS CLI pour le modifier.

Les politiques de pile s'appliquent à tous les CloudFormation utilisateurs qui tentent de mettre à jour la pile. Vous ne pouvez pas associer des politiques de pile différentes à des utilisateurs distincts.

Pour plus d'informations sur la création de politiques de pile, consultez Définition d'une politique de pile.

Pour définir une politique de pile lors de la création de la pile (console)
  1. Ouvrez le fichier AWS CloudFormation console sur https://console.aws.amazon.com/cloudformation.

  2. Sur la page CloudFormation Stacks, choisissez Create stack.

  3. Dans l'assistant Créer une pile, à la page Configure stack options (Configurer les options de pile), développez la section Avancé, puis choisissez Politique de pile.

  4. Spécifiez la politique de pile :

    • Pour écrire une politique directement dans la console, choisissez Enter stack policy (Entrer la politique de pile), puis tapez la politique de pile directement dans le champ de texte.

    • Pour utiliser une politique définie dans un fichier distinct, choisissez Upload a file (Charger un fichier) puis Choose file (Choisir un fichier) pour sélectionner le fichier contenant la politique de pile.

Pour définir une politique de pile lorsque vous créez une pile (AWS CLI)
  • Utilisez la commande aws cloudformation create-stack avec l'option --stack-policy-body pour saisir une politique modifiée, ou l'option --stack-policy-url pour spécifier un fichier contenant la politique.

Pour définir une politique de pile sur une pile existante (AWS CLI uniquement)
  • Utilisez la commande aws cloudformation set-stack-policy avec l'option --stack-policy-body pour saisir une politique modifiée, ou l'option --stack-policy-url pour spécifier un fichier contenant la politique.

    Note

    Pour ajouter une politique à une pile existante, vous devez être autorisé à CloudFormation SetStackPolicy action.

Mise à jour des ressources protégées

Pour mettre à jour les ressources protégées, créez une politique temporaire qui remplace la politique de la pile et qui autorise les mises à jour de ces ressources. Spécifiez la politique de remplacement lorsque vous mettez à jour la pile. Cette politique ne modifie pas la politique de pile de manière permanente.

Pour mettre à jour les ressources protégées, vous devez être autorisé à utiliser le CloudFormation SetStackPolicy action. Pour de plus amples informations sur la définition des autorisations CloudFormation, veuillez consulter Contrôlez l'accès avec AWS Identity and Access Management.

Note

Lors d'une mise à jour de la pile, met CloudFormation automatiquement à jour les ressources qui dépendent d'autres ressources mises à jour. Par exemple, CloudFormation met à jour une ressource qui fait référence à une ressource mise à jour. CloudFormation n'apporte aucune modification physique, telle que l'identifiant des ressources, aux ressources mises à jour automatiquement, mais si une politique de pile est associée à ces ressources, vous devez être autorisé à les mettre à jour.

Pour mettre à jour une ressource protégée (console)
  1. Ouvrez le fichier AWS CloudFormation console sur https://console.aws.amazon.com/cloudformation.

  2. Sélectionnez la pile que vous souhaitez mettre à jour, choisissez Stack actions (Actions de pile) puis Mettre à jour la pile.

  3. Si vous n'avez pas modifié le modèle de pile, sélectionnez Utiliser modèle en cours, puis cliquez sur Suivant. Si vous avez modifié le modèle, sélectionnez Replace current template (Remplacer le modèle en cours) et spécifiez l'emplacement du modèle mis à jour dans la section Specify template (Spécifier le modèle) :

    • Pour un modèle stocké localement sur votre ordinateur, sélectionnez Upload a template file (Charger un fichier de modèle). Choisissez Choose File (Choisir un fichier) pour accéder au fichier, sélectionnez-le, puis cliquez sur Suivant.

    • Pour un modèle stocké dans un compartiment Amazon S3, sélectionnez Amazon S3 URL. Entrez ou collez le code URL correspondant au modèle, puis cliquez sur Suivant.

      Si votre modèle se trouve dans un compartiment dans lequel la gestion des versions est activée, vous pouvez spécifier une version spécifique du modèle, telle que https://s3.amazonaws.com/templates/myTemplate.template?versionId=123ab1cdeKdOW5IH4GAcYbEngcpTJTDW. Pour plus d'informations, veuillez consulter la rubrique Gestion des objets dans un compartiment activé pour la gestion des versions dans le Guide de l'utilisateur Amazon Simple Storage Service.

  4. Si votre modèle contient des paramètres, sur la page Specify stack details (Spécifier les détails de pile), entrez ou modifiez les valeurs de paramètre, puis choisissez Suivant.

    CloudFormation remplit chaque paramètre avec la valeur actuellement définie dans la pile, à l'exception des paramètres déclarés avec l'NoEchoattribut. Pour utiliser les valeurs actuelles de ces paramètres, choisissez Utiliser valeur existante.

    Pour plus d’informations sur l’utilisation de NoEcho pour masquer des informations sensibles, ainsi que sur l’utilisation de paramètres dynamiques pour gérer les secrets, consultez la documentation sur la bonne pratique consistant à ne pas intégrer les informations d’identification dans vos modèles.

  5. Spécifiez une politique de pile de remplacement.

    1. Sur la page Configure stack options (Configurer les options de pile), dans la section Options avancées, sélectionnez Politique de pile.

    2. Sélectionnez Upload a file (Charger un fichier).

    3. Cliquez sur Choose file (Choisir un fichier) et accédez au fichier contenant la politique de pile de remplacement ou tapez une politique.

    4. Choisissez Suivant.

    La politique de remplacement doit spécifier une instruction Allow pour les ressources protégées que vous souhaitez mettre à jour. Par exemple, pour mettre à jour toutes les ressources protégées, définissez une politique de remplacement temporaire qui permet toutes les mises à jour :

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

    CloudFormation applique la politique de dérogation uniquement pendant cette mise à jour. Cette politique ne modifie pas la politique de pile de manière permanente. Pour modifier une politique de pile, consultez la page Modification d'une politique de pile .

  6. Passez en revue les informations de la pile et les modifications que vous avez soumises.

    Vérifiez que vous avez soumis les informations correctes, telles que les valeurs de paramètres ou le modèle correctsURL. Si votre modèle contient des IAM ressources, choisissez Je reconnais que ce modèle peut créer IAM des ressources pour spécifier que vous souhaitez utiliser IAM des ressources dans le modèle. Pour plus d'informations sur l'utilisation IAM des ressources dans les modèles, consultezContrôlez l'accès avec AWS Identity and Access Management.

    Dans la section Aperçu de vos modifications, vérifiez que toutes les modifications attendues CloudFormation seront apportées. Par exemple, vérifiez que CloudFormation les ressources que vous vouliez ajouter, supprimer ou modifier sont ajoutées, supprimées ou modifiées. CloudFormationgénère cet aperçu en créant un ensemble de modifications pour la pile. Pour de plus amples informations, veuillez consulter Mettre à jour CloudFormation les piles à l'aide d'ensembles de modifications.

  7. Lorsque vous êtes satisfait de vos modifications, cliquez sur Update (Mettre à jour).

    Note

    À ce stade, vous avez aussi la possibilité d'afficher le jeu de modifications pour vérifier de façon plus complète vos mises à jour proposées. Pour ce faire, cliquez sur Afficher l'ensemble de modifications au lieu de Mettre à jour. CloudFormation affiche l'ensemble de modifications généré en fonction de vos mises à jour. Lorsque vous êtes prêt à effectuer la mise à jour de la pile, cliquez sur Exécuter.

    CloudFormation affiche la page des détails de la pile correspondant à votre pile. Votre pile a désormais le statut UPDATE_IN_ PROGRESS. Une CloudFormation fois la mise à jour de la pile terminée avec succès, le statut de la pile est défini sur UPDATE_ COMPLETE.

    Si la mise à jour de la pile échoue, CloudFormation ; annule automatiquement les modifications et définit le statut de la pile sur UPDATE_ ROLLBACK _ COMPLETE.

Pour mettre à jour une ressource protégée (AWS CLI)
  • Utilisation de la update-stackcommande avec la --stack-policy-during-update-body possibilité de saisir une politique modifiée ou de --stack-policy-during-update-url spécifier un fichier contenant la politique.

    Note

    CloudFormation applique la politique de dérogation uniquement pendant cette mise à jour. Cette politique ne modifie pas la politique de pile de manière permanente. Pour modifier une politique de pile, consultez la page Modification d'une politique de pile .

Modification d'une politique de pile

Pour protéger des ressources supplémentaires ou pour supprimer la protection de ressources, modifiez la politique de pile. Par exemple, lorsque vous ajoutez à votre pile une base de données que vous souhaitez protéger, appliquez une instruction Deny pour cette base de données à la politique de pile. Pour modifier la politique, vous devez être autorisé à utiliser le SetStackPolicy action.

Utilisez la commande AWS CLI pour modifier les politiques de pile.

Pour modifier une politique de stack (AWS CLI)
  • Utilisation de la set-stack-policycommande avec la --stack-policy-body possibilité de saisir une politique modifiée ou de --stack-policy-url spécifier un fichier contenant la politique.

Vous ne pouvez pas supprimer une politique de pile. Pour supprimer toute la protection de toutes les ressources, vous devez modifier la politique pour autoriser explicitement toutes les actions pour toutes les ressources. La politique suivante autorise toutes les mises à jour au niveau de toutes les ressources :

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

Autres exemples de politiques de pile

Les exemples suivants de stratégie de pile montre comment empêcher les mises à jour de toutes les ressources de la pile et de ressources spécifiques, ainsi que comment empêcher certains types de mises à jour.

Empêcher les mises à jour de toutes les ressources de la pile

Pour éviter les mises à jour de toutes les ressources d'une pile, la politique suivante spécifie une instruction Deny pour toutes les actions de mise à jour pour toutes les ressources.

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

Empêcher les mises à jour d'une seule ressource

La politique suivante refuse toutes les actions de mise à jour de la base de données associée à l'ID logique MyDatabase. Elle autorise toutes les actions de mise à jour au niveau de toutes les autres ressources de la pile avec une instruction Allow. L'instruction Allow ne s'applique pas à la ressource MyDatabase, car l'instruction Deny prévaut toujours sur les actions autorisées.

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

Vous pouvez obtenir le même résultat que l'exemple précédent en utilisant un refus par défaut. Lorsque vous définissez une politique de stack, elle CloudFormation refuse toute mise à jour qui n'est pas explicitement autorisée. La politique suivante autorise les mises à jour de toutes les ressources, à l'exception de la ressource ProductionDatabase, qui est refusée par défaut.

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

L'utilisation d'un refus par défaut présente des risques. Si vous utilisez une instruction Allow ailleurs dans la politique (par exemple, une instruction Allow qui utilise un caractère générique), vous pouvez sans le savoir accorder l'autorisation de mise à jour à des ressources qui ne devraient pas avoir cette autorisation. Comme un refus explicite prévaut sur toutes les actions autorisées, une ressource est réellement protégée avec une instruction Deny.

Empêcher les mises à jour de toutes les Instances d'un type de ressource

La politique suivante refuse toutes les actions de mise à jour sur le type de ressource d'RDSinstance de base de données. Elle autorise toutes les actions de mise à jour au niveau de toutes les autres ressources de la pile avec une instruction Allow. L'Allowinstruction ne s'applique pas aux ressources de l'RDSinstance de base de données car une Deny instruction remplace toujours les actions d'autorisation.

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

Empêcher les mises à jour de remplacement d'une instance

La politique suivante refuse les mises à jour qui entraîneraient un remplacement de l'instance associée à l'ID logique MyInstance. Elle autorise toutes les actions de mise à jour au niveau de toutes les autres ressources de la pile avec une instruction Allow. L'instruction Allow ne s'applique pas à la ressource MyInstance, car l'instruction Deny prévaut toujours sur les actions autorisées.

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

Empêcher les mises à jour des piles imbriquées

La politique suivante refuse toutes les actions de mise à jour sur le type de ressource de CloudFormation pile (piles imbriquées). Elle autorise toutes les actions de mise à jour au niveau de toutes les autres ressources de la pile avec une instruction Allow. L'Allowinstruction ne s'applique pas aux ressources de la CloudFormation pile car elle remplace toujours les Deny actions d'autorisation.

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