[AWS] Elastic beanstalk 1

BBeumSeok·2024년 8월 20일
0

aws

목록 보기
1/4
post-thumbnail

AWS 보안 강화

  1. 보안 그룹 설정
  • AWS에서는 여러가지 보안 구조를 가지고 있는데 그 중에 처음이 바로 보안 그룹이다.

  • 보안 그룹은 EC2를 비롯한 각 리소스에 설정하는 가상 방화벽과 같은 개념이다

  • 보안 그룹에는 허용할 트래픽을 등록하고, 그 내용을 인스턴스에 적용하는 것이다.

  • 하나의 룰에는 "Procotocol"과 "Source"를 인바운드/아웃바운드 별로 지정하여
    허용할 트래픽을 설정한다.

  1. EBS 암호화(**)
  • 볼륨 암호화는 cryptsetup 명령어나 서드파티(third party)도구 등 여러가지 방법이 있지만,
    EBS에는 볼륨을 암호화하는 옵션이 준비되어 있다.

  • EBS 암호화 기능에는 사용자의 키 관리나 암호화/복호화를 신경쓰지 않아도 된다.

  • EBS를 암호화 하려면 EBS Volumes 메뉴에서 Create Volume을 클릭하고, 볼륨 생성 메뉴에서
    Encrypt this Volume을 선택하면 된다.
    이렇게 생성된 암호화된 EBS 볼륨에서 생성된 스냅샷이나 그 스냅샷으로 복원된 볼륨은 똑같이 암호화 된다.

  • EBS 암호화를 사용할 수 있는 인스턴스 타입은 AWS 문서를 참고하자
    https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/EBSEncryption.html

IAM

  • AWS에서 사용자와 인증 정보, 리소스 액세스 제어 등을 관리하기 위한
    IAM(Identity and Access Management) 서비스

VPC(Virtual Private Cloud)

  • AWS 내부에 정의할 수 있는 가상 네트워크

  • VPC를 이용하면 네트워크 게이트웨이나 서브넷, VPN, 라우팅 제어 등 보다 상세한 네트워크
    레벨의 보안 설정이 가능하다.

CloudHSM

  • AWS에서는 CloudHSM(Cloud Hardware Security Module)이라는 서비스가 존재한다.

  • 전용 하드웨어 기업과 법률적으로 컴플라이언스 요건을 만족하는 데이터 보안

서드 파티 보안 도구

  • AWS 이외에 벤더 제품도 AWS 안에서 그대로 사용할 수 있다.

  • AWS에서 사용할 수 있게 AWS 환경에서 최적화된 보안용 제품을 제공한다.

- 안티 바이러스
인스턴스 OS에 바이러스 감염을 방지. Trend Micro Server Portect 등 제품


- IDS/IPS
DMZ나 사내 시스템에 대한 네트워크 패킷 감시 등을 하고 부정침입을 확인하여 차단하는 시스템
웹 서버 등에 직접 설치하는 타입과 전용 인스턴스를 가지고 네트워크를 감시하는 타입이 존재
DoS 공격, Syn Flooding 공격 등을 방지.

Trend Micro Deep Security, Snort, Imperva, SecureSphere, CheckPoint Virtual Application 제품.


- WAF(Web Application Firewall)
AWS 기능으로 할 수 없는 애플리케이션 레이어에서 통신을 감시하고, 부정 공격을 감지/방어하는
시스템.
노출되어 있는 웹 서버 등에 대한 SQL 인젝션이나 XSS, OS 명령어 인젝션 등을 방지.
Barracuda WAF, F5 BIG-IP ASM, Imperva SecureSphere WAF, SiteGuard 등의 제품.
(2015년 말에 AWS WAF 서비스가 출시되어  CloudFront와 연동하여 사용이 가능)


- UTM
방화벽, 안티 바이러스, IDS/IPS, WAF 등 기능을 하나의 상품으로 통합한 보안 시스템.
(Sophos UTM, FortiGate 등 제품)

=> 이런 제품들이 AWS에서 사용할 수 있게 최적화된 제품에는 아마존 마켓 플레이스에서
AMI 형태로 판매되는 제품도 있다.

Route53 개요

웹 사이트와 웹 시스템을 구축할 때에 외부에 그 사이트를 공개한다.
이때 공개 시에 공개용 IP를 할당하여 사용하고, 이를 외부에서 접속하게 만들어준다.

IP 숫자는 기억하기 어렵고, 문자는 기억하기 쉽다는 특징을 이용한 서비스가 DNS이다.
때문에 DNS 서비스를 통해서 외부 웹사이트에 쉽게 접속할 수 있다.

AWS의 Route53은 이런 웹 기반 DNS 서비스를 의미한다.

  • Route53은 EC2와 같이 리전 별로 제공되는 서비스가 아닌 전세계에 설치되어 있는 Edge Location 기반으로 제공되는 서비스이다.

  • Anycast IP 주소 구조를 이용하여 전 세계의 Edge Location 중 가장 가까운 로케이션에서
    응답을 주게 되어있어 아주 빠르고, 가용성이 높으며 확장성이 뛰어난 구조를 가지고 있다.

  • Route53도 다른 서비스와 마찬가지로 API로 조작이 가능하다. (AWS CLI)

  • BIND의 경우 nsupdate 명령어를 위해 손이 많이 가는 설정을 해야하거나 MyDNS처럼 백엔드에
    RDBMS(Relational DataBase Management System)를 가진 DNS 서버로 관리해야 하는
    불편함이 있었다.

  • Route53은 이 설정들을 API로 할 수 있어 초기 비용이나 운용 비용을 고려해도 매우 좋은
    서비스라고 할 수 있다.
    기존 DNS 서버 운용에서 패치 등의 작업으로 어려움이 있는 경우에 추천할 서비스이다.

Route53 주요 개념

  1. Hosted Zone
    Hosted Zone은 다른 DNS 시스템에 있는 Zone파일과 같이 관리되는 DNS 레코드의 집합이다.
DNS 레코드란?
DNS 질의에 응답을 위해서 알고있는 정보를 저장한 데이터를 말한다.
(A, AAAA, MX, NS, SRV, CNAME, ...)

  1. Record Set
    DNS 레코드로 Routing Policy와 Set ID, Health Check 설정과 Record를 전부 포함한다.

  2. Routing Policy
    Route53이 Record Set에 대해서 어떻게 라우팅할지 결정하는 것.
    일반적으로 'Simple'이라는 정책을 이용하면 일반적인 DNS 서버와 같게 동작한다.
    'Weighted(가중치 기반)', 'Latency(지연 시간 기반 라우팅)', 'Failover(DNS Failover),
    'Geolocation(Geo Routing)'

  3. Set ID
    Routing Policy를 이용해 복수의 Record Set을 같은 이름으로 설정한 경우, 각각을 구별하여
    인식하기 위해서 설정하는 ID

  4. Health Check
    호스트 상태를 확인하기 위한 설정
    DNS Failover를 사용하는 경우 Health Check가 필요하다.
    (HTTP/HTTPS/TCP)

Route53 주요 기능

  • Route53이 제공하는 것은 IP 주소와 도메인명 매핑 등을 관리하는 데이터베이스로서의 역할인
    '권한 네임 서버' 기능이다.

  • 권한 네임 서버에 들어오는 질의 결과를 캐시하는 기능인 '캐시 네임 서버'로의 기능은 제공하지
    않는다.

  • BIND에서는 설정에 따라서 두 기능을 모두 제공하지만, Route53은 권한 네임 서버 기능만
    있다는 것을 기억하자.

  • Route53은 권한 네임 서버로의 기능 뿐만 아니라 웹 사이트나 웹 시스템을 서비스로 제공할 때에 편리한 기능을 가지고 있다.
    DNS 레지스트리 기능도 제공하고 있어 '.com'이나 '.jp' 등 구매할 수 있는 도메인이라면
    Route53으로 등록이 가능하다.
    또, 다른 DNS 레지스트리에서 도메인을 이관(transfer)하는 것도 가능하여 도메인에 관한
    모든 것을 Route53에서 집중 관리할 수 있다.

1. 지연 시간 기반 라우팅(LBR; Latency Based Routing)

  • Record Set의 Routing Policy를 'Latency'로 설정
    같은 이름으로 된 여러 리전에 존재하는 EC2 인스턴스 공인 IP 주소나 ELB에 대해 보다 빠른
    리전을 선택하여 요청을 라우팅 해주는 기능.
    복잡한 설정은 없고, Route53만으로 전 세계의 어떤 사용자에게도 가장 빠른 응답이 가능하다.

2. 가중치 라운드 로빈(WRR; Weighted Round Robin)

  • Record set의 Routing Policy를 'Weighted'로 설정
    지연 시간 기반 라우팅에서는 같은 이름이 설정된 대상에 대해서 Route53이 지연 시간에 따라
    분배하는데, 가중치 라운드 로빈에서는 대상의 가중치를 두어 총 합계에서 지정한 가중치의 시간
    비율로 전송 비율을 결정.
    가중치를 0으로 하면 라우팅이 되지 않는다.
    웹 사이트의 이전 작업 등에서 천천히 사이트를 이전하고 싶은 경우 사용할 수 있다.

=> DB 접속이 필요한 경우에는 별도의 데이터 동기 방법도 검토해야 한다.

3.DNS Failover

  • Record Set의 Routing Policy를 'Failover'로 설정하며 구현
    Record Set을 설정할 때에 같은 이름으로 Primary와 Secondary 두 가지 세트를 생성하면
    평소에는 Primary로 라우팅이 되고, 이 때에 Primary 설정된 쪽에 Health Check에 문제가
    발생하면 Secondary로 라우팅한다.

=> 이 기능을 사용하면 서비스 중인 서버나 서버 군에 장애가 발생하더라도 Sorry 페이지를
제공할 수 있도록 별도로 준비한 서버로 라우팅을 간단히 만들 수 있다.

4. Geo Routing

  • Record Set의 Routing Policy를 'Geolocation'으로 설정하며 구현.
    지연 시간 기반 라우팅이 엔드포인트와 지연 시간을 줄이도록 라우팅해 주었다면, Geo Routing에선 DNS 질의가 있는 장소에 따라 대상을 바꿀 수 있다.

예를 들어 아시아에서의 요청이라면 서울 리전 EC2로 전송하고, 북아메리카에서 요청하면 버지니아
리전의 EC2로 전송하도록 설정할 수 있다.
지정한 장소와 맞지 않는 경우를 대비하여 기본 설정을 해두는 것이 좋다.

AWS 서비스와 연계

Route53은 DNS 서비스 자체만으로도 좋은 서비스이지만, S3나 CloudFront, ELB와 조합하여
사용하면 보다 편리한 이용이 가능하다.
이런 경우를 위해 사용하는 기능이 Route53 자체 레코드 타입인 ALIAS 레코드다.

- ALIAS Record

CNAME 레코드와 같이 별명으로 지정하면서도 A Record와 같은 직접 IP 주소와 매핑을 하는 것이다.
ALIAS Record가 지정할 수 있는 것은 AWS가 제공되는 서비스에 할당된 일부 DNS명에 대해서
가능하다.

지원하는 레코드 타입

  1. A(Address Record)
  • 호스트명과 IPv4의 IP 주소를 매핑

  1. AAAA(IPv5 Address Record)
  • 호스트명과 IPv6의 IP 주소를 매핑
    (AWS 서비스에서는 IPv6를 지원하는 것은 EC2-Classic ELB만 지원)

  1. CNAME(Cannonical Name Record)
  • 다른 DNS 별명을 설정한다.

  1. MX(Mail Exchange Record)
  • 메일 서버명 목록을 설정한다.

  1. NS(Name Server Record)
  • 도메인의 위임된 네임 서버(권한 네임서버)명을 설정

  • Route53에서는 Zone Apex의 NS레코드가 기본으로 설정되어 평소에는 변경할 필요가 없다.

  • 서브 도메인을 다른 계정이나 다른 Hosted Zone으로 관리하는 경우, 서브 도메인을 NS레코드로
    설정해야 한다.

  1. PTR(Pointer Record)
  • 주로 역질의(IP 주소를 DNS 명으로 매핑)를 한다.
    실제 IP 주소를 직접 지정하지 않는다.

  • aaa.bbb.ccc.ddd라면 ddd.ccc.bbb.aaa.in.addr.arpa.와 같은 형식으로 다른 DNS명으로
    별칭 지정한다.

  1. SOA(Start of Authority Record)
  • Zone에 관한 정보를 지정.
    Primary Name Server, 도메인 관리자의 이메일 주소, 시리얼 번호, 갱신 간격과 캐시 유효기간
    등을 지정한다.

  1. SPF(Sender Policy Framework Record)
  • IP 주소로 전자 메일의 송신 도메인 인증 기술인 SPF에 관해 기술한다.
    RFC4408에서는 SPF레코드 사용이 추천되지만, SPF레코드가 지원하는 DNS 서버와 resolver가
    존재하여 TXT레코드에서도 같은 내용을 지정하는 것이 좋다.

  1. SRV(Service Locator Record)
  • RFC2219에 기록되어 있는 서비스와 별칭 지원은 well known port 이외의 포트로 운영되는
    경우 포트 번호를 알 수 없다.

  • SRV레코드에서는 포트 번호 통지뿐 아니라 MX레코드처럼 부하 분산과 이중화 구성이 가능하다.

  • Active Directory에서는 이 SRV레코드가 이용된다.

  1. TXT(Text Record)
  • 텍스트 정보를 제공하기 위한 레코드.
    최근에는 SPF나 전자 서명을 이용한 송신 도메인 인증인 DKIM(DomainKeys Identified Mail)를 설정하기 위해 이용된다.

  • Route53에서는 255문자를 넘는 TXT레코드를 1 레코드로 기술하는 경우 주의가 필요하다.

GUI로 설정하기

  1. AWS Elastic beanstalk로 이동

  2. Application 생성

  • 애플리케이션 정보 : 애플리케이션의 이름을 입력

  • 환경 정보
    환경 이름 확인 또는 수정
    도메인을 사용하고 싶은 경우에 값을 입력한 후 "가용성 확인" 버튼으로 확인

  • 플랫폼
    배포 환경에 맞는 플랫폼 선택
    예제가 Tomcat인 관계로 해당 내용으로 플랫폼 설정

  • 애플리케이션 코드
    샘플 애플리케이션 선택
    만약 버전 및 다른 설정이 되어 있다면, 환경에 맞게 코드 사용

  • 사전 설정
    현 상황에 맞는 내용을 선택(현재는 단일 인스턴스)

  1. 네트워킹, 데이터베이스 및 태그 설정
> Virtual Private Cloud 설정
=> 기존 VPC 혹은 새롭게 생성

> 인스턴스 설정
	- 퍼블릭 IP 주소 : 활성화됨
    - 인스턴스 서브넷 : 전체 선택
    
> 데이터베이스
	-> 활성화 (사용할 경우)
    DB 설정 정보 입력

  1. 인스턴스 트래픽 및 크기 조정 구성
> 인스턴스
> 용량

  1. 업데이트, 모니터링 및 로깅 구성
> 모니터링
> 관리형 플랫폼 업데이트
> 이메일 알림
> 롤링 업데이트 및 배포
> 플랫폼 소프트웨어
	- Nginx 서버로 설정 - apache를 사용해도 된다.

=> 동작 확인 후 정상적인 배포가 끝나면 샘플 웹 페이지가 동작한다.

배포할 war파일의 설정을 확인

  • HealthTest를 위한 Controller를 설정
    => webroot로 접근 시 접속 확인을 통한 서버 동작 확인. 이를 위한 설정.
>> HealthController
package com.zerock.springex.controller;

import org.springframework.web.bind.annotation.*;

@RestController
public class HealthController {

  @GetMapping("/")  //GET방식일 때...
  public String health() {
      return "this server is running";
  }
}

=> 환경에서 "배포 업데이트" 버튼 클릭. 배포할 파일을 선택한 후에 처리

예제의 경우 DB문제가 발생해서 다음과 같이 EC2에 접근하여 DB내용을 추가하였다.

============MySQL 명령=================
> 1.  설치(mysql client 설치)
sudo yum install mariadb105

> 2. DB연결
mysql -h [db주소-엔드포인트 주소] -u [계정] -p 
패스워드 입력

> 3. DB생성
> create database webdb;

> 4. DB 이동하기
> use webdb;

> 5. sql파일 임포트 하기
MySQL [webdb]> source Dump20240725/webdb_apiuser.sql
MySQL [webdb]> source Dump20240725/webdb_board.sql
...
또는 파일 내용을 복사 붙여넣기
profile
Do your best every moment

0개의 댓글