Ir para o conteúdo

Como resolvo o erro “A última política aplicada não pode ser excluída” no CloudFormation?

4 minuto de leitura
0

Quero resolver o erro “A última política aplicada não pode ser excluída” no AWS CloudFormation.

Breve descrição

Quando você tenta excluir suas políticas do CloudFormation, como AWS::SQS::QueuePolicy, AWS::S3::BucketPolicy, AWS::SNS::TopicPolicy e AWS::IAM::Policy, pode receber a seguinte mensagem de erro:

"Last applied policy cannot be deleted. Please delete other policies applied to this resource before deleting the last applied policy."

Se você aplicar uma política e, em seguida, outra no mesmo recurso, a segunda política se tornará a última aplicada. Quando você tenta excluir a segunda política, o CloudFormation não permite que você a exclua.

Solucione esse problema com base em um dos seguintes casos:

  • A pilha e a política encontram-se no estado DELETE_FAILED.
  • Você tentou excluir recursos de política de diferentes pilhas que aplicou ao mesmo recurso.
  • A pilha e a política encontram-se no estado UPDATE_FAILED.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

A pilha e a política encontram-se no estado DELETE_FAILED

Se você tentou excluir uma pilha e a política não a excluiu, use o console do CloudFormation ou a AWS CLI para excluir a pilha novamente e ignorar o recurso.

Console do CloudFormation

Siga as instruções para forçar a exclusão da pilha em Excluir uma pilha no console do CloudFormation.

AWS CLI

Execute o seguinte comando delete-stack:

aws cloudformation delete-stack --stack-name example-stack-name --retain-resources example-policy-resource-id

Observação: substitua example-stack-name pela pilha que não conseguiu excluir e example-policy-resource-id pelo ID do recurso de política que não conseguiu excluir.

Depois de excluir a pilha novamente, os recursos que você selecionou para reter não serão excluídos. O status da sua pilha mudará para DELETE_COMPLETE.

Observação: para evitar cobranças desnecessárias, exclua manualmente os recursos retidos ao excluir a pilha. Se você excluir o recurso de destino, o recurso de política também será excluído, então não será preciso excluir manualmente o recurso.

Para mais informações, consulte Como excluo uma pilha do AWS CloudFormation que está presa no status DELETE_FAILED?

Você tentou excluir recursos de política de diferentes pilhas que aplicou ao mesmo recurso

Se você aplicou várias políticas de pilhas diferentes ao mesmo recurso, deverá excluir a primeira política aplicada.

Por exemplo, você cria ExamplePolicyA em example-stack-A e aplica a política a exampleQueue1. Em seguida, você cria ExamplePolicyB em example-stack-B e aplica a política a exampleQueue1 com permissões diferentes. Quando você tenta excluir ExamplePolicyB, recebe o seguinte erro:

"Last applied policy cannot be deleted. Please delete other policies applied to this resource before deleting the last applied policy."

Para excluir ExamplePolicyB, você deve primeiro excluir ExamplePolicyA.

Observação: é uma prática recomendada excluir políticas anteriores antes de criar uma nova.

A pilha e o recurso de política encontram-se no estado UPDATE_FAILED

Se você removeu uma entidade de uma política, sua pilha ou recurso de política pode estar no estado UPDATE_FAILED. Esse erro ocorre porque a política está anexada ou foi substituída por outro recurso AWS::IAM::Policy definido em uma pilha diferente.

Para resolver esse problema, exclua os recursos AWS::IAM::Policy de outras pilhas que você aplicou à mesma entidade antes de tentar remover a última política aplicada.

Conclua as etapas a seguir para excluir o recurso:

  1. No recurso de pilha com falha, atualize o modelo de pilha para incluir DeletionPolicy: Retain na seção de tipo de recurso de política. 
    Exemplo de política:

    yaml
    MySharedPolicy:
        Type: AWS::IAM::Policy
        DeletionPolicy: Retain # Add this line
        Properties:
        # existing properties remain the same
  2. Implante o modelo atualizado com a política de retenção.

  3. Exclua o recurso de política do seu modelo do CloudFormation.
    Observação: como você adicionou a política de retenção, a política do IAM não é excluída.

  4. Atualize sua pilha para concluir o processo de remoção.
    Observação: se você ainda precisar do recurso de política nessa pilha, adicione-o novamente ao seu modelo com base na política da etapa 1. Em seguida, atualize a pilha com o modelo para criar o recurso.

É uma prática recomendada migrar de AWS::IAM::Policy para AWS::IAM::RolePolicy, AWS::IAM::UserPolicy ou AWS::IAM::GroupPolicy.

Se o problema persistir ou não for possível identificar as outras pilhas que contêm o recurso de política, limpe e recrie o recurso. Ao recriar o recurso da política, é possível receber o erro "resource already exists". Para resolver esse problema, renomeie PolicyName. É uma prática recomendada gerenciar um recurso de política em apenas uma pilha.

AWS OFICIALAtualizada há 3 meses
Sem comentários

Conteúdo relevante