Une politique de stack empêche la mise à jour ou la suppression accidentelle des ressources d'une stack lors d'une mise à jour. Cette rubrique décrit le fonctionnement d'une politique de stack ainsi que les méthodes pour la définir et la modifier.
Informations générales
Une politique de stack est un document au format JSON ou YAML définissant les actions de mise à jour autorisées sur des ressources spécifiques. Lors de la création d'une stack, tout utilisateur disposant des permissions nécessaires peut mettre à jour l'ensemble de ses ressources. Certaines mises à jour peuvent entraîner une interruption de service. Une fois la politique de stack configurée, ROS protège toutes les ressources qu'elle contient. Ajoutez ensuite des instructions Allow explicites à la politique pour autoriser les mises à jour sur certaines ressources.
Chaque stack n'accepte qu'une seule politique, mais celle-ci peut protéger plusieurs ressources simultanément.
Lors d'une mise à jour de stack, ROS met automatiquement à jour les ressources dépendantes. Par exemple, si une ressource en référence une autre qui a été modifiée, elle sera également mise à jour. Toutefois, si ces ressources sont couvertes par une politique de stack, vous devez posséder les permissions requises pour les modifier.
La politique de stack s'applique uniquement pendant les mises à jour. Contrairement à une politique RAM, elle n'assure pas le contrôle d'accès. Elle agit comme un mécanisme de sécurité destiné à empêcher les modifications accidentelles de ressources spécifiques au sein de la stack.
Définir une politique de stack
En l'absence de politique de stack lors de sa création, toutes les actions de mise à jour sont autorisées sur l'ensemble des ressources. Pour restreindre ces opérations, définissez une politique de stack et appliquez-la. Configurez cette politique dès la création de la stack, soit via un fichier texte, soit par saisie directe. Une fois la politique en place, toute mise à jour non explicitement autorisée est refusée par défaut.
Une politique de stack se compose de cinq éléments : Effect, Action, Principal, Resource et Condition.
Statement:
- Effect: Deny_or_Allow
Action: update_actions
Principal: '*'
Resource: LogicalResourceId/resource_logical_ID
Condition:
StringEquals_or_StringLike:
ResourceType:
- resource_type
- ...
Voici la description de chaque élément :
-
EffectCet élément détermine si les actions spécifiées sur les ressources ciblées sont autorisées ou refusées. Les valeurs possibles sont
DenyouAllow. Exemple :Effect: DenyRemarqueSi une politique contient des instructions contradictoires (autorisant et refusant simultanément une mise à jour sur la même ressource), l'instruction
Denyprévaut toujours sur l'instructionAllow. Pour garantir la protection d'une ressource, utilisez une instructionDeny. -
ActionCet élément liste les actions de mise à jour autorisées ou interdites :
-
Update:ModifyOpérations de mise à jour modifiant une ressource, avec ou sans interruption de service.
-
Update:DeleteCette action est nécessaire lorsque la mise à jour du modèle de stack entraîne la suppression d'une ressource.
-
Update:*Toutes les opérations de mise à jour. L'astérisque (*) est un caractère générique représentant l'ensemble des actions de mise à jour.
RemarqueBien qu'il soit possible de spécifier
Update:Replacepour l'élémentAction, cette fonctionnalité est réservée et n'est pas prise en charge actuellement.L'exemple suivant illustre comment autoriser uniquement les opérations de modification et de suppression :
Action: - Update:Modify - Update:DeletePour autoriser toutes les mises à jour sauf une spécifique, utilisez
NotAction. Par exemple, pour tout permettre exceptéUpdate:Delete, recourez àNotAction.Statement: - Effect: Allow NotAction: Update:Delete Principal: '*' Resource: '*' -
-
PrincipalEntité concernée par la politique. Seul l'astérisque (*) est pris en charge ; il indique que la politique s'applique à tous les principaux.
-
ResourceID logique de la ressource concernée par la politique. Pour cibler un type de ressource plutôt qu'une ressource unique, utilisez l'élément
Condition.Spécifiez une ressource à l'aide de son ID logique. Exemple :
Resource: - LogicalResourceId/myECSL'utilisation d'un astérisque () dans l'ID logique est possible. Ainsi, si plusieurs ressources partagent un préfixe commun, utilisez ce préfixe suivi d'un caractère générique () pour toutes les cibler.
Resource: - LogicalResourceId/Prefix*L'élément
Notest également disponible pour les ressources. Par exemple, pour autoriser les mises à jour sur toutes les ressources sauf une, utilisezNotResourceafin de désigner la ressource protégée.Statement: - Effect: Allow Action: Update:* Principal: '*' NotResource: LogicalResourceId/WebServersLorsqu'une politique de stack est active, toute mise à jour non explicitement permise est rejetée. En autorisant les modifications sur toutes les ressources hormis
WebServers, vous bloquez implicitement toute mise à jour concernant la ressourceWebServers. -
ConditionType de ressource auquel la politique s'applique. Pour cibler l'ID logique d'une ressource précise, servez-vous de l'élément
Resource.Spécifiez des types de ressources, tels que les instances ECS ou ApsaraDB RDS.
Statement: - Effect: Deny Principal: '*' Action: Update:* Resource: '*' Condition: StringEquals: ResourceType: - ALIYUN::ECS::Instance - ALIYUN::RDS::DBInstance - Effect: Allow Principal: '*' Action: Update:* Resource: '*'L'instruction
Allowaccorde les droits de mise à jour sur toutes les ressources, tandis que l'instructionDenybloque spécifiquement les instances ECS et ApsaraDB RDS. Notez que l'instructionDenyprime toujours sur les instructions Allow.L'usage de l'astérisque (*) est autorisé pour les types de ressources. Cela permet, par exemple, d'interdire les mises à jour pour l'ensemble des ressources ECS (instances, groupes de sécurité, sous-réseaux, etc.).
Condition: StringLike: ResourceType: - ALIYUN::ECS::*RemarqueL'utilisation d'un caractère générique (*) impose le recours à la condition StringLike.
Configurer une politique de stack
Appliquez une politique de stack lors de la création via la console ROS ou Alibaba Cloud CLI. Pour une stack existante, l'utilisation d'Alibaba Cloud CLI est obligatoire. Une fois appliquée, la politique ne peut être retirée, mais reste modifiable via la CLI.
-
Définir une politique de stack lors de la création (console)
Connectez-vous à la console ROS.
Dans le volet de navigation de gauche, cliquez sur Stacks.
Dans la barre de navigation supérieure, sélectionnez une région dans la liste déroulante, par exemple China (Hangzhou).
Sur la page Stacks, cliquez sur Create Stack, puis choisissez Use ROS dans la liste déroulante.
Dans l'assistant Create Stack, à l'étape Select Template, choisissez un modèle et cliquez sur Next.
Toujours dans l'assistant Create Stack, sur la page Configure Parameters, renseignez le Stack Name ainsi que les paramètres du modèle.
Dans la section Configure Stack Settings, réglez Stack Policy sur Input Stack Policy.
-
Configurez la politique de stack et cliquez sur Next.
Input Stack Policy : Saisissez directement le contenu de la politique.
Upload File : Importez un fichier JSON ou YAML contenant la politique de stack.
-
Sur la page Compliance Precheck, effectuez la vérification de conformité et cliquez sur Next.
RemarqueLa fonctionnalité Compliance Precheck n'est disponible que pour certaines ressources. Pour plus de détails, consultez Vérification préalable de la conformité.
-
Dans la section Detection Rule, ajoutez des règles de détection.
Sélectionnez les règles adaptées aux ressources cloud présentes dans votre modèle ROS.
-
Cliquez sur Check.
Modifiez le modèle selon les solutions de correction suggérées pour les ressources non conformes afin d'assurer leur conformité.
-
Suivez les instructions à l'écran pour terminer la création de la stack.
-
Définir une politique de stack lors de la création (CLI)
Deux méthodes permettent de configurer la politique :
-
Appeler l'opération CreateStack
Exécutez la commande
aliyun ros CreateStackavec le paramètre--StackPolicyBodypour fournir la politique directement, ou utilisez la même commande avec le paramètrealiyun ros CreateStacket--StackPolicyURLpour indiquer un fichier contenant la politique. -
Appeler l'opération CreateChangeSet
Exécutez la commande
aliyun ros CreateChangeSetavec le paramètre--StackPolicyBodypour fournir la politique directement, ou utilisez la même commande avec le paramètrealiyun ros CreateChangeSetet--StackPolicyURLpour indiquer un fichier contenant la politique.
-
-
Appliquer une politique de stack à une stack existante (CLI uniquement)
Exécutez la commande
aliyun ros SetStackPolicyavec le paramètre--StackPolicyBodypour fournir la politique directement, ou utilisez la commandealiyun ros SetStackPolicyavec le paramètre--StackPolicyURLpour indiquer un fichier contenant la politique.RemarqueL'ajout d'une politique à une stack existante requiert les permissions associées à l'opération
SetStackPolicy.
Mettre à jour des ressources protégées
Pour modifier des ressources protégées, créez une politique temporaire qui remplace la politique de stack actuelle et autorise ces mises à jour. Cette substitution n'altère pas définitivement la politique de stack d'origine.
La mise à jour de ressources protégées nécessite les permissions liées à l'opération SetStackPolicy. Pour configurer les permissions ROS, reportez-vous à Utiliser RAM pour contrôler l'accès aux ressources.
-
Mettre à jour des ressources protégées (console)
Connectez-vous à la console ROS.
Dans le volet de navigation de gauche, cliquez sur Stacks.
Dans la barre de navigation supérieure, sélectionnez une région dans la liste déroulante, par exemple China (Hangzhou).
Sur la page Stacks, localisez la stack cible et cliquez sur Update dans la colonne Actions.
Dans la section Configure Stack Settings, sélectionnez Input Stack Policy comme indiqué.
-
Configurez une politique de stack temporaire.
Définissez une politique temporaire valable uniquement pour la mise à jour en cours. Celle-ci doit contenir une instruction
Allowpour les ressources protégées que vous souhaitez modifier. Par exemple, pour mettre à jour toutes les ressources protégées, spécifiez une politique de remplacement autorisant toutes les actions.Statement: - Effect: Allow Action: Update:* Principal: '*' Resource: '*' Suivez les instructions à l'écran pour terminer la mise à jour de la stack.
-
Mettre à jour des ressources protégées (CLI)
Deux approches sont possibles pour mettre à jour des ressources protégées :
-
Appeler l'opération UpdateStack
Exécutez la commande
aliyun ros UpdateStackavec le paramètre--StackPolicyDuringUpdateBodypour fournir la politique directement, ou utilisez la commandealiyun ros UpdateStackavec le paramètre--StackPolicyDuringUpdateURLpour indiquer un fichier contenant la politique. -
Appeler l'opération CreateChangeSet
Exécutez la commande
aliyun ros CreateChangeSetavec le paramètre--StackPolicyDuringUpdateBodypour fournir la politique directement, ou utilisez la commandealiyun ros CreateChangeSetavec le paramètre--StackPolicyDuringUpdateURLpour indiquer un fichier contenant la politique.
RemarqueROS applique la politique de remplacement uniquement pour la mise à jour en cours ; la politique de stack permanente reste inchangée.
-
Modifier une politique de stack
Mettez à jour une politique de stack pour étendre la protection à de nouvelles ressources ou lever la protection de ressources existantes. Par exemple, lors de l'ajout d'une base de données sensible à une stack, insérez une instruction Deny correspondante dans la politique. Cette opération exige les permissions associées à SetStackPolicy.
-
Modifier une politique de stack (console)
Connectez-vous à la console ROS.
Dans le volet de navigation de gauche, cliquez sur Stacks.
Dans la barre de navigation supérieure, sélectionnez une région dans la liste déroulante, par exemple China (Hangzhou).
Sur la page Stacks, cliquez sur l'ID de la stack souhaitée dans la colonne Stack Name.
Dans l'onglet Stack Information, sous la section Stack Policy, cliquez sur Edit.
Dans la boîte de dialogue Modify resource stack policy, saisissez la nouvelle politique de stack.
Cliquez sur OK.
-
Modifier une politique de stack (CLI)
Exécutez la commande
aliyun ros SetStackPolicyavec le paramètre--StackPolicyBodypour fournir la politique directement, ou utilisez la commandealiyun ros SetStackPolicyavec le paramètre--StackPolicyURLpour indiquer un fichier contenant la politique.La politique ci-dessous autorise toutes les mises à jour sur l'ensemble des ressources :
Statement: - Effect: Allow Action: Update:* Principal: '*' Resource: '*' -
Modifier une politique de stack lors d'une mise à jour (CLI)
Exécutez la commande
aliyun ros UpdateStackavec le paramètre--StackPolicyBodypour fournir la politique directement, ou utilisez la commandealiyun ros UpdateStackavec le paramètre--StackPolicyURLpour indiquer un fichier contenant la politique.Alternativement, exécutez la commande
aliyun ros CreateChangeSetavec le paramètre--StackPolicyBodypour fournir la politique directement, ou utilisez la commandealiyun ros CreateChangeSetavec le paramètre--StackPolicyURLpour indiquer un fichier contenant la politique.
Exemples de politiques de stack
Les exemples suivants montrent comment bloquer les mises à jour pour toutes les ressources d'une stack, pour des ressources spécifiques ou pour certains types d'opérations.
-
Bloquer les mises à jour pour toutes les ressources de la stack
Pour interdire toute modification, cette politique utilise une instruction
Denycouvrant toutes les actions de mise à jour sur toutes les ressources.Statement: - Effect: Deny Action: Update:* Principal: '*' Resource: '*' -
Bloquer les mises à jour pour une ressource unique (
WebServers)-
Exemple 1 : Utilisation d'une instruction
Denypour empêcher la modification de la ressourceWebServers.Statement: - Effect: Allow Action: Update:* Principal: '*' Resource: '*' - Effect: Deny Action: Update:* Principal: '*' Resource: LogicalResourceId/WebServersCette politique comprend les instructions suivantes :
Allow: Autorise toutes les actions de mise à jour sur toutes les ressources.Deny: Interdit toute action de mise à jour sur la ressource ayant l'ID logiqueWebServers.Principal: Entité concernée par la politique. Seul l'astérisque (*) est pris en charge, indiquant une application universelle.
-
Exemple 2 : Utilisation d'une instruction
Allowpour autoriser les mises à jour sur toutes les ressources, à l'exception deWebServers.Statement: - Effect: Allow Action: Update:* Principal: '*' NotResource: LogicalResourceId/WebServersRemarquePar défaut, lorsqu'une politique de stack est active, toute mise à jour non explicitement autorisée est refusée.
Se reposer uniquement sur le refus par défaut comporte des risques. Si votre politique contient ailleurs une instruction
Allowtrop large, telle qu'une instructionAllowutilisant un caractère générique, vous pourriez accidentellement autoriser la mise à jour d'une ressource. Puisqu'un refus explicite prévaut toujours sur une autorisation, l'usage d'une instructionDenyconstitue le moyen le plus sûr de protéger une ressource.
-
-
Bloquer les mises à jour pour toutes les instances d'un type de ressource
La politique suivante interdit toute mise à jour pour le type de ressource instance ApsaraDB RDS. Elle utilise parallèlement une instruction
Allowpour autoriser les modifications sur les autres ressources de la stack. L'instructionAllowne s'applique pas aux instances ApsaraDB RDS car l'instructionDenyprévaut systématiquement.Statement: - Effect: Deny Action: Update:* Principal: '*' Resource: '*' Condition: StringEquals: ResourceType: - ALIYUN::RDS::DBInstance - Effect: Allow Action: Update:* Principal: '*' Resource: '*' -
Bloquer les mises à jour pour les stacks imbriquées
Cette politique refuse toutes les mises à jour pour le type de ressource stack ROS, correspondant aux stacks imbriquées. Elle inclut une instruction
Allowpermettant les modifications sur les autres ressources. Cependant, l'instructionAllowne s'applique pas aux stacks ROS, l'instructionDenyétant prioritaire sur toute instructionAllow.Statement: - Effect: Deny Action: Update:* Principal: '*' Resource: '*' Condition: StringEquals: ResourceType: - ALIYUN::ROS::Stack - Effect: Allow Action: Update:* Principal: '*' Resource: '*'