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
Abra o console do AWS CloudFormation em https://console.aws.amazon.com/cloudformation
. -
Na página StackSets (Conjuntos de pilhas), selecione o conjunto de pilhas no qual deseja executar a detecção de desvios.
-
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.
-
Opcional: para monitorar o progresso da operação de detecção de desvios:
-
Selecione o nome do conjunto de pilhas para exibir a página Stackset details (Detalhes do conjunto de pilhas).
-
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).
-
-
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.
-
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.
-
Para revisar os resultados da detecção de desvios da pilha associada às instâncias de uma pilha específica:
-
Anote a conta da AWS, o Nome da pilha e a Região da AWS da instância da pilha.
Abra o console do AWS CloudFormation em https://console.aws.amazon.com/cloudformation
. Faça login na conta da AWS que contém a instância da pilha.
-
Selecione a região da AWS que contém a instância da pilha.
-
No painel de navegação à esquerda, selecione Stacks (Pilhas).
-
Selecione a pilha que deseja visualizar e selecione Drifts (Desvios).
O CloudFormation exibe a página Drifts (Desvios) para a pilha associada à instância da pilha especificada.
Na seção Status de desvio do recurso, o CloudFormation lista cada recurso de pilha, o 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. Além disso, para recursos com status MODIFIED, o CloudFormation exibe detalhes de desvios do recurso.
É 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.
-
Com o recurso modificado selecionado, escolha View drift details (Visualizar detalhes de desvio).
O CloudFormation exibe a página de detalhes de desvios desse recurso. Esta página lista os valores de propriedade esperados e atuais do recurso e quaisquer diferenças entre os dois.
Para destacar uma diferença, na seção Differences (Diferenças), selecione o nome da propriedade.
-
As propriedades adicionadas são destacadas em verde na coluna Current (Atuais) da seção Details (Detalhes).
-
As propriedades excluídas são destacadas em vermelho na coluna Expected (Esperadas) da seção Details (Detalhes).
-
As propriedades que tiveram valor alterado serão destacadas em azul nas colunas Esperado e Atual.
-
-
-
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
describe-stack-instance-resource-drifts
para retornar informações detalhadas sobre o status de desvio de cada recurso em uma instância da pilha.
-
-
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" }
-
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 comandodetect-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 este 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::012345678910: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::012345678910: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" } }
-
Quando a operação de detecção de desvios do conjunto de pilhas estiver concluída, use os comandos
describe-stack-set
,list-stackinstances
edescribe-stack-instance
para revisar os resultados.O comando
describe-stack-set
inclui as mesmas informações detalhadas de desvios retornadas pelo comandodescribe-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::012345678910: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:012345678910: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 permite identificar quais das duas instâncias da pilha têm o status de desvioDRIFTED
.aws cloudformation list-stack-instances --stack-set-name stack-set-drift-example { "Summaries": [ { "StackId": "arn:aws:cloudformation:ap-northeast-1:012345678910:stack/StackSet-stack-set-drift-example-29168cdd-e587-4709-8a1f-90f752ec65e1/1a8a98f0-16d4-11ea-9844-060a5example", "Status": "CURRENT", "Account": "012345678910", "Region": "ap-northeast-1", "LastDriftCheckTimestamp": "2019-12-04T20:36:18.481Z", "DriftStatus": "IN_SYNC", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample" }, { "StackId": "arn:aws:cloudformation:eu-west-1:012345678910: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 }, { "StackId": "arn:aws:cloudformation:us-east-1:012345678910:stack/StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2e2988071a/008e6030-16d4-11ea-8090-12f89example", "Status": "CURRENT", "Account": "012345678910", "Region": "us-east-1", "LastDriftCheckTimestamp": "2019-12-04T20:34:28.275Z", "DriftStatus": "DRIFTED", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample" }, [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:012345678910:stack/StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2e2988071a/008e6030-16d4-11ea-8090-12f89example", "Status": "CURRENT", "Account": "012345678910", "Region": "us-east-1", "ParameterOverrides": [], "DriftStatus": "DRIFTED", "LastDriftCheckTimestamp": "2019-12-04T20:34:28.275Z", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample" } }
-
Após identificar quais instâncias estão dessincronizadas, você pode usar as informações sobre as instâncias da pilha retornadas pelos comandos
list-stack-instances
oudescribe-stack-instance
para executar describe-stack-resource-drifts. Este comando retorna as informações detalhadas sobre quais recursos na pilha estão dessincronizados.O exemplo a seguir usa o ID da pilha de uma das pilhas com desvio, retornado pelo comando
list-stack-instances
no exemplo acima, para retornar informações detalhadas sobre os recursos que foram modificados ou excluídos fora do CloudFormation. Nesta pilha, duas propriedades em um recurso doAWS::SQS::Queue
,DelaySeconds
emaxReceiveCount
foram modificadas.aws cloudformation describe-stack-resource-drifts --stack-name arn:aws:cloudformation:us-east-1:012345678910:stack/StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2e2988071a/008e6030-16d4-11ea-8090-12f89example --stack-resource-drift-status-filters "MODIFIED" "DELETED" { "StackResourceDrifts": [ { "StackId": "arn:aws:cloudformation:us-east-1:012345678910:stack/StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2e2988071a/008e6030-16d4-11ea-8090-12f8925a37c4", "ActualProperties": "{\"DelaySeconds\":10,\"RedrivePolicy\":{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-1:012345678910:StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2e2-DLQ-1H0SQCOKALBDJ\",\"maxReceiveCount\":20},\"VisibilityTimeout\":60}", "ResourceType": "AWS::SQS::Queue", "Timestamp": "2019-12-04T20:33:57.261Z", "PhysicalResourceId": "https://sqs.us-east-1.amazonaws.com/012345678910/StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2-Queue-6FNDEY4AUEPV", "StackResourceDriftStatus": "MODIFIED", "ExpectedProperties": "{\"DelaySeconds\":20,\"RedrivePolicy\":{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-1:012345678910:StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2e2-DLQ-1H0SQCOKALBDJ\",\"maxReceiveCount\":10},\"VisibilityTimeout\":60}", "PropertyDifferences": [ { "PropertyPath": "/DelaySeconds", "ActualValue": "10", "ExpectedValue": "20", "DifferenceType": "NOT_EQUAL" }, { "PropertyPath": "/RedrivePolicy/maxReceiveCount", "ActualValue": "20", "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
Abra o console do AWS CloudFormation em https://console.aws.amazon.com/cloudformation
. -
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.
-
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.
-
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