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

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

Mesmo que você gerencie as pilhas e seus respectivos recursos usando o CloudFormation, os usuários poderão alterar esses recursos fora do CloudFormation. Os usuários podem editar recursos diretamente usando o serviço subjacente que os criou. Ao realizar a detecção de desvios em um conjunto de pilhas, você pode determinar se existem instâncias da pilha pertencentes ao conjunto de pilhas que sejam diferentes ou apresentem desvios com relação à configuração esperada.

Como o CloudFormation realiza a detecção de desvios em um conjunto de pilhas

Quando o CloudFormation executa a detecção de desvio em um conjunto de pilhas, ele a executa na pilha associada a cada instância de pilha no conjunto de pilhas. Para isso, o CloudFormation compara o estado atual de cada recurso na pilha com o estado esperado desse recurso, conforme definido no modelo da pilha e em todos os parâmetros de entrada especificados. Se o estado atual de um recurso for diferente do estado esperado, esse recurso será considerado como contendo desvios. Se um ou mais recursos em uma pilha apresentarem desvios, a própria pilha será considerada como contendo desvios e as instâncias da pilha às quais a pilha está associada também serão consideradas como contendo desvios. Se uma ou mais instâncias da pilha em um conjunto de pilhas apresentarem desvios, o próprio conjunto de pilhas será considerado como contendo desvios.

A detecção de desvios identifica alterações não gerenciadas; ou seja, as alterações feitas nas pilhas fora do CloudFormation. As alterações feitas diretamente em uma pilha por meio do CloudFormation, em vez de no nível do conjunto de pilhas, não são consideradas como desvios. Por exemplo, suponha que você tenha uma pilha que está associada a uma instância de pilha de um conjunto de pilhas. Se você usar o CloudFormation para atualizar essa pilha a fim de usar um modelo diferente, isso não será considerado um desvio, mesmo que essa pilha tenha um modelo diferente das outras pilhas pertencentes a esse conjunto de pilhas. Isso ocorre porque a pilha ainda corresponderá ao modelo esperado e à configuração do parâmetro no CloudFormation.

Para obter informações detalhadas sobre como o CloudFormation realiza a detecção de desvios em uma pilha, consulte Detectar alterações de configuração não gerenciadas em pilhas e recursos.

Como o CloudFormation executa a detecção de desvios individualmente em cada pilha, ele considera todos os valores de parâmetros substituídos ao determinar se uma pilha está com desvios. Para saber mais sobre como substituir parâmetros de modelos em instâncias de pilhas, consulte Substituir parâmetros em instâncias de pilha.

Caso execute a detecção de desvios diretamente em uma pilha que esteja associada a uma instância de pilha, esses resultados de desvios não estarão disponíveis na página do console StackSets (Conjunto de pilhas).

Como detectar desvios em um conjunto de pilhas usando o AWS Management Console
  1. Abra o console do AWS CloudFormation em https://console.aws.amazon.com/cloudformation.

  2. Na página StackSets (Conjuntos de pilhas), selecione o conjunto de pilhas no qual deseja executar a detecção de desvios.

  3. No menu Actions (Ações), selecione Detect drifts (Detectar desvios).

    O CloudFormation exibe uma barra de informações que declara que a detecção de desvios foi iniciada para o conjunto de pilhas selecionado.

  4. Opcional: para monitorar o progresso da operação de detecção de desvios:

    1. Selecione o nome do conjunto de pilhas para exibir a página Stackset details (Detalhes do conjunto de pilhas).

    2. Selecione a guia Operations (Operações), selecione a operação de detecção de desvios e selecione View drift details (Visualizar detalhes do desvio).

    O CloudFormation exibe a caixa de diálogo Operation details (Detalhes da operação).

  5. Aguarde até que o CloudFormation conclua a operação de detecção de desvios. Quando a operação de detecção de desvios estiver concluída, o CloudFormation atualizará o Drift status (Status de desvio) e o Last drift check time (Tempo da última verificação de desvio) para o conjunto de pilhas. Estes campos estão listados na guia Overview (Visão geral) da página StackSet details (Detalhes do conjunto de pilhas) para o conjunto de pilhas selecionado.

    A operação de detecção de desvios pode levar algum tempo, dependendo do número de instâncias de pilhas incluídas no conjunto de pilhas e do número de recursos incluídos no conjunto de pilhas. Você só pode executar uma operação de detecção de desvio em uma determinada pilha ao mesmo tempo. O CloudFormation continua a operação de detecção de desvios mesmo depois de você descartar a barra de informações.

  6. Para revisar os resultados de detecção de desvios para as instâncias da pilha em um conjunto de pilhas, selecione a guia Stack instances (Instâncias da pilha).

    A coluna Stack name (Nome da pilha) lista o nome da pilha associada a cada instância de pilha e a coluna Drift status (Status de desvio) lista o status do desvio da pilha. Considera-se que uma pilha foi desviada se um ou mais de seus recursos foram desviados.

  7. Para revisar os resultados da detecção de desvios da pilha associada a uma instância de pilha específica:

    1. Escolha a guia Operações.

    2. Selecione a operação de desvio para a qual você deseja visualizar os resultados da detecção de desvio. Um painel dividido exibirá o status da instância da pilha e o motivo da operação selecionada. Para uma operação de desvio, a coluna de motivo do status mostra o status do desvio de uma instância de pilha.

    3. Escolha a instância de pilha para a qual você deseja visualizar os detalhes do desvio e escolha Exibir desvios de recursos. Na tabela Status de desvios de recursos, na página Desvios de recursos, cada recurso de pilha é listado com seu status de desvio dele e a última vez em que a detecção de desvios foi iniciada no recurso. O ID lógico e o ID físico de cada recurso são exibidos para ajudar você a identificá-los.

  8. É possível classificar os recursos com base em seus status de desvio usando a coluna Drift status (Status de desvio).

    Para visualizar os detalhes em um recurso modificado:

    1. Com o recurso selecionado, escolha Visualizar detalhes de desvio.

      O CloudFormation exibirá a página de detalhes de desvios desse recurso em particular. Esta página lista as diferenças do recurso. Ela também lista os valores de propriedade esperados e atuais do recurso.

      nota

      Se a pilha pertencer a uma região e conta diferentes daquela em que você está conectado atualmente, o botão Detectar desvio será desabilitado e você não poderá ver os detalhes.

    A seção Status de desvios de recursos da página Detalhes de desvios, que contém as informações de desvio para cada recurso na pilha com suporte para detecção de desvios. Os detalhes incluem o status de desvio e os valores de propriedade esperados e atuais.
Como detectar desvios em um conjunto de pilhas usando o AWS CLI

Para detectar desvios em uma pilha inteira usando a AWS CLI, use os seguintes comandos aws cloudformation:

  • detect-stack-set-drift para iniciar uma operação de detecção de desvio em uma pilha.

  • describe-stack-set-operation para monitorar o status da operação de detecção de desvio da pilha.

  • Após a operação de detecção de desvios ter sido concluída, use os comandos a seguir para retornar as informações de desvios desejadas:

    • Use describe-stack-set para retornar informações detalhadas sobre o conjunto de pilhas, incluindo informações detalhadas sobre a última operação de desvio concluída realizada no conjunto de pilhas. (As informações sobre operações de desvios em andamento não estão incluídas.)

    • Use list-stack-instances para retornar uma lista de instâncias da pilha que pertencem ao conjunto de pilhas, incluindo o status de desvio e a hora da última verificação do desvio de cada instância.

    • Use describe-stack-instance para retornar informações detalhadas sobre uma instância de pilha específica, incluindo o status de desvio e a hora da última verificação de desvio.

    • Use list-stack-instance-resource-drifts para retornar informações detalhadas sobre o status de desvio de cada recurso em uma instância da pilha.

    • Use stack-instance-resource-drifts-summary para retornar informações resumidas sobre desvios de recursos para uma instância de pilha.

  1. Use detect-stack-set-drift para detectar desvios em todo um conjunto de pilhas e nas instâncias de pilha associadas.

    O exemplo a seguir inicia a detecção de desvios no conjunto de pilhas stack-set-drift-example.

    $ aws cloudformation detect-stack-set-drift \ --stack-set-name stack-set-drift-example { "OperationId": "c36e44aa-3a83-411a-b503-cb611example" }
  2. Como as operações de detecção de desvios do conjunto de pilhas podem ser de longa execução, use describe-stack-set-operation para monitorar o status da operação de desvios. Este comando usa o ID da operação do conjunto de pilhas retornado pelo comando detect-stack-set-drift.

    Os exemplos a seguir usam o ID da operação do exemplo anterior para retornar informações sobre a operação de detecção de desvios do conjunto de pilhas. Neste exemplo, a operação ainda está em andamento. Das sete instâncias de pilha associadas a esse conjunto de pilhas, uma instância da pilha já foi detectada como dessincronizada, duas instâncias estão sincronizadas e a detecção de desvios para as outras quatro instâncias da pilha ainda está em andamento. Como uma instância está com desvio, o status de desvio do próprio conjunto de pilhas está como DRIFTED.

    $ aws cloudformation describe-stack-set-operation \ --stack-set-name stack-set-drift-example \ --operation-id c36e44aa-3a83-411a-b503-cb611example { "StackSetOperation": { "Status": "RUNNING", "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole", "OperationPreferences": { "RegionOrder": [] }, "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole", "StackSetDriftDetectionDetails": { "DriftedStackInstancesCount": 1, "TotalStackInstancesCount": 7, "LastDriftCheckTimestamp": "2019-12-04T20:34:28.543Z", "InSyncStackInstancesCount": 2, "InProgressStackInstancesCount": 4, "DriftStatus": "DRIFTED", "FailedStackInstancesCount": 0 }, "Action": "DETECT_DRIFT", "CreationTimestamp": "2019-12-04T20:33:13.673Z", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22example", "OperationId": "c36e44aa-3a83-411a-b503-cb611example" } }

    Ao executar o mesmo comando posteriormente, este exemplo mostra as informações retornadas após a operação de detecção de desvios ter sido concluída. Duas das sete instâncias da pilha associada a este conjunto de pilhas estão dessincronizadas, renderizando o status de desvio do próprio conjunto de pilhas como DRIFTED.

    $ aws cloudformation describe-stack-set-operation \ --stack-set-name stack-set-drift-example \ --operation-id c36e44aa-3a83-411a-b503-cb611example { "StackSetOperation": { "Status": "SUCCEEDED", "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole", "OperationPreferences": { "RegionOrder": [] } "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole", "EndTimestamp": "2019-12-04T20:37:32.829Z", "StackSetDriftDetectionDetails": { "DriftedStackInstancesCount": 2, "TotalStackInstancesCount": 7, "LastDriftCheckTimestamp": "2019-12-04T20:36:55.612Z", "InSyncStackInstancesCount": 5, "InProgressStackInstancesCount": 0, "DriftStatus": "DRIFTED", "FailedStackInstancesCount": 0 }, "Action": "DETECT_DRIFT", "CreationTimestamp": "2019-12-04T20:33:13.673Z", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22example", "OperationId": "c36e44aa-3a83-411a-b503-cb611example" } }
  3. Quando a operação de detecção de desvios do conjunto de pilhas estiver concluída, use os comandos describe-stack-set, list-stack-instances, describe-stack-instance e list-stack-instance-resource-drifts para revisar os resultados.

    O comando describe-stack-set inclui as mesmas informações detalhadas de desvios retornadas pelo comando describe-stack-set-operation.

    $ aws cloudformation describe-stack-set \ --stack-set-name stack-set-drift-example { "StackSet": { "Status": "ACTIVE", "Description": "Demonstration of drift detection on stack sets.", "Parameters": [], "Tags": [ { "Value": "Drift detection", "Key": "Feature" } ], "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole", "Capabilities": [], "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole", "StackSetDriftDetectionDetails": { "DriftedStackInstancesCount": 2, "TotalStackInstancesCount": 7, "LastDriftCheckTimestamp": "2019-12-04T20:36:55.612Z", "InProgressStackInstancesCount": 0, "DriftStatus": "DRIFTED", "DriftDetectionStatus": "COMPLETED", "InSyncStackInstancesCount": 5, "FailedStackInstancesCount": 0 }, "StackSetARN": "arn:aws:cloudformation:us-east-1:123456789012:stackset/stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22example", "TemplateBody": [details omitted], "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22ebexample", "StackSetName": "stack-set-drift-example" } }

    Você pode usar o comando list-stack-instances para retornar informações resumidas sobre as instâncias da pilha associada a um conjunto de pilhas, incluindo o status de desvio de cada instância da pilha.

    Neste exemplo, executar list-stack-instances no conjunto de pilhas de exemplo com o filtro de status de desvio definido como DRIFTED permite identificar quais duas instâncias da pilha têm um status de desvio de DRIFTED.

    $ aws cloudformation list-stack-instances \ --stack-set-name stack-set-drift-example \ --filters Name=DRIFT_STATUS,Values=DRIFTED { "Summaries": [ { "StackId": "arn:aws:cloudformation:eu-west-1:123456789012:stack/StackSet-stack-set-drift-example-b0fb6083-60c0-4e39-af15-2f071e0db90c/0e4f0940-16d4-11ea-93d8-0641cexample", "Status": "CURRENT", "Account": "012345678910", "Region": "eu-west-1", "LastDriftCheckTimestamp": "2019-12-04T20:37:32.687Z", "DriftStatus": "DRIFTED", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample "LastOperationId": "c36e44aa-3a83-411a-b503-cb611example" }, { "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2e2988071a/008e6030-16d4-11ea-8090-12f89example", "Status": "CURRENT", "Account": "123456789012", "Region": "us-east-1", "LastDriftCheckTimestamp": "2019-12-04T20:34:28.275Z", "DriftStatus": "DRIFTED", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample" "LastOperationId": "c36e44aa-3a83-411a-b503-cb611example" }, [additional stack instances omitted] ] }

    O comando describe-stack-instance também retorna essas informações, mas para uma única instância da pilha, como no exemplo abaixo.

    $ aws cloudformation describe-stack-instance \ --stack-set-name stack-set-drift-example \ --stack-instance-account 012345678910 --stack-instance-region us-east-1 { "StackInstance": { "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2e2988071a/008e6030-16d4-11ea-8090-12f89example", "Status": "CURRENT", "Account": "123456789012", "Region": "us-east-1", "ParameterOverrides": [], "DriftStatus": "DRIFTED", "LastDriftCheckTimestamp": "2019-12-04T20:34:28.275Z", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample" "LastOperationId": "c36e44aa-3a83-411a-b503-cb611example" } }
  4. Depois de identificar quais instâncias de pilha apresentam desvios, será possível usar as informações sobre as instâncias de pilha retornadas pelos comandos list-stack-instances ou describe-stack-instance para executar list-stack-instance-resource-drifts. Este comando retorna as informações detalhadas sobre quais recursos na pilha apresentam desvios para uma operação de desvio em particular.

    O exemplo a seguir usa o parâmetro stack-instance-resource-drift-statuses para solicitar informações de desvio de pilha para os recursos que foram modificados ou excluídos no exemplo de operação de desvio anterior. A solicitação retorna informações sobre o único recurso que foi modificado, incluindo detalhes sobre duas de suas propriedades e seus valores alterados. Nenhum recurso foi excluído.

    $ aws cloudformation list-stack-instance-resource-drifts \ --stack-set-name my-stack-set-with-resource-drift \ --stack-instance-account 123456789012 \ --stack-instance-region us-east-1 \ --operation-id c36e44aa-3a83-411a-b503-cb611example \ --stack-instance-resource-drift-statuses MODIFIED DELETED { "Summaries": [ { "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/my-stack-set-with-resource-drift/489e5570-df85-11e7-a7d9-50example", "ResourceType": "AWS::SQS::Queue", "Timestamp": "2018-03-26T17:23:34.489Z", "PhysicalResourceId": "https://sqs.us-east-1.amazonaws.com/123456789012/my-stack-with-resource-drift-Queue-494PBHCO76H4", "StackResourceDriftStatus": "MODIFIED", "PropertyDifferences": [ { "PropertyPath": "/DelaySeconds", "ActualValue": "120", "ExpectedValue": "20", "DifferenceType": "NOT_EQUAL" }, { "PropertyPath": "/RedrivePolicy/maxReceiveCount", "ActualValue": "12", "ExpectedValue": "10", "DifferenceType": "NOT_EQUAL" } ], "LogicalResourceId": "Queue" } ] }

Interromper a detecção de desvios em um conjunto de pilhas

Como a detecção de desvios em um conjunto de pilhas pode ser uma operação de longa execução, é possível que existam instâncias quando decidir interromper uma operação de detecção de desvios em andamento em um conjunto de pilhas.

Para interromper a detecção de desvios em um conjunto de pilhas usando o AWS Management Console
  1. Abra o console do AWS CloudFormation em https://console.aws.amazon.com/cloudformation.

  2. Na página StackSets (Conjuntos de pilhas) selecione o nome do conjunto de pilhas.

    O CloudFormation exibe a página StackSets details (Detalhes dos conjuntos de pilhas) para o conjunto de pilhas selecionado.

  3. Na página StackSets details (Detalhes dos conjuntos de pilhas), selecione a guia Operations (Operações) e selecione a operação de detecção de desvios.

  4. Selecione Stop operation (Interromper operação).

Para interromper a detecção de desvios em um conjunto de pilhas usando o AWS CLI
  • Use o comando stop-stack-set-operation. Você deve fornecer o nome do conjunto de pilhas e o ID da operação de detecção de desvios do conjunto de pilhas.

    $ aws cloudformation stop-stack-set-operation \ --stack-set-name stack-set-drift-example \ --operation-id 624af370-311a-11e8-b6b7-500cexample