

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

# Utilizzo dei AWS Service Catalog vincoli
<a name="constraints"></a>

Applica vincoli per controllare le regole applicate a un prodotto in un portafoglio specifico quando gli utenti finali lo avviano. Quando gli utenti finali avviano il prodotto, vedranno le regole applicate utilizzando i vincoli. Puoi applicare vincoli a un prodotto una volta inserito in un portafoglio. I vincoli sono attivi non appena li crei e vengono applicati a tutte le versioni correnti di un prodotto che non sono state lanciate.

**Topics**
+ [Vincoli di avvio di](constraints-launch.md)
+ [Vincoli di notifica di](constraints-notification.md)
+ [Vincoli di aggiornamento dei tag](constraints-resourceupdate.md)
+ [Vincoli del set di stack](constraints-stackset.md)
+ [Vincoli di modello di](catalogs_constraints_template-constraints.md)

# AWS Service Catalog Vincoli di avvio
<a name="constraints-launch"></a>

Un vincolo di lancio specifica il ruolo AWS Identity and Access Management (IAM) da AWS Service Catalog assumere quando un utente finale avvia, aggiorna o chiude un prodotto. Un ruolo IAM è una raccolta di autorizzazioni che un utente o un servizio può assumere temporaneamente per utilizzare i AWS servizi. AWS Per un esempio introduttivo, vedi:
+ CloudFormation tipo di prodotto: [Passaggio 6: aggiungere un vincolo di avvio per assegnare un ruolo IAM](getstarted-launchconstraint.md)
+ Tipo di prodotto Terraform Open Source o Terraform Cloud: [Fase 5: Creare ruoli di lancio](getstarted-launchrole-Terraform.md)

I vincoli di lancio si applicano ai prodotti del portafoglio (associazione prodotto-portafoglio). I vincoli di lancio non si applicano a livello di portafoglio o a un prodotto in tutti i portafogli. Per associare un vincolo di avvio a tutti i prodotti in un portafoglio, devi applicare il vincolo di avvio a ogni prodotto individualmente.

Senza vincoli di lancio, gli utenti finali devono lanciare e gestire i prodotti utilizzando le proprie credenziali IAM. A tal fine, devono disporre delle autorizzazioni per AWS i servizi CloudFormation utilizzati dai prodotti e. AWS Service Catalog Utilizzando un ruolo di avvio, puoi invece limitare le autorizzazioni degli utenti finali al minimo richiesto per quel prodotto. Per ulteriori informazioni sulle autorizzazioni per utenti finali, consulta [Identity and Access Management in AWS Service Catalog](controlling_access.md).

Per creare e assegnare ruoli IAM, devi disporre delle seguenti autorizzazioni amministrative IAM:
+ `iam:CreateRole`
+ `iam:PutRolePolicy`
+ `iam:PassRole`
+ `iam:Get*`
+ `iam:List*`

## Configurazione di un ruolo di avvio
<a name="constraints-launch-role"></a>

Il ruolo IAM che assegni a un prodotto come vincolo di lancio deve disporre delle autorizzazioni per utilizzare quanto segue:

**Per i prodotti Cloudformation**
+ La policy gestita di `arn:aws:iam::aws:policy/AWSCloudFormationFullAccess` CloudFormation 
+ Servizi inclusi nel AWS CloudFormation modello del prodotto
+ Accesso in lettura al AWS CloudFormation modello in un bucket Amazon S3 di proprietà del servizio. 

**Per i prodotti Terraform**
+ Servizi nel modello Amazon S3 per il prodotto
+ Accesso in lettura al modello Amazon S3 in un bucket Amazon S3 di proprietà del servizio. 
+ `resource-groups:Tag`per il tagging in un'istanza Amazon EC2 (assunto dal motore di provisioning Terraform durante l'esecuzione delle operazioni di provisioning)
+ `resource-groups:CreateGroup`per l'etichettatura dei gruppi di risorse (presupposto per creare gruppi di risorse e AWS Service Catalog assegnare tag) 

La politica di fiducia del ruolo IAM deve consentire di AWS Service Catalog assumere il ruolo. Nella procedura riportata di seguito, la politica di fiducia verrà impostata automaticamente quando si seleziona AWS Service Catalog come tipo di ruolo. Se non utilizzi la console, consulta la sezione *Creazione di politiche di fiducia per AWS i servizi che assumono ruoli* in [Come usare le politiche di fiducia con i ruoli IAM](https://aws.amazon.com/blogs/security/how-to-use-trust-policies-with-iam-roles/). 

**Nota**  
Le autorizzazioni `servicecatalog:ProvisionProduct`, `servicecatalog:TerminateProvisionedProduct` e `servicecatalog:UpdateProvisionedProduct` non possono essere assegnate in un ruolo di avvio. È necessario utilizzare i ruoli IAM, come illustrato nei passaggi delle policy in linea nella sezione [Concedere autorizzazioni agli utenti AWS Service Catalog finali](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-iamenduser.html).

**Nota**  
Per visualizzare i prodotti e le risorse Cloudformation forniti nella AWS Service Catalog console, gli utenti finali devono avere accesso in lettura. CloudFormation La visualizzazione dei prodotti e delle risorse forniti nella console **non** utilizza il ruolo di avvio.

**Creazione di un ruolo di avvio**

1. Aprire la console IAM all'indirizzo [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

   I prodotti Terraform richiedono configurazioni aggiuntive dei ruoli di lancio. Per ulteriori informazioni, consulta la [Fase 5: Creare ruoli di lancio](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-launchrole-Terraform) in *Getting Started with a Terraform Open* Source. 

1. Scegli **Ruoli**.

1. Scegli **Crea nuovo ruolo**.

1. Immettere un nome di ruolo e scegliere **Next Step (Fase successiva)**.

1. In **Ruoli AWS di servizio** accanto a **AWS Service Catalog**, scegli **Seleziona**.

1. Nella pagina **Attach Policy (Associa policy)**, scegliere **Next Step (Fase successiva)**.

1. Per creare il ruolo, scegliere **Create Role (Crea ruolo)**. 

**Associazione di una policy a un nuovo ruolo**

1. Scegli il ruolo che hai creato per visualizzare la pagina dei dettagli del ruolo.

1. Scegliere la scheda **Permissions (Autorizzazioni)** ed espandere la sezione **Inline Policies (Policy inline)**. Quindi, scegliere **click here (fai clic qui)**.

1. Scegliere **Custom Policy (Policy personalizzata)** quindi **Select (Seleziona)**. 

1. Immettere un nome per la policy, quindi incollare quanto segue nell'editor **Policy Document (Documento policy)**: 

   ```
     
             "Statement":[
         {
            "Effect":"Allow",
            "Action":[
               "s3:GetObject"
            ],
            "Resource":"*",
            "Condition":{
               "StringEquals":{
                  "s3:ExistingObjectTag/servicecatalog:provisioning":"true"
               }
            }
      ]
   }
   ```
**Nota**  
Quando configuri un ruolo di avvio per un vincolo di avvio, devi usare questa stringa:. `"s3:ExistingObjectTag/servicecatalog:provisioning":"true"` 

1. Aggiungi una riga alla politica per ogni servizio aggiuntivo utilizzato dal prodotto. Ad esempio, per aggiungere l'autorizzazione per Amazon Relational Database Service (Amazon RDS), inserisci una virgola alla fine dell'ultima riga `Action` dell'elenco, quindi aggiungi la seguente riga: 

   ```
   "rds:*"
   ```

1. Scegli **Apply Policy** (Applica policy).

## Applicazione di un vincolo di avvio
<a name="constraints-launch-constraint"></a>

Dopo aver configurato il ruolo di lancio, assegna il ruolo al prodotto come vincolo di lancio. Questa azione indica AWS Service Catalog di assumere il ruolo quando un utente finale avvia il prodotto. 

**Assegnazione del ruolo a un prodotto**

1. Aprire la console Service Catalog all'indirizzo [https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/).

1. Scegliere il portafoglio che contiene il prodotto.

1. Scegliere la scheda **Vincoli**, quindi **Crea vincolo**.

1. Scegliere il prodotto da **Product (Prodotto)**, quindi scegliere **Launch (Avvia)** sotto **Constraint type (Tipo di vincolo)**. Scegli **Continua**.

1. Nella sezione **Launch constraint**, puoi selezionare un ruolo IAM dal tuo account e inserire un ARN del ruolo IAM oppure inserire il nome del ruolo.

   Se specifichi il nome del ruolo e se un account utilizza il vincolo di avvio, l'account utilizza quel nome per il ruolo IAM. Questo approccio consente ai vincoli del ruolo di avvio di essere indipendenti dall'account, in modo da poter creare meno risorse per account condiviso. 
**Nota**  
Il nome del ruolo specificato deve esistere nell'account che ha creato il vincolo di avvio e nell'account dell'utente che lancia un prodotto con questo vincolo di avvio. 

1. Dopo aver specificato il ruolo IAM, scegliere **Crea**.

## Aggiungere Confused Deputy a Launch Constraint
<a name="constraint-confused-deputy"></a>

AWS Service Catalog supporta la protezione [Confused Deputy](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) per APIs quelli che vengono eseguiti con una richiesta Assume Role. Quando aggiungi un vincolo di avvio, puoi limitare l'accesso al ruolo di lancio utilizzando `sourceArn` le condizioni contenute nella `sourceAccount` policy di fiducia del ruolo di avvio. Garantisce che il ruolo di lancio venga richiamato da una fonte attendibile.

Nell'esempio seguente, l' AWS Service Catalog utente finale appartiene all'account 1111. Quando l' AWS Service Catalog amministratore crea un ruolo `LaunchConstraint` per un prodotto, l'utente finale può specificare le seguenti condizioni nella politica di fiducia del ruolo di avvio per limitare il ruolo di assunzione all'account 1111.

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

Un utente che fornisce a un prodotto il `LaunchConstraint` deve avere lo stesso `AccountId` (1111). In caso contrario, l'operazione fallisce con un `AccessDenied` errore, che impedisce l'uso improprio del ruolo di avvio.

Quanto segue AWS Service Catalog APIs è protetto dalla protezione di Confused Deputy:
+ `LaunchConstraint`
+ `ProvisionProduct`
+ `UpdateProvisionedProduct`
+ `TerminateProvisionedProduct`
+ `ExecuteProvisionedProductServiceAction`
+ `CreateProvisionedProductPlan`
+ `ExecuteProvisionedProductPlan`

La `sourceArn ` protezione supporta AWS Service Catalog solo modelli ARNs, come "`arn:<aws-partition>:servicecatalog:<region>:<accountId>:`". Non supporta risorse specifiche. ARNs

## Verifica del vincolo di avvio
<a name="constraints-launch-test"></a>

Per verificare AWS Service Catalog utilizzi il ruolo per avviare il prodotto ed effettuare correttamente il provisioning del prodotto, avvia il prodotto dalla console. AWS Service Catalog Per testare un vincolo prima della distribuzione agli utenti, crea un portafoglio di prova che contiene gli stessi prodotti e verifica i vincoli con quel portafoglio.

**Avvio del prodotto**

1. Nel menu della AWS Service Catalog console, scegli **Service Catalog**, **Utente finale**.

1. Scegli il prodotto per aprire la pagina dei **dettagli del prodotto**. Nella tabella **delle opzioni di avvio**, verifica che venga visualizzato l'Amazon Resource Name (ARN) del ruolo.

1. Scegli **Launch product**.

1. Esegui le fasi relative all'avvio, indicando le informazioni richieste.

1. Verifica che il prodotto venga avviato senza problemi.

# AWS Service Catalog Vincoli di notifica
<a name="constraints-notification"></a>

**Nota**  
AWS Service Catalog non supporta i vincoli di notifica per i prodotti Terraform Open Source o Terraform Cloud. 

Un vincolo di notifica specifica un argomento di Amazon SNS per ricevere notifiche sugli eventi dello stack. 

Utilizza la procedura seguente per creare un argomento di SNS e abbonarti allo stesso.

**Creazione di un argomento di SNS e di un abbonamento**

1. [Apri la console Amazon SNS nella versione v3/home. https://console.aws.amazon.com/sns/](https://console.aws.amazon.com/sns/v3/home)

1. Scegli **Create topic** (Crea argomento).

1. Digitare un nome di argomento, quindi scegliere **Create topic (Crea argomento)**.

1. Scegli **Create Subscription** (Crea sottoscrizione).

1. Per **Protocol (Protocollo)**, selezionare **Email (E-mail)**. Per **Endpoint**, digitare l'indirizzo e-mail a cui devono essere inviate le notifiche. Scegli **Create Subscription (Crea sottoscrizione)**.

1. Riceverai un'e-mail di conferma con l'oggetto `AWS Notification - Subscription Confirmation`. Apri l’e-mail e segui le istruzioni per completare l’iscrizione.

Utilizza la procedura seguente per applicare un vincolo di notifica utilizzando l'argomento di SNS creato nella procedura precedente.

**Applicazione di un vincolo di notifica a un prodotto**

1. Aprire la console Service Catalog all'indirizzo [https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/).

1. Scegliere il portafoglio che contiene il prodotto.

1. Espandere **Constraints (Vincoli)** e scegliere **Add constraints (Aggiungi vincoli)**.

1. **Scegli il prodotto da **Prodotto** e imposta il **tipo di vincolo su Notifica**.** Scegli **Continua**.

1. Scegliere **Choose a topic from your account (Scegli un argomento dal tuo account)** e selezionare l'argomento di SNS creato in **Topic Name (Nome argomento)**.

1. Seleziona **Invia**.

# AWS Service Catalog Vincoli di aggiornamento dei tag
<a name="constraints-resourceupdate"></a>

**Nota**  
AWS Service Catalog non supporta i vincoli di aggiornamento dei tag per i prodotti Terraform Open Source.

Con i vincoli di aggiornamento dei tag, AWS Service Catalog gli amministratori possono consentire o impedire agli utenti finali di aggiornare i tag sulle risorse associate a un prodotto fornito. Se l'aggiornamento dei tag è consentito, i nuovi tag associati al prodotto o al portafoglio verranno applicati alle risorse assegnate durante un aggiornamento del prodotto fornito. 

**Per abilitare gli aggiornamenti di tag per un prodotto**

1. Aprire la console Service Catalog all'indirizzo [https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/).

1. Scegli il portfolio che contiene il prodotto che desideri aggiornare.

1. Scegli la scheda **Vincoli** e scegli **Aggiungi** vincoli.

1. In **Constraint type (Tipo di vincolo)**, scegli **Tag Update (Aggiornamento tag)**.

1. Scegli il prodotto da **Product (Prodotto)**, quindi scegli **Continue (Continua)**.

1. Nella pagina **Tag Updates (Aggiornamenti tag)**, seleziona **Enable Tag Updates (Abilita aggiornamenti tag)**.

1. Seleziona **Invia**.

# AWS Service Catalog Vincoli Stack Set
<a name="constraints-stackset"></a>

**Nota**  
AWS Service Catalog non supporta i vincoli dello stack set per i prodotti Terraform Open Source.
AutoTags non sono attualmente supportati con. CloudFormation StackSets 

Un vincolo di stack set consente di configurare le opzioni di distribuzione del prodotto utilizzando. CloudFormation StackSets Puoi specificare più account e regioni per il lancio del prodotto. Gli utenti finali possono gestire tali account e determinare dove distribuire i prodotti e l'ordine di distribuzione.

**Per applicare un vincolo di set di stack a un prodotto**

1. Aprire la console Service Catalog all'indirizzo [https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/).

1. Scegli il portafoglio con il prodotto che desideri.

1. Scegli la scheda **Vincoli**, quindi scegli **Crea** vincoli.

1. In **Prodotto, scegli il prodotto**. In **Tipo di vincolo**, scegli **Stack** Set. 

1. Configura gli account, le regioni e le autorizzazioni per i vincoli dello stack set.
   + Nelle **impostazioni dell'account**, identifica gli account in cui desideri creare prodotti.
   + Nelle **impostazioni della regione**, scegli le aree geografiche in cui distribuire i prodotti e l'ordine in cui desideri che tali prodotti vengano distribuiti in tali regioni.
   + In **Autorizzazioni**, scegli un ruolo di StackSet amministratore IAM per gestire gli account di destinazione. Se non scegli un ruolo, StackSets utilizza l'ARN predefinito. [Ulteriori informazioni sull'impostazione delle autorizzazioni dei set di stack.](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html)

1. Scegli **Create** (Crea).

# AWS Service Catalog Vincoli del modello
<a name="catalogs_constraints_template-constraints"></a>

**Nota**  
AWS Service Catalog non supporta i vincoli dei modelli per i prodotti Terraform Open Source o Terraform Cloud. 

Per limitare le opzioni disponibili per gli utenti finali quando avviano un prodotto, devi applicare vincoli di modello. L'applicazione di tali vincoli consente agli utenti finali di utilizzare i prodotti senza violare i requisiti di conformità della tua organizzazione. Si applicano i vincoli del modello a un prodotto in un portafoglio. AWS Service Catalog Un portafoglio deve contenere uno o più prodotti affinché sia possibile definire vincoli di modello.

Un vincolo del modello è costituito da una o più regole che limitano i valori consentiti per i parametri definiti nel modello sottostante del prodotto. CloudFormation I parametri in un modello di CloudFormation definiscono il set di valori che gli utenti possono specificare durante la creazione di uno stack. Ad esempio, un parametro potrebbe definire i vari tipi di istanze tra cui gli utenti possono scegliere quando avviano uno stack che include istanze. EC2 

Se il set di valori di parametro in un modello è troppo ampio per i destinatari del tuo portafoglio, puoi definire vincoli di modello per limitare i valori che gli utenti possono scegliere all'avvio di un prodotto. Ad esempio, se i parametri del modello includono tipi di EC2 istanza troppo grandi per gli utenti che dovrebbero utilizzare solo tipi di istanze di piccole dimensioni (come `t2.micro` or`t2.small`), puoi aggiungere un vincolo di modello per limitare i tipi di istanza che gli utenti finali possono scegliere. Per ulteriori informazioni sui parametri CloudFormation del modello, consulta [Parametri nella Guida](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html) per l'*CloudFormation utente*.

I vincoli di modello sono associati in un portafoglio. Se applichi vincoli di modello a un prodotto in un portafoglio e quindi includi il prodotto in un altro portafoglio, i vincoli non verranno applicati al prodotto nel secondo portafoglio.

Se applichi un vincolo di modello a un prodotto che è già stato condiviso con gli utenti, il vincolo è immediatamente attivo per tutti gli avvii successivi del prodotto e per tutte le versioni del prodotto nel portafoglio.

È possibile definire le regole di vincolo del modello utilizzando un editor di regole o scrivendo le regole come testo JSON nella AWS Service Catalog console di amministrazione. Per ulteriori informazioni sulle regole, tra cui sintassi ed esempi, consulta [Regole di vincolo di modello](reference-template_constraint_rules.md).

Per testare un vincolo prima della distribuzione agli utenti, crea un portafoglio di prova che contiene gli stessi prodotti e verifica i vincoli con quel portafoglio.

**Applicazione di vincoli di modello a un prodotto**

1. Aprire la console Service Catalog all'indirizzo [https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/).

1. Nella pagina **Portafogli**, scegli il portfolio che contiene il prodotto a cui desideri applicare un vincolo relativo al modello. 

1. **Espandi la sezione **Vincoli e scegli Aggiungi vincoli**.**

1. Nella finestra **Seleziona prodotto e tipo**, per **Prodotto scegli il prodotto** per il quale desideri definire i vincoli del modello. **Quindi, per Tipo di **vincolo, scegli Modello**.** Scegli **Continua**.

1. Nella pagina **Template Constraint Builder**, modifica le regole di vincolo utilizzando l'editor JSON o l'interfaccia del generatore di regole.
   + **Per modificare il codice JSON per la regola, scegli la scheda Constraint Text Editor.** In questa scheda sono disponibili vari esempi per aiutarti a iniziare.

     **Per creare le regole utilizzando un'interfaccia per la creazione di regole, scegli la scheda Rule Builder.** In questa scheda, puoi scegliere qualsiasi parametro specificato nel modello per il prodotto, nonché specificare i valori autorizzati per quel parametro. A seconda del tipo di parametro, devi specificare i valori consentiti selezionando elementi in un elenco di controllo, indicando un numero o specificando un set di valori in un elenco separato da virgole.

     Quando hai finito di creare una regola, scegli **Aggiungi** regola. La regola viene visualizzata nella tabella della scheda **Rule Builder**. Per rivedere e modificare l'output JSON, scegli la scheda **Constraint** Text Editor.

1. **Quando hai finito di modificare le regole per il tuo vincolo, scegli Invia.** **Per visualizzare il vincolo, vai alla pagina dei dettagli del portfolio ed espandi Vincoli.**

# Regole di vincolo di modello
<a name="reference-template_constraint_rules"></a>

Le regole che definiscono i vincoli del modello in un AWS Service Catalog portfolio descrivono quando gli utenti finali possono utilizzare il modello e quali valori possono specificare per i parametri dichiarati nel CloudFormation modello utilizzato per creare il prodotto che stanno tentando di utilizzare. Le regole sono utili per impedire agli utenti finali di specificare inavvertitamente un valore non corretto. Ad esempio, puoi aggiungere una regola per verificare se gli utenti finali hanno specificato una sottorete valida in un determinato VPC o hanno `m1.small` utilizzato tipi di istanza per ambienti di test. CloudFormation utilizza regole per convalidare i valori dei parametri prima di creare le risorse per il prodotto.

Ogni regola è costituita da due proprietà: una condizione di regola (facoltativa) e asserzioni (obbligatorie). La condizione di regola determina quando una regola viene attivata. Le asserzioni descrivono quali valori gli utenti possono specificare per un particolare parametro. Se non definisci una condizione di regola, le asserzioni della regola sono sempre attivate. Per definire una condizione e asserzioni di regola, devi utilizzare *funzioni intrinseche specifiche delle regole*, ovvero funzioni che possono essere utilizzate solo nella sezione `Rules` di un modello. È possibile nidificare le funzioni, ma il risultato finale di una condizione o di un'asserzione di regola deve essere true o false.

Supponiamo, ad esempio, che hai dichiarato un VPC e un parametro di sottorete nella sezione `Parameters`. Puoi creare una regola che verifica che una data sottorete si trova in un determinato VPC. Pertanto, quando un utente specifica un VPC CloudFormation , valuta l'asserzione per verificare se il valore del parametro di sottorete si trova in quel VPC prima di creare o aggiornare lo stack. Se il valore del parametro non è valido, non riesci CloudFormation immediatamente a creare o aggiornare lo stack. Se gli utenti non specificano un VPC, CloudFormation non controlla il valore del parametro della sottorete.

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

La sezione `Rules` di un modello comporta il nome di chiave `Rules`, seguito da un segno di due punti. Tutte le dichiarazioni di regola sono racchiuse tra parentesi graffe. Se dichiari più regole, queste sono delimitate da virgole. Per ogni regola, dichiari un nome logico tra virgolette seguito da un segno di due punti e parentesi graffe che racchiudono la condizione e le asserzioni di regola.

Una regola può includere una proprietà `RuleCondition` e deve includere una proprietà `Assertions`. Per ogni regola, puoi definire una sola condizione di regola nonché una o più asserzioni nella proprietà `Assertions`. Per definire una condizione e asserzioni di regola, si utilizzano funzioni intrinseche specifiche delle regole, come mostrato nello pseudo-modello seguente:

```
"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"
         }
      ]
   }
}
```

Il pseudomodello mostra una sezione `Rules` contenente due regole denominate `Rule01` e `Rule02`. `Rule01` include una condizione di regola e due asserzioni. Se la funzione nella condizione di regola restituisce true, entrambe le funzioni in ogni asserzione vengono valutate e applicate. Se la condizione di regola è falsa, la regola non viene applicata. `Rule02` diventa sempre effettiva perché non ha una condizione di regola, il che significa che la singola istruzione Assert viene sempre valutata e applicata.

[https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-rules.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-rules.html)

## Esempio: verifica condizionale di un valore di parametro
<a name="template-constraint-rules-example"></a>

Le due regole seguenti verificano il valore del parametro `InstanceType`. A seconda del valore del parametro Environment (`test` o `prod`), l'utente deve specificare `m1.small` o `m1.large` per il parametro `InstanceType`. I parametri `InstanceType` e `Environment` devono essere dichiarati nella sezione `Parameters` dello stesso modello.

```
"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"
      }
    ]
  }
}
```