본문 바로가기
SK shieldus Rookies 16기

[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(29일차)

by Challenge programmers 2023. 12. 4.

오늘 학습 주제

1. 모니터링

2. AWS CloudFormation

 

 

 

 

 

모니터링


- Amazon SNS(Simple Notification Service) -

Amazon SNS
정의 게시자(생산자)에서 구독자(소비자)로 메시지를 전송하는 관리형 서비스
게시자는 논리적 액세스 지점 및 커뮤니케이션 채널인 주제(topic)에 메시지를 전송하여
구독자와 비동기식으로 통신

특징
  1. 토픽 (Topic): 토픽은 메시지를 발행하고 구독하는 데 사용되는 주제를 나타내며,
    토픽을 생성하면 해당 토픽에 대해 관심을 가진 클라이언트(구독자)들이 메시지 수신 가능

  2. 메시지 발행 (Publish): 특정 토픽으로 메시지를 보내는 작업을 의미하며 발행된 메시지는
    해당 토픽을 구독하는 모든 클라이언트에게 전달

  3. 구독 (Subscription): 특정 토픽에서 발생하는 이벤트에 대한 알림을 받기 위한 것으로
    특정 프로토콜을 사용하여 구독을 설정하면 해당 프로토콜을 지원하는 여러 종류의 클라이언트에게
    메시지를 전송

  4. 프로토콜 지원: Amazon SNS는 여러 가지 프로토콜을 지원하며 이메일, SMS, HTTP/HTTPS,
    Amazon Simple Queue Service (SQS), AWS Lambda 등 다양한 방법을 통해 메시지를 전송 가능 

  5. 필터 정책 (Filter Policies): 필터 정책을 사용하여 특정 메시지만을 받기를 원하는 구독자들을 설정 가능
    이를 통해 메시지의 특정 속성에 따라 특정 클라이언트에게만 메시지를 전송 가능

 

 

- Amazon CloudWatch - 

Amazon CloudWatch
정의 AWS 리소스 및 AWS에서 실행되는 애플리케이션을 실시간으로 모니터링하는 도구로
리소스 및 애플리케이션에 대해 측정할 수 있는 변수인 지표를 수집하고 추적

특징
  1. 지표 (Metrics):  AWS 서비스에서 수집한 지표를 제공하며, 이러한 지표는 리소스의 성능 및 상태에 대한
    측정값으로 EC2 인스턴스의 CPU 사용률, Amazon S3 버킷의 저장용량 등이 존재

  2. 대시보드 (Dashboards): 사용자는 대시보드를 통해 여러 지표 및 리소스의 상태를 한눈에 확인가능하며
    사용자 지정 대시보드를 생성하여 필요한 정보를 구성하고 시각적으로 모니터링 가능

  3. 알람 (Alarms): 사용자는 특정 지표에 대한 임계값을 설정하고, 이를 초과하는 경우 알람을 생성 가능
    알람을 통해 사용자는 예외 상황에 대한 경고를 받고, 대응 조치 가능

  4. 로그 (Logs): 애플리케이션 및 리소스의 로그 데이터를 수집하고 검색 가능
    이를 통해 로그 데이터를 분석하고 문제를 진단하는 데 도움

  5. 이벤트 (Events): AWS 리소스 간의 이벤트를 감지하고, 이를 기반으로 자동화된 작업을 수행할 수 있도록 동작
    예를 들어, EC2 인스턴스의 상태가 변경되었을 때 특정 Lambda 함수를 실행하는 등의 작업을 설정 가능

  6. 로그 인사이트 (Log Insights): 로그 데이터에서 패턴을 신속하게 찾고 쿼리 가능

 

 

- 오토 스케일링(Auto Scaling) -

오토 스케일링
정의 자동으로 컴퓨팅 리소스를 조절하여 애플리케이션의 성능을 유지하고 비용을 최적화하는 서비스
특징
  1. 그룹 (Auto Scaling Group): 인스턴스의 집합으로, 이 그룹 내의 인스턴스 수를 동적으로 확장 또는 축소하며
    그룹은 시작 구성(시작 AMI, 인스턴스 유형 등)과 스케일링 정책(확장 및 축소 규칙)을 포함

  2. 확장 규칙 (Scaling Out Policy): 사용자가 지정한 규칙에 따라 인스턴스의 수를 늘리기 가능
    예를 들어, CPU 사용률이 특정 임계값을 초과하면 새로운 인스턴스를 시작하여 부하를 분산

  3. 축소 규칙 (Scaling In Policy): 사용자가 지정한 규칙에 따라 인스턴스의 수를 줄이기 가능
    예를 들어, CPU 사용률이 낮아지면 일부 인스턴스를 종료하여 비용을 절감

  4. 클라우드워치 (CloudWatch) 통합: Amazon CloudWatch와 통합하여 모니터링 지표를 기반으로
    스케일링 결정. 예를 들어, CPU 사용률, 네트워크 트래픽 등을 모니터링하여 자동으로 스케일링을 조절

  5. 예약 인스턴스 및 온디맨드 인스턴스 혼용: 그룹 내에서 예약된 인스턴스와 온디맨드 인스턴스를 혼합하여
    사용가능하며 이를 통해 비용을 절감하면서도 신뢰성을 유지

  6. 생명 주기 후크 (Lifecycle Hooks): 인스턴스의 시작 또는 종료 시에 특정 작업을 수행하도록 정의할 수 있는
    생명 주기 후크를 사용 가능하며 이를 활용하여 초기화 작업이나 종료 전 작업을 수행

 

 

 

 

 

AWS CloudFormation


- AWS CloudFormation -

AWS CloudFormation
정의 AWS 리소스를 모델링하고 설정하여 리소스 관리 시간을 줄이고
AWS에서 실행되는 애플리케이션에 더 많은 시간을 사용하도록 해 주는 서비스
특징
  • 필요한 모든 AWS 리소스를 설명하는 템플릿을 생성하면 CloudFormation이 해당 리소스의 프로비저닝과
    구성을 담당

  • 클라우드 환경 내 모든 인프라 리소스를 설명하고 프로비저닝할 수 있도록 공통 언어(JSON, YAML)를 통해
    코드 기반 인프라를 구성하고 프로비저닝할 수 있음

  • AWS Cloudformation에는 추가 요금이 없으며 애플리케이션 실행에 필요한 AWS 리소스에 대해서만
    요금을 지불하면 됨

  • 인프라 관리 간소화: 
    • Cloudformation 템플릿을 사용하여 스택(stack)을 생성하면 Cloudformation에서 Auto Scaling 그룹,
      로드 밸런서 및 데이터베이스를 자동으로 프로비저닝함
    • 스택 생성 후 AWS 리소스가 실행되면 필요 시 손쉽게 스택을 통해 리소스를 수정, 삭제할 수 있음
    • AWS의 리소스를 스택 단위로 손쉽게 관리할 수 있음
  • 신속하게 인프라를 복제
    • 애플리케이션의 가용성을 높이기 위해 AWS Cloudformation을 이용하여 여러 리전에 복제
    • 기존 템플릿을 재사용하여 리소스를 일관되고 반복적으로 설정할 수 있음
  • 인프라 변경 사항을 쉽게 제어, 추적할 수 있음
    • 인프라의 프로비저닝을 위한 리소스와 해당 설정이 템플릿에 저장
    • 템플릿은 텍스트 형태로 저장되며, 버전 관리 기능을 통해 이전과의 차이점을 추적하여
      인프라 변경 사항을 추적할 수 있음
    • 인프라의 프로비저닝 중 문제가 발생된다면 언제든지 인프라에 대한 변경 사항을 되돌리기 위해
      이전 버전의 템플릿을 사용할 수 있음

 

 

- 작동 방식 -

작동 방식
정의 인프라의 생성, 수정, 삭제는 모두 템플릿을 통해 수행됨
특징
  1. YAML 또는 JSON 포맷으로 Cloudformation 템플릿을 작성하거나, 샘플 템플릿을 사용하여 인프라를 코드로 작성

  2. 로컬의 템플릿 코드를 체크아웃 하거나, S3 버킷에 템플릿 업로드

  3. AWS 콘솔, 명령줄 도구(CLI) 또는 API를 통해 AWS Cloudformation을 사용하여 템플릿 코드를 기반으로
    스택(stack)을 생성

  4. 템플릿에 지정된 스택(stack)을 통해 AWS 리소스에 대한 프로비저닝 및 구성 작업
    (스택 생성에 실패하면 AWS Cloudformation에서는 생성한 리소스를 삭제하여 변경 사항을 롤백함)

 

 

- 구성 요소-

구성 요소
정의 AWS CloudFormation을 사용하는 경우에는 템플릿 및 스택으로 작업하며
템플릿을 생성하여 AWS 리소스와 해당 속성에 대해 설명하고
스택을 생성할 때마다 CloudFormation에서 템플릿에 설명된 리소스를 프로비저닝
특징
  • 템플릿
    • JSON 또는 YAML 형식의 텍스트 파일
    • 스택에서 프로비저닝할 리소스를 설명
    • Cloudformation Designer 또는 텍스트 편집기를 사용해 생성 가능
  • Stack
    • 하나의 단위로 관리할 수 있는 AWS 리소스 모음
    • 스택의 생성, 수정, 삭제를 통해 리소스 모음의 생성, 수정, 삭제 가능
    • 스택의 모든 리소스는 Cloudformation 템플릿을 통해 정의됨
    • 스택을 삭제하면 관련 리소스가 모두 삭제됨
  • 변경 세트
    • 리소스를 변경하기 전에 제안된 변경 사항의 요약
    • 변경 사항을 구현하기 이전에 해당 변경이 실행 중인 리소스
      특히, 중요 리소스에 미치는 영향을 확인할 수 있음

 

 

- 템플릿 섹션 -

템플릿 섹션
특징
  • 포맷 버전(선택 사항) 템플릿이 따르는 AWS CloudFormation 템플릿 버전.
    템플릿 포맷 버전은 API 또는 WSDL 버전과 같지 않으며 템플릿 포맷 버전은
    API 및 WSDL 버전과 상관없이 변경 가능

  • Description(선택 사항) 템플릿을 설명하는 텍스트 문자열로 항상 템플릿 포맷 버전 섹션 다음에 이어져야 함

  • Metadata(선택 사항) 템플릿에 대한 추가 정보를 제공하는 객체

  • Parameters(선택 사항) (스택을 생성하거나 업데이트할 때) 실행 시간에 템플릿에 전달하는 값으로
    템플릿의 Resources  Outputs 섹션에서 파라미터를 참조 가능 

  • 규칙(선택 사항) 스택을 생성하거나 업데이트할 때 템플릿에 전달된 파라미터 또는 파라미터의 조합을 검증

  • Mappings(선택 사항) 조건부 파라미터 값을 지정하는 데 사용할 수 있는 키와 관련 값의 매핑으로,
    조회 테이블과 비슷하며 Resources  Outputs 섹션의 Fn::FindInMap 내장 함수를 사용하여
    키를 해당 값으로 매핑가능

  • Conditions(선택 사항) 스택 생성 또는 업데이트 시 특정 리소스 속성에 값이 할당되는지
    또는 특정 리소스가 생성되는지 여부를 제어하는 조건으로, 예를 들면 스택이 프로덕션용인지
    테스트 환경용인지에 따라 달라지는 리소스를 조건부로 생성 가능

  • Transform(선택 사항) 서버리스 애플리케이션(Lambda 기반 애플리케이션이라고도 함)의 경우
    사용할 AWS Serverless Application Model(AWS SAM)의 버전을 지정
    변환을 지정할 경우 AWS SAM 구문을 사용하여 템플릿에 리소스를 선언가능하며 이 모델은
    사용할 수 있는 구문과 처리 방식을 정의

    또한 AWS::Include 변환을 사용하여 기본 AWS CloudFormation 템플릿과는 별도로 저장되는
    템플릿 코드 조각으로 작업 가능
    Amazon S3 버킷에 코드 조각 파일을 저장한 다음 여러 템플릿 간에 함수를 재사용 가능

  • Resources(필수) Amazon Elastic Compute Cloud 인스턴스 또는 Amazon Simple Storage Service 버킷 같은
    스택 리소스 및 해당 속성을 지정하며 템플릿의 Resources  Outputs 섹션에서 리소스를 참조 가능

  • Outputs(선택 사항) 스택의 속성을 볼 때마다 반환되는 값을 설명하며,
    예를 들면 S3 버킷 이름 출력을 선언하고 나서 aws cloudformation describe-stacks AWS CLI 명령을
    호출하여 해당 이름을 볼 수 있음

 

 

- 헬퍼 스크립트 -

헬퍼 스크립트
정의 CloudFormation으로 생성한 EC2 인스턴스에 소프트웨어를 설치하고 서비스를 시작하는데
사용할 수 있도록 제공하는 Python 스크립트
특징
  • aws-cfn-bootstrap:
    • AWS에서 제공하는 유틸리티 패키지로, EC2 인스턴스를 프로비저닝하고 초기화하기 위한 도구
    • cfn-init
      • EC2 인스턴스의 초기 설정을 관리
      • 리소스 메타데이터를 검색 및 해석하고, 패키지를 설치하고, 파일을 생성하고,
        서비스를 시작하는데 사용
    • cfn-signal
      • EC2 인스턴스가 성공적으로 초기화되었음을 CloudFormation 스택에 알림
      • 필수 리소스나 애플리케이션이 준비될 때 스택에서 다른 리소스를 동기화할 수 있도록
        CreationPolicy 또는 WaitCondition에서 신호를 전송하는데 사용
    • cfn-get-metadata
      • EC2 인스턴스의 CloudFormation 스택 메타데이터를 검색하는 데 사용
      • 스택에서 사용 가능한 메타데이터를 검색할 때 유용하며, 다른 명령에 전달해 활용할 수 있음
    • cfn-hup
      • EC2 인스턴스에서 실행되며, 주기적으로 CloudFormation 스택의 변경 사항을 감지하고
        업데이트된 메타데이터를 검색하여 인스턴스를 업데이트
      • 변경 사항을 실시간으로 반영하려는 스택에서 사용
  • AWS::CloudFormation::Init
    • CloudFormation 템플릿에서 사용되는 리소스 유형 중 하나
    • cfn-init 헬퍼 스크립트에 대하나 구성 작업을 정의
    • EC2 인스턴스를 생성할 때 초기 설정, 패키지 설치, 파일 다운로드, 명령 실행 및 다른 구성 단계를
      선언적으로 정의
  • Fn::FindInMap 내장 함수
    • Fn::FindInMap 내장 함수는 매핑 섹션에서 선언된 2수준 맵의 키에 해당하는 값을 반환
    • { "Fn::FindInMap" : [ "MapName", "TopLevelKey", "SecondLevelKey"] }
      • MapName: 키 및 값이 포함된 매핑 섹션에서 선언된 매핑의 논리적 이름
      • TopLevelKey: 최상위 키 이름입니다. 이 값은 키-값 페어 목록
      • SecondLevelKey: TopLevelKey에 할당된 목록의 키 중 하나로 설정된 두 번째 수준 키 이름
    •  

 

 

- 내장 함수 -

내장 함수
정의 템플릿에서 값을 동적으로 생성하거나 처리하기 위한 여러 내장 함수를 제공하여 
템플릿을 더 유연하게 만들어 리소스 간에 의존성을 관리하거나,
조건적으로 리소스를 생성하고 업데이트하는데 사용
특징
  • Ref 내장 함수
    • 지정된 파라미터 또는 리소스에 대한 정보를 반환
  • Fn::Select
    • 내장 함수 FN::Select는 인덱스별 객체 모곡에서 객체 하나를 반환
    • 짧은 형식 ⇒ !Select [ index, listOfObjects ]
  • Fn::GetAZs
    • Fn::GetAZs 내장 함순느 지정된 리전의 가용 영역을 알파벳순으로 나열하는 어레이를 반환
    • 짧은 형식 ⇒ !GetAZs 리전 (빈 문자열을 지정하려면 AWS::Region을 지정하는 것과 같음)
  • Fn::GetAtt
    • Fn::GetAtt 내장 함수는 템플릿의 리소스에서 속성 값을 변환