

# Impedir atualizações nos recursos de pilha
<a name="protect-stack-resources"></a>

Quando você cria uma pilha, todas as ações de atualização são permitidas em todos os recursos. Por padrão, qualquer usuário com permissões de atualização da pilha pode atualizar todos os recursos na pilha. Durante uma atualização, alguns recursos podem exigir uma interrupção ou ser completamente substituídos, o que resulta em novos IDs físicos ou armazenamento completamente novo. Você pode impedir que a pilha de recursos seja involuntariamente atualizada ou excluída durante uma atualização da pilha usando uma política de pilha. Uma política de pilha é um documento JSON que define quais ações de atualização podem ser executadas nos recursos designados.

Depois de definir uma política de pilha, todos os recursos na pilha são protegidos por padrão. Para permitir atualizações em recursos específicos, você especifica uma instrução explícita `Allow` para esses recursos em sua política de pilha. Você pode definir apenas uma política de pilha por pilha. Porém, é possível proteger vários recursos em uma única política. Uma política de pilha se aplica a todos os usuários do CloudFormation que tentarem atualizar a pilha. Você não pode associar diferentes políticas de pilha com diferentes usuários.

Uma política de pilha é aplicada somente durante as atualizações da pilha. Ela não fornece controles de acesso como uma política do AWS Identity and Access Management (IAM). Use uma política de pilha somente como um mecanismo à prova de falhas que impede atualizações acidentais em recursos de pilha específicos. Para controlar o acesso a recursos ou ações da AWS, use o IAM.

**Topics**
+ [Exemplo de política de pilha](#stack-policy-intro-example)
+ [Definir uma política de pilha](#stack-policy-reference)
+ [Configurar uma política de pilha](#protect-stack-resources-protecting)
+ [Atualizar recursos protegidos](#protect-stack-resources-updating)
+ [Modificar uma política de pilha](#protect-stack-resources-modifying)
+ [Mais exemplos de políticas de pilha](#stack-policy-samples)

## Exemplo de política de pilha
<a name="stack-policy-intro-example"></a>

A política de pilha de exemplo a seguir impede atualizações no recurso `ProductionDatabase`:

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

Quando você define uma política de pilha, todos os recursos na pilha são protegidos por padrão. Para permitir atualizações em todos os recursos, adicionamos uma instrução `Allow` que permite que todas as ações em todos os recursos. Embora a instrução `Allow` especifique todos os recursos, a instrução explícita `Deny` a substitui para o recurso com o ID lógico `ProductionDatabase`. Essa instrução `Deny` impede todas as ações de atualização, como substituição ou exclusão, no recurso `ProductionDatabase`.

O elemento `Principal` é necessário, mas suporta apenas o caractere curinga (`*`), o que significa que a instrução aplica-se a todos os [principais](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html#principal).

**nota**  
Durante uma atualização de pilha, o CloudFormation atualiza recursos que dependem de outros recursos atualizados. Por exemplo, o CloudFormation atualiza um recurso que faz referência a um recurso atualizado. O CloudFormation não faz alterações físicas, como o ID de recursos, para recursos atualizados automaticamente, mas se uma política de pilha é associada a esses recursos, você deve ter permissão para atualizá-las.

## Definir uma política de pilha
<a name="stack-policy-reference"></a>

Quando você cria uma pilha, nenhuma política de pilha é definida, de modo que todas as ações de atualização são permitidas em todos os recursos. Para proteger os recursos da pilha de ações de atualização, defina uma pilha de política e, em seguida, configure-a em sua pilha. Uma política de pilha é um documento JSON que define as ações de atualização de pilha do CloudFormation que os usuários do CloudFormation podem executar e os recursos que as ações se aplicam. Você pode definir a política de pilha ao criar uma pilha, especificando um arquivo de texto que contém a sua política de pilha ou digitando-a. Quando você define uma política de pilha em sua pilha, qualquer atualização não explicitamente permitida é negada por padrão.

Você define uma política de pilha com cinco elementos: `Effect`, `Action`, `Principal`, `Resource` e `Condition`. O pseudocódigo a seguir mostra a sintaxe da política de pilha.

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

`Effect`  
Determina se as ações que você especifica são negadas ou permitidas no(s) recurso(s) especificado(s). Você pode especificar apenas `Deny` ou `Allow`, como:  

```
"Effect" : "Deny"
```
Se uma política de pilha inclui instruções de sobreposição (tanto para permitir e negar atualizações em um recurso), uma instrução `Deny` sempre substituirá uma instrução `Allow`. Para garantir que um recurso está protegido, use uma instrução `Deny` para esse recurso.

Ação  
Especifica as ações de atualização que são negadas ou permitidas:    
Update:Modify  
Especifica ações de atualização durante as quais os recursos poderão não ter interrupções ou algumas interrupções enquanto as alterações estão sendo aplicadas. Todos os recursos mantêm seus IDs físicos.  
Update:Replace  
Especifica ações de atualização durante as quais os recursos são recriados. O CloudFormation cria um novo recurso com as atualizações especificadas e, em seguida, exclui o recurso antigo. Como o recurso é recriado, o ID físico do novo recurso pode ser diferente.  
Update:Delete  
Especifica ações de atualização durante as quais os recursos são removidos. As atualizações que removem completamente os recursos de um modelo de pilha exigem esta ação.  
Atualização:\$1  
Especifica todas as ações de atualização. O asterisco é um caractere curinga que representa todas as ações de atualização.
O exemplo a seguir mostra como especificar apenas as ações de substituição e exclusão:  

```
"Action" : ["Update:Replace", "Update:Delete"]
```
Para permitir todas as ações de atualização exceto para uma, use `NotAction`. Por exemplo, para permitir todas as ações de atualização exceto `Update:Delete`, use `NotAction`, como mostrado no exemplo a seguir:  

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

Entidade principal  
O elemento `Principal` especifica a entidade que a política se aplica. Este elemento é necessário, mas suporta apenas o caractere curinga (`*`), o que significa que a política aplica-se a todos [principais](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html#principal).

Recurso  
Especifica os IDs lógicos dos recursos aos quais a política se aplica. Para especificar os tipos de recursos, use o elemento `Condition`.  
Para especificar um único recurso, use seu ID lógico. Por exemplo:  

```
"Resource" : ["LogicalResourceId/myEC2instance"]
```
Você pode usar um caractere curinga com IDs lógicos. Por exemplo, se você usar um prefixo de ID lógico comum para todos os recursos relacionados, é possível especificar todos eles com um caractere curinga:  

```
"Resource" : ["LogicalResourceId/CriticalResource*"]
```
Você também pode usar um elemento `Not` com recursos. Por exemplo, para permitir as atualizações em todos os recursos, exceto um, use um elemento `NotResource` para proteger esse recurso:  

```
{
  "Statement" : [
    {
      "Effect" : "Allow",
      "Action" : "Update:*",
      "Principal": "*",
      "NotResource" : "LogicalResourceId/ProductionDatabase"
    }
  ]
}
```
Quando você define uma política de pilha, qualquer atualização não explicitamente permitida é negada por padrão. Ao permitir atualizações para todos os recursos, exceto para o recurso `ProductionDatabase`, você nega atualizações para o recurso `ProductionDatabase`.

Condições  
Especifica o tipo de recurso que a política se aplica. Para especificar os IDs lógicos de recursos específicos, use o elemento `Resource`.  
Você pode especificar um tipo de recurso, como todas as instâncias de banco de dados do RDS e EC2, conforme mostrado no exemplo a seguir:  

```
{
  "Statement" : [
  {
    "Effect" : "Deny",
    "Principal" : "*",
    "Action" : "Update:*",
    "Resource" : "*",
    "Condition" : {
      "StringEquals" : {
        "ResourceType" : ["AWS::EC2::Instance", "AWS::RDS::DBInstance"]
      }
    }
  },
  {
    "Effect" : "Allow",
    "Principal" : "*",
    "Action" : "Update:*",
    "Resource" : "*"
  }
  ]
}
```
A instrução `Allow` concede permissões de atualização para todos os recursos e a instrução `Deny` nega atualizações para instâncias de banco de dados do RDS e EC2. A declaração `Deny` sempre substitui as ações de permissão.  
Você pode usar um caractere curinga com tipos de recursos. Por exemplo, você pode negar permissões de atualização para todos os recursos do Amazon EC2 — como instâncias, security groups e sub-redes — usando um caractere curinga, como mostrado no exemplo a seguir:  

```
"Condition" : {
  "StringLike" : {
    "ResourceType" : ["AWS::EC2::*"]
  }
}
```
Você deve usar a condição `StringLike` quando ao usar caracteres curinga.

## Configurar uma política de pilha
<a name="protect-stack-resources-protecting"></a>

Você pode usar o console ou a AWS CLI para aplicar uma política de pilha ao criar uma pilha. Você também pode usar a AWS CLI para aplicar uma política de pilha a uma pilha existente. Depois de aplicar uma política de pilha, você não pode removê-la da pilha, mas é possível usar a AWS CLI para modificá-la.

Uma política de pilha se aplica a todos os usuários do CloudFormation que tentam atualizar a pilha. Você não pode associar diferentes políticas de pilha com diferentes usuários.

Para obter mais informações sobre como gravar políticas de pilhas, consulte [Definir uma política de pilha](#stack-policy-reference).

**Para definir uma política de pilha ao criar uma pilha (console)**

1. Abra o console do CloudFormation em [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Na barra de navegação na parte superior da tela, escolha a Região da AWS na qual a pilha deve ser criada.

1. Na página **CloudFormation Stacks (Pilhas do CloudFormation)**, escolha **Criar pilha (Create stack)**.

1. No assistente Create Stack (Criar pilha), na página **Configure stack options (Configurar opções de pilha)**, expanda a seção **Advanced (Avançado)** e escolha **Stack policy (Política de pilha)**.

1. Especifique a política da pilha:
   + Para gravar uma política diretamente no console, escolha **Enter stack policy (Inserir política de pilha)** e digite a política de pilha diretamente no campo de texto.
   + Para usar uma política definida em um arquivo separado, escolha **Upload a file (Fazer upload de um arquivo)** e **Choose file (Escolher arquivo)** para selecionar o arquivo que contém a política de pilha.

**Para definir uma política de pilha ao criar uma pilha (AWS CLI)**
+ Use o comando [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html) com a opção `--stack-policy-body` para digitar em uma política modificada ou a opção `--stack-policy-url` para especificar um arquivo que contém a política. 

**Para definir uma política de pilha em uma pilha existente (AWS CLI apenas)**
+ Use o comando [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/set-stack-policy.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/set-stack-policy.html) com a opção `--stack-policy-body` para digitar em uma política modificada ou a opção `--stack-policy-url` para especificar um arquivo que contém a política.
**nota**  
Para adicionar uma política a uma pilha existente, você deve ter permissão para a ação [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetStackPolicy.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetStackPolicy.html) do CloudFormation.

## Atualizar recursos protegidos
<a name="protect-stack-resources-updating"></a>

Para atualizar recursos protegidos, crie uma política temporária que substitui a política de pilha e permite atualizações nesses recursos. Especifique a política de substituição quando você atualizar a pilha. A política de substituição não altera permanentemente a política de pilha.

Para atualizar recursos protegidos, você deve ter permissão para usar a ação [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetStackPolicy.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetStackPolicy.html) do CloudFormation. Para obter mais informações sobre configuração de permissões do CloudFormation, consulte [Controle o acesso ao CloudFormation com o AWS Identity and Access Management](control-access-with-iam.md).

**nota**  
Durante uma atualização de pilha, o CloudFormation atualiza recursos que dependem de outros recursos atualizados. Por exemplo, o CloudFormation atualiza um recurso que faz referência a um recurso atualizado. O CloudFormation não faz alterações físicas, como o ID de recursos, para recursos atualizados automaticamente, mas se uma política de pilha é associada a esses recursos, você deve ter permissão para atualizá-las.

**Para atualizar um recurso protegido (console)**

1. Abra o console do CloudFormation em [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Selecione a pilha que deseja atualizar, escolha **Stack actions (Ações de pilha)** e selecione **Update stack (Atualizar pilha)**.

1. Se você *não* modificou o modelo de pilha, selecione **Use current template (Usar modelo atual)** e clique em **Next (Próximo)**. Se você modificou o modelo, selecione **Replace current template (Substituir modelo atual)** e especifique a localização do modelo atualizado na seção **Specify template (Especificar modelo)**:
   + Para um modelo armazenado localmente em seu computador, selecione **Upload a template file (Fazer upload de um arquivo de modelo)**. Escolha **Escolher arquivo** para navegar até o arquivo e selecioná-lo e, em seguida, clique em **Próximo**.
   + Para um modelo armazenado em um bucket do Amazon S3, selecione **Amazon S3 URL (URL do Amazon S3)**. Insira ou cole o URL do modelo e, em seguida, clique em **Próximo**.

     Se você tiver um modelo em um bucket com versionamento habilitado, poderá especificar uma versão específica do modelo anexando `?versionId=version-id` ao URL. Para obter mais informações, consulte [Trabalhar com objetos em um bucket com versionamento habilitado](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-objects-versioned-bucket.html) no *Guia do usuário do Amazon Simple Storage Service*.

1. Se o seu modelo contém parâmetros, na página **Specify stack details (Especificar detalhes da pilha)**, insira ou modifique os valores dos parâmetros e escolha **Next (Próximo)**.

   O CloudFormation preenche cada parâmetro com o valor que está atualmente definido na pilha, exceto os parâmetros declarados com o atributo `NoEcho`. É possível usar os valores atuais para esses parâmetros escolhendo **Use existing value (Usar valor existente)**.

   Para obter mais informações sobre o uso de `NoEcho` para ocultar informações confidenciais e sobre o uso de parâmetros dinâmicos para gerenciar segredos, consulte a melhor prática [Não incorporar credenciais em seus modelos](security-best-practices.md#creds).

1. Especifique uma política de pilha de substituição.

   1. Na página **Configure stack options (Configurar opções da pilha)**, na seção **Advanced options (Opções avançadas)**, selecione **Stack policy (Política de pilha)**.

   1. Selecione **Upload a file (Fazer upload de um arquivo)**.

   1. Clique em **Choose file (Escolher arquivo)** e navegue até o arquivo que contém a política de pilha de sobreposição ou digite uma política.

   1. Escolha **Próximo**.

   A política de substituição deve especificar uma instrução `Allow` para os recursos protegidos que você deseja atualizar. Por exemplo, para atualizar todos os recursos protegidos, especifique uma política de substituição temporária que permite todas as atualizações:

   ```
   {
     "Statement" : [
       {
         "Effect" : "Allow",
         "Action" : "Update:*",
         "Principal": "*",
         "Resource" : "*"
       }
     ]
   }
   ```
**nota**  
O CloudFormation aplica a política de substituição apenas durante a atualização. A política de substituição não altera permanentemente a política de pilha. Para modificar uma política de pilha, consulte [Modificar uma política de pilha](#protect-stack-resources-modifying).

1. Analise as informações e as alterações da pilha que você enviou.

   Verifique se você enviou as informações corretas, como os valores de parâmetro ou modelo de URL correto. Se o seu modelo contém recursos do IAM, escolha **I acknowledge that this template may create IAM resources (Eu reconheço que este modelo pode criar recursos do IAM)** para especificar que você deseja usar recursos do IAM no modelo. Para obter mais informações, consulte [Confirmar recursos do IAM em modelos do CloudFormation](control-access-with-iam.md#using-iam-capabilities).

   Na seção **Visualizar suas alterações**, verifique se o CloudFormation fará todas as alterações que você espera. Por exemplo, verifique que o CloudFormation adiciona, remove e modifica os recursos que você pretende adicionar, remover ou modificar. O CloudFormation gera esta pré-visualização criando um conjunto de alterações para a pilha. Para obter mais informações, consulte [Atualizar pilhas do CloudFormation usando conjuntos de alterações](using-cfn-updating-stacks-changesets.md).

1. Quando estiver satisfeito com as alterações, clique em **Update (Atualizar)**.
**nota**  
Nesse ponto, você também tem a opção de visualizar o conjunto de alterações para rever as atualizações propostas mais cuidadosamente. Para fazer isso, clique em **View change set** (Visualizar conjunto de alterações) em vez de em **Update** (Atualizar). O CloudFormation mostra o conjunto de alterações gerado com base nas suas atualizações. Quando estiver pronto para executar a atualização da pilha, clique em **Execute (Executar)**.

   CloudFormation exibe a página **Stack details** (Detalhes da pilha) para sua pilha. Sua pilha agora tem um status de `UPDATE_IN_PROGRESS`. Depois que o CloudFormation tiver concluído com êxito a atualização da pilha, ele definirá o status da pilha como `UPDATE_COMPLETE`.

   Caso a atualização da pilha falhe, o CloudFormation reverterá automaticamente as alterações e definirá o status como `UPDATE_ROLLBACK_COMPLETE`.

**Para atualizar um recurso protegido (AWS CLI)**
+ Use o comando [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack.html) com a opção `--stack-policy-during-update-body` para digitar em uma política modificada ou a opção `--stack-policy-during-update-url` para especificar um arquivo que contém a política.
**nota**  
O CloudFormation aplica a política de substituição apenas durante a atualização. A política de substituição não altera permanentemente a política de pilha. Para modificar uma política de pilha, consulte [Modificar uma política de pilha](#protect-stack-resources-modifying).

## Modificar uma política de pilha
<a name="protect-stack-resources-modifying"></a>

Para proteger os recursos adicionais ou para remover a proteção dos recursos, modifique a política da pilha. Por exemplo, quando você adiciona um banco de dados que você deseja proteger a sua pilha, adicione uma instrução `Deny` para o banco de dados à política de pilha. Para modificar a política, você deve ter permissão para usar a ação [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetStackPolicy.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetStackPolicy.html).

Use a AWS CLI para modificar políticas de pilha.

**Para modificar uma política de pilha (AWS CLI)**
+ Use o comando [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/set-stack-policy.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/set-stack-policy.html) com a opção `--stack-policy-body` para digitar em uma política modificada ou a opção `--stack-policy-url` para especificar um arquivo que contém a política.

Você não pode excluir uma política de pilha. Para remover todas as proteções de todos os recursos, você modifica a política para explicitamente permitir todas as ações em todos os recursos. A política a seguir permite todas as atualizações em todos os recursos:

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

## Mais exemplos de políticas de pilha
<a name="stack-policy-samples"></a>

As seguintes políticas de exemplo mostram como impedir atualizações em todos os recursos de pilha, especificar recursos e impedir determinados tipos de atualizações.

### Impedir atualizações em todos os recursos de pilha
<a name="w2aac43c15c21b5"></a>

Para impedir atualizações em todos os recursos de pilha, a seguinte política especifica uma instrução `Deny` para todas as ações de atualização em todos os recursos.

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

### Impedir atualizações em um único recurso
<a name="w2aac43c15c21b7"></a>

A seguinte política nega todas as ações de atualização no banco de dados com o ID lógico `MyDatabase`. Isso permite todas as ações de atualização em todos os outros recursos de pilha com uma instrução `Allow`. A instrução `Allow` não se aplica ao recurso `MyDatabase` porque a instrução `Deny` sempre substitui as ações de permissão.

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

Você pode alcançar o mesmo resultado do exemplo anterior usando um padrão de negação. Quando você define uma política de pilha, o CloudFormation bloqueia qualquer atualização que não é explicitamente permitida. A seguinte política permite atualizações em todos os recursos, exceto no recurso `ProductionDatabase`, que é negado por padrão.

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

**Importante**  
Não há risco em usar uma negação padrão. Se você tiver uma instrução `Allow` em outro lugar na política (como uma instrução `Allow` que usa um caractere curinga), talvez você conceda inadvertidamente permissão de atualização a recursos que você não pretendia. Como uma negação explícita substitui quaisquer ações de permissão, você pode garantir que um recurso seja protegido usando uma instrução `Deny`.

### Impedir atualizações em todas as instâncias de um tipo de recurso
<a name="w2aac43c15c21b9"></a>

A seguinte política nega todas as ações de atualização no tipo de recurso de instância de banco de dados do RDS. Isso permite todas as ações de atualização em todos os outros recursos de pilha com uma instrução `Allow`. A instrução `Allow` não se aplica ao recurso de instância de banco de dados do RDS porque uma instrução `Deny` sempre substitui as ações de permissão.

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

### Impedir atualizações de substituição em uma instância
<a name="w2aac43c15c21c11"></a>

A seguinte política nega atualizações que poderiam causar uma substituição da instância com o ID lógico `MyInstance`. Isso permite todas as ações de atualização em todos os outros recursos de pilha com uma instrução `Allow`. A instrução `Allow` não se aplica ao recurso `MyInstance` porque a instrução `Deny` sempre substitui as ações de permissão.

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

### Impedir atualizações em pilhas aninhadas
<a name="w2aac43c15c21c13"></a>

A seguinte política nega todas as ações de atualização no tipo de recurso de pilha do CloudFormation (pilhas aninhadas). Isso permite todas as ações de atualização em todos os outros recursos de pilha com uma instrução `Allow`. A declaração `Allow` não se aplica aos recursos da pilha do CloudFormation porque a declaração `Deny` sempre substitui as ações permitidas.

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