Saltar al contenido

¿Cómo puedo solucionar el error "Last applied policy cannot be deleted" en CloudFormation?

4 minutos de lectura
0

Quiero resolver el error "Last applied policy cannot be deleted" en AWS CloudFormation.

Descripción corta

Al intentar eliminar las políticas de CloudFormation, como AWS::SQS::QueuePolicy, AWS::S3::BucketPolicy, AWS::SNS::TopicPolicy y AWS::IAM::Policy, es posible que aparezca el siguiente error:

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

Si aplicas una política y a continuación otra en el mismo recurso, la segunda política se convierte en la última política aplicada. Cuando intentas eliminar la segunda política, CloudFormation no te permite eliminarla.

Soluciona este problema en función de una de las siguientes situaciones:

  • La pila y la política están en el estado DELETE_FAILED.
  • Has intentado eliminar los recursos de políticas de diferentes pilas que hayas aplicado al mismo recurso.
  • La pila y la política están en el estado UPDATE_FAILED.

Resolución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

La pila y el recurso de política están en el estado DELETE_FAILED

Si has intentado eliminar una pila y la política no se ha eliminado, utiliza la consola de CloudFormation o la AWS CLI para volver a eliminar la pila y omitir el recurso. 

Consola de CloudFormation

Sigue las instrucciones para forzar la eliminación de la pila en Eliminar una pila de la consola de CloudFormation.

AWS CLI

Ejecuta el siguiente comando delete-stack:

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

Nota: Sustituye example-stack-name por la pila que no se pudo eliminar y example-policy-resource-id por el ID del recurso de política que no se pudo eliminar.

Cuando vuelvas a eliminar la pila, los recursos que hayas seleccionado para retener no se eliminarán. El estado de la pila cambia a DELETE_COMPLETE.

Nota: Para evitar cargos innecesarios, elimina manualmente los recursos retenidos cuando elimines la pila. Si eliminas el recurso de destino, el recurso de política también se elimina, por lo que no es necesario eliminar el recurso manualmente.

Para obtener más información, consulta ¿Cómo puedo eliminar una pila de AWS CloudFormation que está en el estado DELETE_FAILED?

Eliminación de los recursos de políticas de diferentes pilas que se hayan aplicado al mismo recurso

Si has aplicado varias políticas de diferentes pilas al mismo recurso, debes eliminar la primera política que has aplicado.

Por ejemplo, puedes crear ExamplePolicyA en example-stack-A y aplicar la política a exampleQueue1. A continuación, crea ExamplePolicyB en example-stack-B y aplica la política a exampleQueue1 con diferentes permisos. Cuando intentas eliminar ExamplePolicyB, recibes el siguiente error:

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

Para eliminar ExamplePolicyB, primero debes eliminar ExamplePolicyA.

Nota: Se recomienda eliminar las políticas anteriores antes de crear una nueva.

La pila y el recurso de política están en el estado UPDATE_FAILED

Si has eliminado una entidad de una política, es posible que tu pila o recurso de política esté en el estado UPDATE_FAILED. Este error se produce porque la política está adjunta o anulada por otro recurso de AWS::IAM::Policy que está definido en una pila diferente.

Para resolver este problema, elimina los recursos AWS::IAM::Policy de otras pilas que hayas aplicado a la misma entidad antes de intentar eliminar la última política aplicada.

Completa los siguientes pasos para eliminar el recurso:

  1. En el recurso de pila fallido, actualiza la plantilla de pila para incluir DeletionPolicy: retener en la sección de tipos de recursos de políticas. 
    Ejemplo de política:

    yaml
    MySharedPolicy:
        Type: AWS::IAM::Policy
        DeletionPolicy: Retain # Add this line
        Properties:
        # existing properties remain the same
  2. Despliega la plantilla actualizada con la política de retención.

  3. Elimina el recurso de política de tu plantilla de CloudFormation.
    Nota: Como has agregado la política de retención, la política de IAM no se elimina.

  4. Actualiza tu pila para completar el proceso de eliminación.
    Nota: Si aún necesitas el recurso de política de esta pila, vuelve a agregar el recurso a tu plantilla según la política del paso 1. A continuación, actualiza la pila con la plantilla para crear el recurso.

Se recomienda migrar de AWS::IAM::Policy a AWS::IAM::RolePolicy, AWS::IAM::UserPolicy o AWS::IAM::GroupPolicy.

Si el problema continúa o no puedes identificar las otras pilas que contienen el recurso de política, limpia y vuelve a crear el recurso. Al volver a crear el recurso de política, es posible que recibas el error "resource already exists". Para resolver este problema, cambia el nombre de PolicyName. Se recomienda administrar un recurso de políticas en una sola pila.

OFICIAL DE AWSActualizada hace 4 meses