

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.

# Utilisation des AWS Service Catalog contraintes
<a name="constraints"></a>

Vous appliquez des contraintes pour contrôler les règles appliquées à un produit dans un portefeuille spécifique lorsque les utilisateurs finaux le lancent. Lorsque les utilisateurs finaux lancent le produit, ils voient les règles que vous avez appliquées à l'aide de contraintes. Vous pouvez appliquer des contraintes à un produit une fois que celui-ci est placé dans un portefeuille. Les contraintes sont actives dès que vous les créez. Elles sont appliquées à toutes les versions actuelles d'un produit qui n'ont pas été lancées.

**Topics**
+ [Contraintes de lancement](constraints-launch.md)
+ [Contraintes de notification](constraints-notification.md)
+ [Contraintes de mise à jour des balises](constraints-resourceupdate.md)
+ [Contraintes d'ensemble de piles](constraints-stackset.md)
+ [​Contraintes de modèle​](catalogs_constraints_template-constraints.md)

# AWS Service Catalog Contraintes de lancement
<a name="constraints-launch"></a>

Une contrainte de lancement spécifie le rôle Gestion des identités et des accès AWS (IAM) AWS Service Catalog assumé lorsqu'un utilisateur final lance, met à jour ou met fin à un produit. Un rôle IAM est un ensemble d'autorisations qu'un utilisateur ou un AWS service peut assumer temporairement pour utiliser les AWS services. Pour un exemple d'introduction, voir :
+ CloudFormation type de produit : [Étape 6 : ajouter une contrainte de lancement pour attribuer un rôle IAM](getstarted-launchconstraint.md)
+ Type de produit Terraform Open Source ou Terraform Cloud : [Étape 5 : créer des rôles de lancement](getstarted-launchrole-Terraform.md)

Les contraintes de lancement s'appliquent aux produits du portefeuille (association produit-portefeuille). Les contraintes de lancement ne s'appliquent pas au niveau du portefeuille ou à un produit de tous les portefeuilles. Pour associer une contrainte de lancement à tous les produits d'un portefeuille, vous devez appliquer la contrainte de lancement à chaque produit, de manière individuelle.

Sans contrainte de lancement, les utilisateurs finaux doivent lancer et gérer les produits à l'aide de leurs propres informations d'identification IAM. Pour ce faire, ils doivent disposer d'autorisations pour CloudFormation les AWS services utilisés par les produits, et AWS Service Catalog. En utilisant un rôle de lancement, vous pouvez plutôt limiter les autorisations des utilisateurs finaux au minimum dont ils ont besoin pour ce produit. Pour plus d'informations sur les autorisations des utilisateurs finaux, consultez [Identity and Access Management dans AWS Service Catalog](controlling_access.md).

Pour créer et attribuer des rôles IAM, vous devez disposer des autorisations administratives IAM suivantes :
+ `iam:CreateRole`
+ `iam:PutRolePolicy`
+ `iam:PassRole`
+ `iam:Get*`
+ `iam:List*`

## Configuration d'un rôle de lancement
<a name="constraints-launch-role"></a>

Le rôle IAM que vous attribuez à un produit en tant que contrainte de lancement doit être autorisé à utiliser les éléments suivants :

**Pour les produits Cloudformation**
+ La politique gérée `arn:aws:iam::aws:policy/AWSCloudFormationFullAccess` CloudFormation 
+ Services dans le AWS CloudFormation modèle du produit
+ Accès en lecture au AWS CloudFormation modèle dans un compartiment Amazon S3 appartenant au service. 

**Pour les produits Terraform**
+ Services du modèle Amazon S3 pour le produit
+ Accès en lecture au modèle Amazon S3 dans un compartiment Amazon S3 appartenant au service. 
+ `resource-groups:Tag`pour le balisage dans une instance Amazon EC2 (pris en charge par le moteur de provisionnement Terraform lors des opérations de provisionnement)
+ `resource-groups:CreateGroup`pour le balisage des groupes de ressources (supposé par AWS Service Catalog créer des groupes de ressources et attribuer des balises) 

La politique de confiance du rôle IAM doit permettre AWS Service Catalog d'assumer le rôle. Dans la procédure ci-dessous, la politique de confiance sera définie automatiquement lorsque vous AWS Service Catalog sélectionnerez le type de rôle. Si vous n'utilisez pas la console, consultez la section *Création de politiques de confiance pour les AWS services qui assument des rôles* dans [Comment utiliser les politiques de confiance avec les rôles IAM](https://aws.amazon.com/blogs/security/how-to-use-trust-policies-with-iam-roles/). 

**Note**  
Les autorisations `servicecatalog:ProvisionProduct`, `servicecatalog:TerminateProvisionedProduct` et `servicecatalog:UpdateProvisionedProduct` ne peuvent pas être attribuées à un rôle de lancement. Vous devez utiliser des rôles IAM, comme indiqué dans les étapes de politique intégrées dans la section [Accorder des autorisations aux utilisateurs AWS Service Catalog finaux](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-iamenduser.html).

**Note**  
Pour consulter les produits et ressources Cloudformation fournis dans la AWS Service Catalog console, les utilisateurs finaux ont besoin d'un accès en CloudFormation lecture. L'affichage des produits et ressources provisionnés dans la console n'utilise **pas** le rôle de lancement.

**Pour créer un rôle de lancement**

1. Ouvrez la console IAM à l’adresse [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

   Les produits Terraform nécessitent des configurations de rôles de lancement supplémentaires. Pour plus d'informations, consultez [Étape 5 : Création de rôles de lancement](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-launchrole-Terraform) dans *Getting Started with a Terraform Open Source product*. 

1. Sélectionnez **Rôles**.

1. Choisissez **Create New Role** (Créer un nouveau rôle).

1. Entrez un nom de rôle, puis choisissez **Next Step**.

1. Sous **Rôles de AWS service** à côté de **AWS Service Catalog**, choisissez **Sélectionner**.

1. Sur la page **Attach Policy**, choisissez **Next Step**.

1. Pour créer le rôle, choisissez **Create Role**. 

**Pour attacher une stratégie au nouveau rôle**

1. Choisissez le rôle que vous avez créé pour afficher la page des détails du rôle.

1. Choisissez l'onglet **Permissions** et développez la section **Inline Policies**. Puis, choisissez **click here**.

1. Choisissez **Custom Policy**, puis **Select**. 

1. Entrez un nom pour la stratégie et collez ce qui suit dans l'éditeur **Policy Document** : 

   ```
     
             "Statement":[
         {
            "Effect":"Allow",
            "Action":[
               "s3:GetObject"
            ],
            "Resource":"*",
            "Condition":{
               "StringEquals":{
                  "s3:ExistingObjectTag/servicecatalog:provisioning":"true"
               }
            }
      ]
   }
   ```
**Note**  
Lorsque vous configurez un rôle de lancement pour une contrainte de lancement, vous devez utiliser cette chaîne :`"s3:ExistingObjectTag/servicecatalog:provisioning":"true"`. 

1. Ajoutez une ligne à la politique pour chaque service supplémentaire utilisé par le produit. Par exemple, pour ajouter une autorisation pour Amazon Relational Database Service (Amazon RDS), entrez une virgule à la fin de la dernière ligne de `Action` la liste, puis ajoutez la ligne suivante : 

   ```
   "rds:*"
   ```

1. Choisissez **Apply Policy (Appliquer la stratégie)**.

## Application d'une contrainte de lancement
<a name="constraints-launch-constraint"></a>

Après avoir configuré le rôle de lancement, attribuez-le au produit en tant que contrainte de lancement. Cette action indique AWS Service Catalog d'assumer le rôle lorsqu'un utilisateur final lance le produit. 

**Pour attribuer le rôle à un produit**

1. Ouvrez la console Service Catalog à l'adresse [https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/).

1. Choisissez le portefeuille qui contient le produit.

1. Cliquez sur l'onglet **Constraints (Contraintes)** puis sur **Create constraint (Créer une contrainte)**.

1. Choisissez le produit dans **Product (Produit)**, puis **Launch (Lancement)** sous **Constraint type (Type de contrainte)**. Sélectionnez **Continuer**.

1. Dans la section **Contrainte de lancement**, vous pouvez sélectionner un rôle IAM dans votre compte et saisir un ARN de rôle IAM, ou saisir le nom du rôle.

   Si vous spécifiez le nom du rôle et si un compte utilise la contrainte de lancement, le compte utilise ce nom pour le rôle IAM. Cette approche permet aux contraintes relatives aux rôles de lancement d'être indépendantes du compte, ce qui vous permet de créer moins de ressources par compte partagé. 
**Note**  
Le nom de rôle indiqué doit exister dans le compte qui a créé la contrainte de lancement et dans le compte de l'utilisateur qui lance un produit avec cette contrainte de lancement. 

1. Après avoir spécifié le rôle IAM, choisissez **Create (Créer)**.

## Ajouter un adjoint confus à la contrainte de lancement
<a name="constraint-confused-deputy"></a>

AWS Service Catalog prend en charge la protection [Confused Deputy](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) pour APIs ceux qui s'exécutent avec une demande Assume Role. Lorsque vous ajoutez une contrainte de lancement, vous pouvez restreindre l'accès au rôle de lancement en utilisant `sourceArn` les conditions `sourceAccount` et la politique de confiance du rôle de lancement. Cela garantit que le rôle de lancement est appelé par une source fiable.

Dans l'exemple suivant, l' AWS Service Catalog utilisateur final appartient au compte 111111111111. Lorsque l' AWS Service Catalog administrateur crée un rôle `LaunchConstraint` pour un produit, l'utilisateur final peut spécifier les conditions suivantes dans la politique de confiance du rôle de lancement afin de restreindre le rôle d'assumer le rôle au compte 111111111111.

```
"Condition":{
   "ArnLike":{
      "aws:SourceArn":"arn:aws:servicecatalog:us-east-1:111111111111:*"
   },
   "StringEquals":{
      "aws:SourceAccount":"111111111111"
   }
  
}
```

Un utilisateur qui approvisionne un produit avec le `LaunchConstraint` doit avoir le même `AccountId` (1111111111). Dans le cas contraire, l'opération échoue avec une `AccessDenied` erreur, empêchant ainsi toute utilisation abusive du rôle de lancement.

Les éléments suivants AWS Service Catalog APIs sont sécurisés pour la protection de Confused Deputy :
+ `LaunchConstraint`
+ `ProvisionProduct`
+ `UpdateProvisionedProduct`
+ `TerminateProvisionedProduct`
+ `ExecuteProvisionedProductServiceAction`
+ `CreateProvisionedProductPlan`
+ `ExecuteProvisionedProductPlan`

La `sourceArn ` protection AWS Service Catalog ne prend en charge que les modèles ARNs, tels que « `arn:<aws-partition>:servicecatalog:<region>:<accountId>:` ». Elle ne prend pas en charge une ressource ARNs spécifique.

## Vérification de la contrainte de lancement
<a name="constraints-launch-test"></a>

Pour vérifier qu'il AWS Service Catalog utilise le rôle pour lancer le produit et qu'il approvisionne correctement le produit, lancez le produit depuis la AWS Service Catalog console. Pour tester une contrainte avant sa publication pour des utilisateurs, créez un portefeuille test qui contient les mêmes produits et testez les contraintes avec ce portefeuille.

**Pour lancer le produit**

1. Dans le menu de la AWS Service Catalog console, choisissez **Service Catalog**, **End user**.

1. Choisissez le produit pour ouvrir la page de **détails du produit**. Dans le tableau des **options de lancement**, vérifiez que le nom de ressource Amazon (ARN) du rôle apparaît.

1. Choisissez **Launch product**.

1. Poursuivez les étapes de lancement en indiquant les informations requises.

1. Vérifiez que le produit démarre correctement.

# AWS Service Catalog Contraintes de notification
<a name="constraints-notification"></a>

**Note**  
AWS Service Catalog ne prend pas en charge les contraintes de notification pour les produits Terraform Open Source ou Terraform Cloud. 

Une contrainte de notification spécifie une rubrique Amazon SNS pour recevoir des notifications concernant les événements liés à la pile. 

Utilisez la procédure suivante pour créer une rubrique SNS et vous y abonner.

**Pour créer une rubrique SNS et un abonnement**

1. [Ouvrez la console Amazon SNS à l'adresse v3/home. https://console.aws.amazon.com/sns/](https://console.aws.amazon.com/sns/v3/home)

1. Choisissez **Créer une rubrique**.

1. Saisissez un nom de rubrique puis choisissez **Create topic**.

1. Choisissez **Créer un abonnement**.

1. Pour **Protocol**, sélectionnez **Email**. Pour **Endpoint**, saisissez une adresse e-mail que vous pouvez utiliser pour recevoir les notifications. Choisissez **Créer un abonnement**.

1. Vous recevrez un e-mail de confirmation avec la ligne d’objet `AWS Notification - Subscription Confirmation`. Ouvrez l’e-mail et suivez les instructions pour terminer votre abonnement.

Utilisez la procédure suivante pour appliquer une contrainte de notification utilisant la rubrique SNS que vous avez créée à l'aide de la procédure précédente.

**Pour appliquer une contrainte de notification à un produit**

1. Ouvrez la console Service Catalog à l'adresse [https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/).

1. Choisissez le portefeuille qui contient le produit.

1. Développez **Contraintes** et choisissez **Ajouter des contraintes**.

1. Choisissez le produit dans **Produit** et définissez le **type de contrainte** sur **Notification**. Sélectionnez **Continuer**.

1. Choisissez **Choisir une rubrique dans votre compte** et sélectionnez la rubrique SNS que vous avez créée dans **Nom de la rubrique**.

1. Sélectionnez **Soumettre**.

# AWS Service Catalog Contraintes de mise à jour des
<a name="constraints-resourceupdate"></a>

**Note**  
AWS Service Catalog ne prend pas en charge les contraintes de mise à jour des balises pour les produits Open Source Terraform.

Avec les contraintes de mise à jour des balises, AWS Service Catalog les administrateurs peuvent autoriser ou interdire aux utilisateurs finaux de mettre à jour les balises sur les ressources associées à un produit provisionné. Si la mise à jour des balises est autorisée, les nouvelles balises associées au produit ou au portefeuille seront appliquées aux ressources provisionnées lors d'une mise à jour de produit provisionnée. 

**Pour activer la mise à jour des balises pour un produit**

1. Ouvrez la console Service Catalog à l'adresse [https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/).

1. Choisissez le portefeuille qui contient le produit que vous souhaitez mettre à jour.

1. Cliquez sur l'onglet **Contraintes**, puis sur **Ajouter des contraintes**.

1. Sous **Constraint type (Type de contrainte)**, choisissez **Tag Update (Mise à jour des balises)**.

1. Choisissez le produit à partir de **Product (Produit)**, puis cliquez sur **Continue (Continuer)**.

1. Sur la **page des mises à jour de balises**, sélectionnez **Enable Tag Updates (Activer les mises à jour des balises)**.

1. Sélectionnez **Soumettre**.

# AWS Service Catalog Contraintes liées aux ensembles de piles
<a name="constraints-stackset"></a>

**Note**  
AWS Service Catalog ne prend pas en charge les contraintes de stack pour les produits Open Source Terraform.
AutoTags ne sont actuellement pas pris en charge avec CloudFormation StackSets. 

Une contrainte d'ensemble de piles vous permet de configurer les options de déploiement du produit à l'aide de CloudFormation StackSets. Vous pouvez spécifier plusieurs comptes et régions pour le lancement de produit. Les utilisateurs finaux peuvent gérer ces comptes et déterminer où les produits sont déployés et l'ordre de déploiement.

**Pour appliquer une contrainte d'ensemble de piles à un produit**

1. Ouvrez la console Service Catalog à l'adresse [https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/).

1. Choisissez le portefeuille contenant le produit que vous souhaitez.

1. Choisissez l'onglet **Contraintes**, puis sélectionnez **Créer des contraintes**.

1. Dans **Produit**, sélectionnez le produit. Dans **Type de contrainte**, choisissez **Stack Set**. 

1. Configurez les comptes, les régions et les autorisations en fonction des contraintes de votre stack set.
   + Dans **les paramètres du compte**, identifiez les comptes sur lesquels vous souhaitez créer des produits.
   + Dans **les paramètres régionaux**, choisissez les régions géographiques dans lesquelles les produits seront déployés et l'ordre dans lequel vous souhaitez que ces produits soient déployés dans ces régions.
   + Dans **Autorisations**, choisissez un rôle d' StackSetadministrateur IAM pour gérer vos comptes cibles. Si vous ne choisissez aucun rôle, StackSets utilise l'ARN par défaut. [En savoir plus sur la configuration d'autorisations d'ensemble de piles.](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html)

1. Choisissez **Créer**.

# AWS Service Catalog Contraintes liées aux modèles
<a name="catalogs_constraints_template-constraints"></a>

**Note**  
AWS Service Catalog ne prend pas en charge les contraintes de modèle pour les produits Terraform Open Source ou Terraform Cloud. 

Pour limiter les options qui sont à disposition des utilisateurs finaux lorsqu'ils lancent un produit, vous appliquez des contraintes de modèle. Appliquez des contraintes de modèle pour vous assurer que les utilisateurs finaux peuvent utiliser des produits sans violer les exigences de conformité de votre organisation. Vous appliquez des contraintes de modèle à un produit d'un AWS Service Catalog portefeuille. Un portefeuille doit contenir un ou plusieurs produits pour que vous puissiez définir des contraintes de modèle.

Une contrainte de modèle consiste en une ou plusieurs règles qui limitent les valeurs autorisées pour les paramètres définis dans le CloudFormation modèle sous-jacent du produit. Les paramètres d'un modèle CloudFormation définissent l'ensemble de valeurs que les utilisateurs peuvent spécifier lorsqu'ils créent une pile. Par exemple, un paramètre peut définir les différents types d'instances parmi lesquels les utilisateurs peuvent choisir lors du lancement d'une pile incluant des EC2 instances.

Si l'ensemble de valeurs de paramètre dans un modèle est trop large pour le public cible de votre portefeuille, vous pouvez définir des contraintes de modèle pour limiter les valeurs que les utilisateurs peuvent choisir lors du lancement d'un produit. Par exemple, si les paramètres du modèle incluent des types d' EC2 instance trop grands pour les utilisateurs qui ne doivent utiliser que de petits types d'instance (tels que `t2.micro` ou`t2.small`), vous pouvez ajouter une contrainte de modèle pour limiter les types d'instances que les utilisateurs finaux peuvent choisir. Pour plus d'informations sur les paramètres du CloudFormation modèle, consultez la section [Paramètres](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html) du *guide de CloudFormation l'utilisateur*.

Les contraintes de modèle sont liées au sein d'un portefeuille. Si vous appliquez des contraintes de modèle à un produit dans un portefeuille et si vous ajoutez ensuite le produit à un autre portefeuille, les contraintes ne s'appliquent pas au produit dans le deuxième portefeuille.

Si vous appliquez une contrainte de modèle à un produit qui a déjà été partagé avec des utilisateurs, la contrainte est active immédiatement pour tous les lancements de produit suivants et pour toutes les versions du produit dans le portefeuille.

Vous définissez les règles de contrainte du modèle à l'aide d'un éditeur de règles ou en écrivant les règles sous forme de texte JSON dans la console de l' AWS Service Catalog administrateur. Pour plus d'informations sur les règles, y compris la syntaxe et des exemples, consultez [Règles de contrainte de modèle](reference-template_constraint_rules.md).

Pour tester une contrainte avant sa publication pour des utilisateurs, créez un portefeuille test qui contient les mêmes produits et testez les contraintes avec ce portefeuille.

**Pour appliquer des contraintes de modèle à un produit**

1. Ouvrez la console Service Catalog à l'adresse [https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/).

1. Sur la page **Portefeuilles**, choisissez le portefeuille contenant le produit auquel vous souhaitez appliquer une contrainte de modèle. 

1. Développez la section **Contraintes** et choisissez **Ajouter des contraintes**.

1. Dans la fenêtre **Sélectionner le produit et le type**, dans **Produit**, sélectionnez le produit pour lequel vous souhaitez définir les contraintes du modèle. Ensuite, pour **Type de contrainte**, choisissez **Modèle**. Sélectionnez **Continuer**.

1. Sur la page **Générateur de contraintes du modèle**, modifiez les règles de contrainte à l'aide de l'éditeur JSON ou de l'interface du générateur de règles.
   + Pour modifier le code JSON de la règle, choisissez l'onglet **Constraint Text Editor**. Plusieurs exemples sont fournis sur cet onglet pour vous aider à démarrer.

     Pour créer les règles à l'aide d'une interface de création de règles, choisissez l'onglet **Générateur de règles**. Sur cet onglet, vous pouvez choisir n'importe quel paramètre spécifié dans le modèle pour le produit, ainsi que les valeurs autorisées pour ce paramètre. En fonction du type du paramètre, vous spécifiez les valeurs autorisées en choisissant des éléments dans une liste de contrôle, en spécifiant un nombre ou en indiquant un ensemble de valeurs dans une liste séparée par des virgules.

     Lorsque vous avez fini de créer une règle, choisissez **Ajouter une règle**. La règle apparaît dans le tableau de l'onglet **Générateur de règles**. Pour consulter et modifier la sortie JSON, choisissez l'onglet **Constraint Text Editor**.

1. Lorsque vous avez terminé de modifier les règles de votre contrainte, choisissez **Soumettre**. Pour voir la contrainte, rendez-vous sur la page des détails du portefeuille et développez **Contraintes**.

# Règles de contrainte de modèle
<a name="reference-template_constraint_rules"></a>

Les règles qui définissent les contraintes du modèle dans un AWS Service Catalog portefeuille décrivent à quel moment les utilisateurs finaux peuvent utiliser le modèle et quelles valeurs ils peuvent spécifier pour les paramètres déclarés dans le CloudFormation modèle utilisé pour créer le produit qu'ils tentent d'utiliser. Les règles sont utiles pour empêcher les utilisateurs finaux de spécifier par inadvertance une valeur incorrecte. Par exemple, vous pouvez ajouter une règle pour vérifier si les utilisateurs finaux ont spécifié un sous-réseau valide dans un VPC donné ou s'ils ont `m1.small` utilisé des types d'instance pour les environnements de test. CloudFormation utilise des règles pour valider les valeurs des paramètres avant de créer les ressources pour le produit.

Chaque règle se compose de deux propriétés : une condition de règle (facultative) et des assertions (obligatoire). La condition de règle détermine si une règle prend effet. Les assertions décrivent les valeurs que les utilisateurs peuvent spécifier pour un paramètre particulier. Si vous ne définissez pas de condition de règle, les assertions de la règle prennent toujours effet. Pour définir une condition de règle et des assertions, vous utilisez des *fonctions intrinsèques spécifiques aux règles* qui sont des fonctions qui peuvent uniquement être utilisées dans la section `Rules` d'un modèle. Vous pouvez imbriquer des fonctions, mais le résultat final d'une condition de règle ou d'une assertion doit avoir la valeur true (vrai) ou false (faux).

Par exemple, supposons que vous avez déclaré un VPC et un paramètre de sous-réseau dans la section `Parameters`. Vous pouvez créer une règle qui vérifie qu'un sous-réseau donné est dans un VPC particulier. Ainsi, lorsqu'un utilisateur spécifie un VPC, il CloudFormation évalue l'assertion pour vérifier si la valeur du paramètre de sous-réseau se trouve dans ce VPC avant de créer ou de mettre à jour la pile. Si la valeur du paramètre n'est pas valide, échouez CloudFormation immédiatement à créer ou à mettre à jour la pile. Si les utilisateurs ne spécifient pas de VPC, CloudFormation ne vérifie pas la valeur du paramètre du sous-réseau.

## Syntaxe
<a name="template-constraint-rules-syntax"></a>

La section `Rules` d'un modèle se compose du nom de clé `Rules`, suivi d'un seul signe deux points. Toutes les déclarations de règle sont placées entre des accolades. Si vous déclarez plusieurs règles, celles-ci sont séparées par des virgules. Pour chaque règle, vous déclarez un nom logique entre guillemets, suivi d'un signe deux points et d'accolades qui entourent la condition de règle et les assertions.

Une règle peut inclure une propriété `RuleCondition` et doit inclure une propriété `Assertions`. Pour chaque règle, vous ne pouvez définir qu'une seule condition de règle ; vous pouvez définir une ou plusieurs assertions au sein de la propriété `Assertions`. Vous définissez une condition et des assertions de règle à l'aide de fonctions intrinsèques spécifiques aux règles, comme illustré dans le pseudo-modèle suivant :

```
"Rules":{
   "Rule01":{
      "RuleCondition":{
         "Rule-specific intrinsic function"
      },
      "Assertions":[
         {
            "Assert":{
               "Rule-specific intrinsic function"
            },
            "AssertDescription":"Information about this assert"
         },
         {
            "Assert":{
               "Rule-specific intrinsic function"
            },
            "AssertDescription":"Information about this assert"
         }
      ]
   },
   "Rule02":{
      "Assertions":[
         {
            "Assert":{
               "Rule-specific intrinsic function"
            },
            "AssertDescription":"Information about this assert"
         }
      ]
   }
}
```

Le pseudo-modèle montre une section `Rules` contenant deux règles nommées `Rule01` et `Rule02`. `Rule01` inclut une condition de règle et deux assertions. Si la fonction dans la condition de règle a la valeur true, les deux fonctions de chaque assertion sont évaluées et appliquées. Si la condition a la valeur false, la règle ne prend pas effet. `Rule02` prend toujours effet, car il n'y a pas de condition de règle, ce qui signifie qu'une assertion est toujours évaluée et appliquée.

*Pour plus d'informations sur les fonctions intrinsèques spécifiques aux règles permettant de définir les conditions et les assertions des règles, consultez la section [Fonctions des AWS règles](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-rules.html) dans le guide de l'AWS CloudFormation utilisateur.*

## Exemple : Vérification conditionnelle d'une valeur de paramètre
<a name="template-constraint-rules-example"></a>

Les deux règles suivantes vérifient la valeur du paramètre `InstanceType`. En fonction de la valeur du paramètre d'environnement (`test` ou `prod`), l'utilisateur doit spécifier `m1.small` ou `m1.large` pour le paramètre `InstanceType`. Les paramètres `InstanceType` et `Environment` doivent être déclarés dans la section `Parameters` du même modèle.

```
"Rules" : {
  "testInstanceType" : {
    "RuleCondition" : {"Fn::Equals":[{"Ref":"Environment"}, "test"]},
    "Assertions" : [
      {
        "Assert" :  { "Fn::Contains" : [ ["m1.small"], {"Ref" : "InstanceType"} ] },
        "AssertDescription" : "For the test environment, the instance type must be m1.small"
      }
    ]
  },
  "prodInstanceType" : {
    "RuleCondition" : {"Fn::Equals":[{"Ref":"Environment"}, "prod"]},
    "Assertions" : [
      {
        "Assert" :  { "Fn::Contains" : [ ["m1.large"], {"Ref" : "InstanceType"} ] },
        "AssertDescription" : "For the prod environment, the instance type must be m1.large"
      }
    ]
  }
}
```