Detectar cambios de configuración no administrados en pilas y recursos con detección de derivación - AWS CloudFormation

Detectar cambios de configuración no administrados en pilas y recursos con detección de derivación

Incluso aunque administre sus recursos a través de CloudFormation, los usuarios pueden cambiar esos recursos desde fuera de CloudFormation. Los usuarios pueden editar los recursos directamente usando el servicio subyacente que ha creado el recurso. Por ejemplo, puede utilizar la consola de Amazon EC2 para actualizar una instancia de servidor que se creó como parte de una pila de CloudFormation. Algunos cambios pueden ser accidentales, mientras que otros pueden realizarse a propósito para dar respuesta a eventos operativos en los que el tiempo es crucial. Sea cual sea el motivo, los cambios realizados fuera de CloudFormation pueden complicar las operaciones de actualización de la pila o de eliminación. Puede utilizar la detección de desviaciones para identificar los recursos de pila en los que se han introducido cambios de configuración fuera de la administración de CloudFormation. Después podrá adoptar las medidas correctivas adecuadas para que los recursos de la pila vuelvan a estar sincronizados con sus definiciones en la plantilla de pila; por ejemplo, puede actualizar los recursos con desviaciones directamente para que concuerden con su definición en la plantilla. Solucionar las desviaciones ayuda a garantizar la coherencia de la configuración y la correcta ejecución de las operaciones de pila.

¿Qué es una desviación?

La detección de desviaciones le permite detectar si la configuración real de la pila es diferente o se ha desviado de su configuración esperada. CloudFormation se utiliza para detectar las desviaciones en una pila completa o en recursos individuales dentro de la pila. Se considera que un recurso se ha desviado si alguno de sus valores de propiedad reales son diferentes de los valores de propiedad esperados. Esto incluye la eliminación de la propiedad o el recurso. Se considera que una pila se ha desviado si uno o varios de sus recursos se han desviado.

Con el fin de determinar si un recurso se ha desviado, CloudFormation determina los valores de propiedades de recursos esperados, tal y como están definidos en la plantilla de la pila y los valores especificados como los parámetros de la plantilla. A continuación, CloudFormation compara los valores esperados con los valores reales de esas propiedades de recursos, tal y como son actualmente en la pila. Se considera que un recurso se ha desviado si una o varias de sus propiedades se han eliminado o si el valor de las propiedades ha cambiado.

CloudFormation genera información detallada sobre cada recurso de la pila que se ha desviado.

CloudFormation detecta las desviaciones en los recursos de AWS que admiten la detección de desviaciones. A los recursos que no admiten dicha detección se les asigna un estado de desviación NOT_CHECKED. Para obtener una lista de AWS los recursos que admiten la detección de desviaciones, consulte Tipo de recurso compatible.

Además, CloudFormation admite detección de desviaciones en tipos de recursos privados que son provisionables; es decir, cuyo tipo de aprovisionamiento es FULLY_MUTABLE o IMMUTABLE. Para realizar la detección de desviaciones en un recurso de tipo privado, la versión predeterminada del tipo de recurso que ha registrado en la cuenta debe ser provisionable. Para obtener más información sobre tipos de aprovisionamiento de recursos, consulte el parámetro ProvisioningType de la acción DescribeType en la referencia API de AWS CloudFormation DescribeType y del comando en la Referencia de comandos AWS CLI. Para obtener más información acerca de los recursos privados, consulte Administración de extensiones a través del registro de CloudFormation.

Puede ejecutar la detección de desviaciones en pilas que tengan los siguientes estados: CREATE_COMPLETE, UPDATE_COMPLETE, UPDATE_ROLLBACK_COMPLETE y UPDATE_ROLLBACK_FAILED.

Cuando detecta desviaciones en una pila, CloudFormation no detecta desviaciones en ninguna de las pilas anidadas que pertenecen a dicha pila. Para obtener más información, consulte Integre pilas dentro de otras pilas mediante pilas anidadas. En su lugar, puede iniciar una operación de detección de desviaciones directamente en la pila anidada.

nota

CloudFormation determina únicamente las desviaciones de los valores de propiedades que se establecen explícitamente, ya sea a través de la plantilla de pila o especificando los parámetros de plantilla. No se incluyen los valores predeterminados de las propiedades de los recursos. Para que CloudFormation realice el seguimiento de una propiedad de recurso para determinar la desviación, defina de forma explícita el valor de la propiedad, aunque lo configure en el valor predeterminado.

Códigos de estado de detección de desviaciones

En las tablas de esta sección se describen los distintos tipos de estado que se utilizan para la detección de desviaciones:

  • En Estado de operación de detección de desviación se describe el estado actual de la operación de desviación.

  • Estado de desviación

    Para los conjuntos de pila, esto describe el estado de desviación del conjunto de pila en su totalidad, en función del estado de desviación de las instancias de pila que le pertenecen.

    Para las instancias de pila, esto describe el estado de desviación de la instancia de pila, en función del estado de desviación de su pila asociada.

    Para las pilas, esto describe el estado de desviación de la pila en su conjunto, en función del estado de desviación de sus recursos.

  • En Estado de desviación del recurso se describe el estado de desviación de un recurso individual.

En la siguiente tabla se enumeran los códigos de estado que CloudFormation asigna a las operaciones de detección de desviaciones de pila.

Estado de la operación de detección de desviaciones Descripción

DETECTION_COMPLETE

La operación de detección de desviaciones de la pila se ha realizado con éxito para todos los recursos de la pila que admiten la detección de desviaciones.

DETECTION_FAILED

La operación de detección de desviaciones de la pila ha generado un error para un recurso de la pila como mínimo. Los resultados estarán disponibles para los recursos en los que CloudFormation ha completado correctamente la detección de desviaciones.

DETECTION_IN_PROGRESS

La operación de detección de desviaciones de la pila está en curso actualmente.

En la siguiente tabla se enumeran los códigos de estado de desviación que CloudFormation asigna a las pilas.

Estado de desviación Descripción

DRIFTED

Para pilas: la pila difiere o se ha desviado de su configuración de plantilla prevista. Se considera que una pila se ha desviado si uno o varios de sus recursos se han desviado.

Para instancias de pila: se considera que una instancia de pila se ha desviado si la pila asociada con ella se ha desviado.

Para conjuntos de pila: se considera que un conjunto de pila se ha desviado si una o más instancias de pila se han desviado.

NOT_CHECKED

CloudFormation no ha comprobado si la pila, el conjunto de pila o la instancia de pila difiere de su configuración de plantilla esperada.

IN_SYNC

La configuración actual de cada recurso admitido coincide con su configuración de plantilla prevista. Una pila, un conjunto de pila o una instancia de pila sin recursos que admitan la detección de desviación también tendrá un estado de IN_SYNC.

En la siguiente tabla se enumeran los códigos de estado de desviación que CloudFormation asigna a los recursos de pila.

Estado de desviación de recursos Descripción

DELETED

El recurso difiere de la configuración de plantilla prevista ya que se ha eliminado el recurso.

MODIFIED

El recurso difiere de su configuración de plantilla prevista.

NOT_CHECKED

CloudFormation no ha comprobado si el recurso difiere de su configuración de plantilla prevista.

IN_SYNC

La configuración actual del recurso coincide con su configuración de plantilla prevista.

En la tabla siguiente se muestran los códigos de estado del tipo diferencia que CloudFormation asigna a las propiedades de los recursos que difieren de su configuración de plantilla prevista.

Tipos de diferencia de propiedad Descripción

ADD

Se ha agregado un valor a una propiedad de recurso que es un tipo de datos lista o matriz.

REMOVE

La propiedad se ha eliminado de la configuración de recursos actual.

NOT_EQUAL

El valor de propiedad actual difiere de su valor esperado tal y como se define en la plantilla de pila.

Consideraciones a tener en cuenta cuando se detectan desviaciones

Con el fin de realizar correctamente una detección de desviaciones en una pila, el usuario debe tener los siguientes permisos:

  • Permiso de lectura para cada recurso que admite la detección de desviaciones incluida en la pila. Por ejemplo, si la pila incluye un recurso AWS::EC2::Instance, debe disponer de permiso ec2:DescribeInstances para realizar una detección de desviaciones en la pila.

  • cloudformation:DetectStackDrift

  • cloudformation:DetectStackResourceDrift

  • cloudformation:BatchDescribeTypeConfigurations

Para más información acerca de cómo establecer permisos en CloudFormation, consulte Control del acceso con AWS Identity and Access Management.

En algunos casos de borde, es posible que CloudFormation no pueda devolver siempre resultados de desviaciones precisos. Debe tener en cuenta estos casos de límite para interpretar correctamente sus resultados de detección de desviaciones.

  • En algunos casos los objetos contenidos en matrices de propiedades se indican como desviaciones, cuando en realidad son valores predeterminados suministrados a la propiedad desde el servicio subyacente responsable del recurso.

  • Algunos recursos tienen relaciones de asociación con recursos relacionados, de forma que un recurso en realidad pueda asociar o eliminar valores de otro recurso que esté definido en la misma plantilla o en otra. Por ejemplo, los recursos AWS::EC2::SecurityGroupIngress y AWS::EC2::SecurityGroupEgress se pueden utilizar para asociar y eliminar valores de recursos AWS::EC2::SecurityGroup. En estos casos CloudFormation analiza la plantilla de la pila para detectar asociaciones antes de realizar la comparación de desviación. Sin embargo, CloudFormation no puede realizar este análisis en varias pilas, por lo que es posible que no devuelva resultados precisos de desviaciones cuando los recursos asociados residan en diferentes pilas.

    Los recursos que admiten detección de desviaciones y permiten o requieren asociaciones de otros recursos son:

    Tipo de recurso Tipo de recurso de asociación

    AWS::SNS::Topic

    AWS::SNS::Subscription

    AWS::IAM::User

    AWS::IAM::UserToGroupAddition

    AWS::IAM::Group

    AWS::IAM::Role

    AWS::IAM::User

    AWS::IAM::Policy

    AWS::IAM::ManagedPolicy

    AWS::ElasticLoadBalancingV2::Listener

    AWS::ElasticLoadBalancingV2::ListenerCertificate

    AWS::EC2::SecurityGroup

    AWS::EC2::SecurityGroupEgress

    AWS::EC2::SecurityGroupIngress

  • CloudFormation no realiza una detección de desviaciones en la propiedad KMSKeyId de los recursos. Dado que varios alias pueden hacer referencia a las claves de AWS KMS, CloudFormation no puede garantizar resultados de desviaciones precisos coherentes para esta propiedad.

  • Existen algunas propiedades de recursos que puede especificar en su plantilla de pila y que, debido a su propia naturaleza, CloudFormation no puede comparar con las propiedades de los recursos de pila obtenidos. Por lo tanto, estas propiedades no se pueden incluir en los resultados de detección de las desviaciones. Dichas propiedades se dividen en dos amplias categorías:

    • Valores de propiedades que CloudFormation no puede asignar de nuevo a su valor inicial de propiedad de recurso en la plantilla de la pila.

      Por ejemplo, CloudFormation no puede volver a asignar un código fuente de una función de Lambda al tipo de propiedad Code del recurso AWS::Lambda::Function y, por lo tanto, CloudFormation no puede incluirlo en los resultados de detección de desviaciones.

    • Los valores de propiedades que el servicio responsable del recurso no devuelve.

      Existen determinados valores de propiedades que, por diseño, el servicio al que pertenece el recurso nunca devuelve. Se trata de valores que tienden a contener información confidencial, como contraseñas u otro tipo de información confidencial, que no debe estar expuesta. Por ejemplo, el servicio IAM nunca devuelve el valor de la propiedad Password del tipo de propiedad IAM User LoginProfile de usuario de IAM y, por lo tanto, CloudFormation no puede incluirlo en los resultados de detección de desviaciones.

    • Es posible que los objetos de una matriz sean en realidad valores predeterminados del servicio y no desviaciones agregadas manualmente.

  • Si encuentra algún falso positivo, envíenos sus comentarios mediante el enlace de comentarios de la consola de CloudFormation o póngase en contacto con nosotros a través de AWS re:Post.

  • Algunas propiedades pueden tener valores de entrada iguales, pero no idénticos. Para evitar falsos positivos, debe asegurarse de que la configuración esperada coincida con la configuración real.

    • Por ejemplo, la configuración esperada de la propiedad de recurso puede ser de 1024 MB y la configuración real de la misma propiedad de recurso puede ser de 1 GB. 1024 MB y 1 GB son iguales, pero no idénticos.

      Cuando se ejecuta la detección de desviaciones en esta propiedad de recurso, indicará los resultados de las desviaciones.

      Para evitar este falso positivo, cambie la configuración esperada de la propiedad del recurso a 1024 MB y, a continuación, ejecute la detección de desviaciones.