Detectar alterações de configuração não gerenciadas em pilhas e recursos - AWS CloudFormation

Detectar alterações de configuração não gerenciadas em pilhas e recursos

Mesmo que você gerencie seus recursos com o CloudFormation, os usuários podem alterá-los fora do CloudFormation. Os usuários podem editar recursos diretamente usando o serviço subjacente que os criou. Por exemplo, você pode usar o console do Amazon EC2 para atualizar uma instância de servidor que foi criada como parte de uma pilha do CloudFormation. Algumas mudanças podem ser acidentais e algumas podem ser feitas intencionalmente para responder a eventos operacionais sensíveis ao tempo. Independentemente disso, as alterações feitas fora do CloudFormation podem complicar as operações de atualização ou exclusão de pilha. Você pode usar a detecção de desvio para identificar recursos de pilha para os quais alterações de configuração foram feitas fora do gerenciamento do CloudFormation. Depois, é possível tomar medidas corretivas para que seus recursos de pilha estejam novamente em sincronia com suas definições no modelo de pilha, como atualizar os recursos desviados diretamente para que eles correspondam à definição do modelo. Resolver o desvio ajuda a garantir a consistência da configuração e operações de pilha bem-sucedidas.

O que é desvio?

A detecção de desvio permite detectar se a configuração real de uma pilha difere ou se desviou da configuração esperada. Use o CloudFormation para detectar desvios em uma pilha inteira ou em recursos individuais dentro da pilha. Considera-se que um recurso foi desviado se algum dos seus valores de propriedade reais for diferente dos valores de propriedade esperados. Isso inclui se a propriedade ou o recurso foi excluído. Considera-se que uma pilha foi desviada se um ou mais de seus recursos foram desviados.

Para determinar se um recurso foi desviado, o CloudFormation determina os valores de propriedades de recursos esperados, conforme definido no modelo de pilha, e quaisquer valores especificados como parâmetros de modelo. Em seguida, o CloudFormation compara esses valores esperados com os valores reais dessas propriedades de recursos existentes atualmente na pilha. Considera-se que um recurso foi desviado quando uma ou mais de suas propriedades foi excluídas ou teve seu valor alterado.

O CloudFormation gera informações detalhadas sobre cada recurso na pilha que se desviou.

O CloudFormation detecta desvios nos recursos da AWS que suportam a detecção de desvios. Recursos sem suporte para a detecção de desvio recebem um status de desvio de NOT_CHECKED. Para obter uma lista de recursos da AWS que oferecem suporte à detecção de desvios, consulte Suporte a tipos de recursos.

Além disso, o CloudFormation é compatível com a detecção de desvios em tipos de recursos privados provisionáveis, ou seja, com tipo de provisionamento FULLY_MUTABLE ou IMMUTABLE. Para realizar a detecção de desvios em um recurso de tipo privado, a versão padrão do tipo de recurso que você registrou em sua conta deve ser provisionável. Para obter mais informações sobre o tipo de provisão de recursos, consulte o parâmetro ProvisioningType da ação DescribeType na Referência de APIs do AWS CloudFormation e o comando DescribeType, na Referência de comandos da AWS CLI. Para obter mais informações sobre recursos privados, consulte Como usar o registro do AWS CloudFormation.

Você pode realizar a detecção de desvio em pilhas com os seguintes status: CREATE_COMPLETE, UPDATE_COMPLETE, UPDATE_ROLLBACK_COMPLETE e UPDATE_ROLLBACK_FAILED.

Ao detectar o desvio em uma pilha, o CloudFormation não detecta desvios em nenhuma pilha aninhada que pertença a essa pilha. Para ter mais informações, consulte Trabalhar com pilhas aninhadas. Em vez disso, você pode iniciar uma operação de detecção de desvio diretamente na pilha aninhada.

nota

O CloudFormation determina apenas o desvio para valores de propriedade explicitamente definidos, seja por meio do modelo de pilha ou especificando parâmetros de modelo. Isso não inclui valores padrão para propriedades de recursos. Para que o CloudFormation controle uma propriedade de recurso para fins de determinação de desvio, defina explicitamente o valor da propriedade, mesmo que você a esteja está definindo com o valor padrão.

Códigos de status de detecção de desvio

As tabelas nesta seção descrevem os vários tipos de status usados com a detecção de desvio:

  • Status da operação de detecção de desvio descreve o estado atual da operação de desvio.

  • Status do desvio

    Em conjuntos de pilhas, isso descreve o status do desvio do conjunto de pilhas como um todo, com base no status do desvio das instâncias de pilha que pertencem a ele.

    Em instâncias de pilha, isso descreve o status do desvio da instância de pilha, com base no status do desvio da pilha associada.

    Em pilhas, isso descreve o status do desvio da pilha como um todo, com base no status do desvio dos recursos.

  • Status de desvio de recursos descreve o status de desvio de um recurso individual.

A tabela a seguir lista os códigos de status que o CloudFormation atribui a operações de detecção de desvio de pilha.

Status da operação de detecção de desvio Descrição

DETECTION_COMPLETE

A operação de detecção de desvio de pilha foi concluída com êxito para todos os recursos na pilha compatível com a detecção de desvio.

DETECTION_FAILED

A operação de detecção de desvio de pilha falhou para pelo menos um recurso na pilha. Os resultados estarão disponíveis para recursos nos quais o CloudFormation concluiu com êxito a detecção de desvio.

DETECTION_IN_PROGRESS

A operação de detecção de desvio de pilha está em andamento.

A tabela a seguir lista os códigos de status de desvio doCloudFormation atribuídos a pilhas.

Status do desvio Descrição

DRIFTED

Em pilhas: a pilha é diferente, ou foi desviada de sua configuração de modelo esperada. Considera-se que uma pilha foi desviada se um ou mais de seus recursos foram desviados.

Em instâncias de pilha: uma instância de pilha é considerada com desvio se a pilha associada a ela tiver desviado.

Em conjuntos de pilhas: um conjunto de pilhas é considerado com desvio se uma ou mais instâncias de pilha tiverem desviado.

NOT_CHECKED

O CloudFormation não verificou se a pilha, o conjunto de pilha ou a instância de pilha difere da configuração de modelo esperada.

IN_SYNC

A configuração atual de cada recurso compatível corresponde à sua configuração de modelo esperada. Uma pilha, um conjunto de pilha ou uma instância de pilha sem recursos que ofereçam suporte à detecção de desvio também terá um status de IN_SYNC.

A tabela a seguir lista os códigos de status de desvio que o CloudFormation atribui a recursos de pilha.

Status de desvio do recurso Descrição

DELETED

O recurso difere de sua configuração de modelo esperada porque o recurso foi excluído.

MODIFIED

O recurso difere de sua configuração de modelo esperada.

NOT_CHECKED

O CloudFormation não verificou se o recurso é diferente da configuração de modelo esperada.

IN_SYNC

A configuração atual do recurso corresponde à configuração do modelo esperada.

A tabela a seguir lista os códigos de status de tipos de diferença que o CloudFormation atribui às propriedades do recurso que diferem de configurações de modelo esperadas.

Tipos de diferenças de propriedades Descrição

ADD

Um valor foi adicionado a uma propriedade de recurso que é um tipo de dados de matriz ou lista.

REMOVE

A propriedade foi removida da configuração atual do recurso.

NOT_EQUAL

O valor da propriedade atual difere de seu valor esperado, conforme definido no modelo de pilha.

Considerações ao detectar o desvio

Para realizar com êxito a detecção de desvio em uma pilha, um usuário deve ter as seguintes permissões:

  • Permissão de leitura para cada recurso compatível com a detecção de desvio incluída na pilha. Por exemplo, se a pilha inclui um recurso AWS::EC2::Instance, você deverá ter a permissão ec2:DescribeInstances para realizar a detecção de desvio na pilha.

  • cloudformation:DetectStackDrift

  • cloudformation:DetectStackResourceDrift

  • cloudformation:BatchDescribeTypeConfigurations

Para obter mais informações sobre a configuração de permissões no CloudFormation, consulte Controlar o acesso com o AWS Identity and Access Management.

Em certos casos de ponto, o CloudFormationpode não ser capaz de sempre retornar resultados precisos de desvio. Você deve estar ciente desses casos de ponto para interpretar corretamente seus resultados de detecção de desvio.

  • Em certos casos, os objetos contidos em matrizes de propriedades serão relatados como desvios, quando, na verdade, são valores padrão fornecidos à propriedade a partir do serviço subjacente responsável pelo recurso.

  • Certos recursos têm relacionamentos de anexo com recursos relacionados, de modo que um recurso pode realmente anexar ou remover valores de propriedade de outro recurso, definidos no mesmo modelo ou em outro. Por exemplo, os recursos AWS::EC2::SecurityGroupIngress e AWS::EC2::SecurityGroupEgress podem ser usados para prender e remover valores de recursos AWS::EC2::SecurityGroup. Nesses casos, o CloudFormation analisa o modelo de pilha de anexos antes de realizar a comparação de desvio. No entanto, o CloudFormation não pode executar essa análise entre as pilhas e, portanto, pode não retornar resultados precisos de desvio quando os recursos anexados residem em pilhas diferentes.

    Recursos compatível com a detecção de desvio e que permitem ou exigem anexos de outros recursos incluem:

    Tipo de recurso Tipo de recurso de anexo

    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

  • O CloudFormation não realiza a detecção de desvio na propriedade KMSKeyId de recursos. Como chaves do AWS KMS podem ser referenciadas por vários aliases, o CloudFormation não pode garantir resultados de desvio consistentemente precisos para essa propriedade.

  • Há certas propriedades de recurso que você pode especificar em seu modelo de pilha que, pela própria natureza, o CloudFormation não será capaz de comparar com as propriedades nos recursos de pilha resultantes. Portanto, essas propriedades não podem ser incluídas nos resultados da detecção de desvio. Essas propriedades se dividem em duas grandes categorias:

    • Valores de propriedade que o CloudFormation não pode mapear de volta para o valor de propriedade de recurso inicial no modelo de pilha.

      Por exemplo, o CloudFormation não pode mapear o código-fonte de uma função do Lambda de volta ao tipo de propriedade Code do recurso AWS::Lambda::Function e, portanto, o CloudFormation não pode incluí-lo em resultados de detecção de desvio.

    • Os valores de propriedades que o serviço responsável pelo recurso não retorna.

      Há determinados valores de propriedades que, por natureza, nunca são retornados pelo serviço ao qual o recurso pertence. Eles tendem a conter informações confidenciais, como senhas ou outros dados confidenciais que não devem ser expostos. Por exemplo, o serviço do IAM nunca retornará o valor da propriedade Password do tipo de propriedade IAM User LoginProfile, e, portanto, o CloudFormation não poderá incluí-lo em resultados de detecção de desvio.

    • Objetos em uma matriz podem ser, na verdade, padrões de serviço, e não desvios adicionados manualmente.

  • Se você encontrar algum falso positivo, envie seus comentários usando o link de feedback no console do CloudFormation ou entre em contato conosco em AWS re:Post.

  • Algumas propriedades podem ter valores de entrada equivalentes, mas não idênticos. Para evitar falsos positivos, você deve garantir que a configuração esperada corresponda à configuração real.

    • Por exemplo, a configuração esperada da propriedade do recurso pode ser 1024 MB e a configuração real da mesma propriedade de recurso pode ser 1 GB. 1024 MB e 1 GB são equivalentes, mas não idênticos.

      Quando a detecção de desvio é executada nessa propriedade de recurso, ela sinaliza resultados com desvios.

      Para evitar esse falso positivo, altere a configuração esperada da propriedade do recurso para 1024 MB e depois execute a detecção de desvio.