스택 및 리소스에 대한 비관리형 구성 변경 감지 - AWS CloudFormation

스택 및 리소스에 대한 비관리형 구성 변경 감지

CloudFormation을 통해 리소스를 관리하는 경우에도 사용자는 CloudFormation 외부의 리소스를 변경할 수 있습니다. 사용자는 리소스를 생성하는 기본 서비스를 사용하여 리소스를 직접 편집할 수 있습니다. 예를 들어 Amazon EC2 콘솔을 사용하여 CloudFormation 스택의 일부로 생성된 서버 인스턴스를 업데이트할 수 있습니다. 일부 변경 사항은 실수일 수 있으며, 일부는 시간에 민감한 작업 이벤트에 의도적으로 응답하는 것일 수 있습니다. 그와 무관하게 CloudFormation 외부에서의 변경 사항은 스택 업데이트 또는 삭제 작업을 복잡하게 만들 수 있습니다. 드리프트 감지를 사용하여 구성 변경이 CloudFormation 관리 외부에서 이루어진 스택 리소스를 식별할 수 있습니다. 교정 작업을 수행하여 스택 리소스가 스택 템플릿의 정의와 동기화될 수 있습니다. 예를 들어 드리프트된 리소스를 직접 업데이트하여 템플릿 정의가 일치할 수 있습니다. 드리프트 확인은 구성 일관성과 성공적인 스택 작업에 도움이 됩니다.

드리프트란 무엇인가요?

드리프트 감지 기능을 사용하면 스택의 실제 구성이 예상 구성과 다르거나 드리프트했는지 여부를 감지할 수 있습니다. CloudFormation을 사용하여 전체 스택 또는 스택 내 개별 리소스의 드리프트를 감지합니다. 리소스는 실제 속성 값이 예상 속성 값과 다를 경우 드리프트된 것으로 간주됩니다. 여기에는 속성 또는 리소스가 삭제된 경우가 포함됩니다. 스택은 하나 이상의 리소스가 드리프트된 경우 드리프트된 것으로 간주됩니다.

리소스가 드리프트되었는지 확인하려면 CloudFormation에서 템플릿 파라미터로 지정된 스택 템플릿 및 모든 값에서 정의된 예상 속성 값을 확인합니다. 그런 다음 CloudFormation은 이러한 예상 값을 스택에 현재 존재하는 리소스 속성의 실제 값과 비교합니다. 리소스는 하나 이상의 속성이 삭제되었거나 값이 변경된 경우 드리프트된 것으로 간주됩니다.

CloudFormation은 드리프트된 스택의 각 리소스에서 세부 정보를 생성합니다.

CloudFormation에서 드리프트 감지를 지원하는 AWS 리소스의 드리프트를 감지합니다. 드리프트 감지를 지원하지 않는 리소스는 드리프트 상태가 NOT_CHECKED로 할당됩니다. 드리프트 감지를 지원하는 AWS 리소스 목록은 리소스 유형 지원 섹션을 참조하세요.

또한 CloudFormation에서는 프로비저닝 가능한 프라이빗 리소스 유형, 즉 프로비저닝 유형이 FULLY_MUTABLE 또는 IMMUTABLE인 프라이빗 리소스 유형에 대한 드리프트 감지를 지원합니다. 프라이빗 리소스 유형의 리소스에 대한 드리프트 감지를 수행하려면 계정에 등록한 리소스 유형의 기본 버전이 프로비저닝 가능해야 합니다. 리소스 프로비저닝 유형에 대한 자세한 내용은 AWS CloudFormation API 참조의 DescribeType 작업 및 AWS CLI 명령 참조의 DescribeType 명령의 ProvisioningType 파라미터를 참조하세요. 프라이빗 리소스에 대한 자세한 내용은 CloudFormation 레지스트리를 통해 익스텐션 관리 섹션을 참조하세요.

상태가 CREATE_COMPLETE, UPDATE_COMPLETE, UPDATE_ROLLBACK_COMPLETEUPDATE_ROLLBACK_FAILED인 스택에서 드리프트 감지를 수행할 수 있습니다.

스택의 드리프트를 감지할 때 CloudFormation에서 해당 스택에 속하는 중첩 스택의 드리프트를 감지하지 않습니다. 자세한 내용은 중첩 스택 작업 단원을 참조하십시오. 대신 중첩 스택에서 직접 드리프트 감지 작업을 개시할 수 있습니다.

참고

CloudFormation에서 스택 템플릿을 통해 또는 템플릿 파라미터 지정을 통해 명시적으로 설정된 속성 값에 대한 드리프트만을 감지합니다. 여기에는 리소스 속성에 대한 기본값이 포함되지 않습니다. CloudFormation에서 드리프트 확인을 목적으로 리소스 속성을 추적하도록 하려면 기본값으로 설정하는 경우에도 속성 값을 명시적으로 설정합니다.

드리프트 감지 상태 코드

이 단원의 표에서는 드리프트 감지에 사용되는 다양한 상태 유형을 설명합니다.

  • 드리프트 감지 작업 상태는 드리프트 작업의 현재 상태를 설명합니다.

  • 드리프트 상태

    스택 세트의 경우, 스택 세트에 속하는 스택 인스턴스의 드리프트 상태를 기준으로 스택 세트의 드리프트 상태를 전체적으로 설명합니다.

    스택 인스턴스의 경우, 연결된 스택의 드리프트 상태를 기준으로 스택 인스턴스의 드리프트 상태를 설명합니다.

    스택의 경우, 리소스의 드리프트 상태를 기준으로 스택의 드리프트 상태를 전체적으로 설명합니다.

  • 리소스 드리프트 상태는 개별 리소스의 드리프트 상태를 설명합니다.

다음 표에서는 CloudFormation에서 스택 드리프트 감지 작업에 할당하는 상태 코드를 나열합니다.

드리프트 감지 작업 상태 설명

DETECTION_COMPLETE

드리프트 감지를 지원하는 스택의 모든 리소스에 대해 스택 드리프트 감지 작업이 완료되었습니다.

DETECTION_FAILED

스택에 있는 하나 이상의 리소스에 대해 스택 드리프트 감지 작업이 실패했습니다. 결과는 CloudFormation에서 드리프트 감지가 완료된 리소스에 대해 제공됩니다.

DETECTION_IN_PROGRESS

스택 드리프트 감지 작업이 현재 진행되고 있습니다.

다음 표에서는 CloudFormation에서 스택에 할당하는 드리프트 상태 코드를 나열합니다.

드리프트 상태 설명

DRIFTED

스택의 경우: 스택이 예상 템플릿 구성과 다르거나 드리프트되었습니다. 스택은 하나 이상의 리소스가 드리프트된 경우 드리프트된 것으로 간주됩니다.

스택 인스턴스의 경우: 스택 인스턴스는 연결된 스택이 드리프트되면 드리프트된 것으로 간주됩니다.

스택 세트의 경우: 하나 이상의 스택 인스턴스가 드리프트되면 스택 세트가 드리프트된 것으로 간주됩니다.

NOT_CHECKED

CloudFormation에서는 스택, 스택 세트 또는 스택 인스턴스가 예상 템플릿 구성과 다른지 여부를 확인하지 않았습니다.

IN_SYNC

각 지원되는 리소스의 현재 구성이 예상 템플릿 구성과 일치합니다. 드리프트 감지를 지원하는 리소스가 없는 스택, 스택 세트 또는 스택 인스턴스도 IN_SYNC 상태가 됩니다.

다음 표에서는 CloudFormation에서 스택 리소스에 할당하는 드리프트 상태 코드를 나열합니다.

리소스 드리프트 상태 설명

DELETED

리소스가 삭제되었기 때문에 리소스가 예상 템플릿 구성과 다릅니다.

MODIFIED

리소스가 예상 템플릿 구성과 다릅니다.

NOT_CHECKED

CloudFormation에서 리소스가 예상 템플릿 구성과 다른지 여부를 확인하지 않았습니다.

IN_SYNC

리소스의 현재 구성이 예상 템플릿 구성과 일치합니다.

다음 표에서는 CloudFormation에서 예상 템플릿 구성과 다른 리소스 속성에 할당하는 차이 유형 상태 코드를 나열합니다.

속성 차이 유형 설명

ADD

값이 배열 또는 목록 데이터 유형인 리소스 속성에 추가되었습니다.

REMOVE

속성이 현재 리소스 구성에서 제거되었습니다.

NOT_EQUAL

현재 속성 값이 스택 템플릿에서 정의된 예상 값과 다릅니다.

드리프트 감지 시 고려 사항

스택의 드리프트 감지를 수행하려면 사용자가 다음 권한을 보유해야 합니다.

  • 스택에 포함된 드리프트 감지를 지원하는 각 리소스에 대한 읽기 권한. 예를 들어 스택에 AWS::EC2::Instance 리소스가 포함된 경우 ec2:DescribeInstances 권한을 보유하고 스택에서 드리프트 감지를 수행해야 합니다.

  • cloudformation:DetectStackDrift

  • cloudformation:DetectStackResourceDrift

  • cloudformation:BatchDescribeTypeConfigurations

CloudFormation에 권한을 설정하는 방법에 대한 자세한 내용은 AWS Identity and Access Management을 통한 액세스 제어 섹션을 참조하세요.

특정 엣지 케이스에서 CloudFormation은 정확한 드리프트 결과를 항상 반환할 수는 없습니다. 드리프트 감지 결과를 적절하게 해석하려면 이러한 엣지 케이스를 인식해야 합니다.

  • 실제로 리소스에 대한 책임이 있는 기본 서비스로부터 속성에 공급되는 기본값인 경우 특정 케이스에서 속성 어레이에 포함된 객체는 드리프트로 보고됩니다.

  • 특정 리소스에는 관련 리소스와 연결 관계가 있습니다. 이를 통해 리소스에서 동일하거나 다른 템플릿에 정의된 또 다른 리소스에 대한 속성 값을 연결 또는 제거할 수 있습니다. 예를 들어 AWS::EC2::SecurityGroupIngressAWS::EC2::SecurityGroupEgress 리소스는 AWS::EC2::SecurityGroup 리소스에서 값을 연결 또는 제거하는 데 사용될 수 있습니다. 이러한 경우 CloudFormation에서 드리프트 비교 수행 전에 스택 템플릿을 분석합니다. 하지만 CloudFormation에서 스택에 걸쳐 이 분석을 수행할 수 없고, 정확한 드리프트 결과를 반환할 수 없습니다. 이 경우 연결된 리소스는 다른 스택에 위치합니다.

    드리프트 감지를 지원하고 다른 리소스로부터의 연결을 허용 또는 필요로 하는 리소스는 다음과 같습니다.

    리소스 유형 연결 리소스 유형

    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에서는 모든 리소스의 KMSKeyId 속성에 대해 드리프트 감지를 수행하지 않습니다. 여러 별칭에서 AWS KMS 키를 참조할 수 있기 때문에 CloudFormation에서 이 속성에 대한 정확한 드리프트 결과를 일관적으로 보장할 수 없습니다.

  • 특성에 따라 스택 템플릿에서 지정할 수 있는 특정 리소스 속성이 있습니다. CloudFormation에서는 결과로 나온 스택 리소스의 속성을 비교할 수 없습니다. 따라서 이러한 속성은 드리프트 감지 결과에 포함될 수 없습니다. 이러한 속성은 두 가지 넓은 범주로 나뉩니다.

    • CloudFormation에서 스택 템플릿의 최초 리소스 속성 값으로 매핑할 수 없는 속성 값입니다.

      예를 들어 CloudFormation에서 Lambda 함수의 소스 코드를 AWS::Lambda::Function 리소스의 Code 속성 유형으로 매핑할 수 없으므로 CloudFormation에서 이를 드리프트 감지 결과에 포함할 수 없습니다.

    • 리소스에 대해 책임이 있는 서비스에서 반환하지 않는 속성 값입니다.

      설계 면에서 리소스가 속하는 서비스에 의해 반환되지 않는 특정 속성 값이 있습니다. 암호 또는 노출되어서는 안 되는 기타 민감한 데이터와 같은 기밀 정보가 포함되는 경우가 있습니다. 예를 들어, IAM 서비스에서 IAM User LoginProfile 속성 유형의 Password 속성 값을 반환하지 않으며, 따라서 CloudFormation은 드리프트 감지 결과에 포함될 수 없습니다.

    • 어레이에 있는 객체는 실제로 서비스 기본값이 될 수 있지만 수동으로 추가된 드리프트는 아닙니다.

  • 오탐지가 발생하는 경우 CloudFormation 콘솔의 피드백 링크를 사용하여 의견을 보내거나 AWS re:Post을 통해 문의하세요.

  • 일부 속성에는 같지만 동일하지는 않은 입력 값이 있을 수 있습니다. 오탐지를 방지하려면 예상 구성이 실제 구성과 일치하는지 확인해야 합니다.

    • 예를 들어, 리소스 속성의 예상 구성은 1024MB이고 동일한 리소스 속성의 실제 구성은 1GB일 수 있습니다. 1024MB와 1GB는 같지만 동일하지는 않습니다.

      이 리소스 속성에서 드리프트 감지를 실행하면 드리프트된 결과를 알립니다.

      이러한 오탐지를 방지하려면 리소스 속성의 예상 구성을 1024MB로 변경한 다음 드리프트 감지를 실행하세요.