AWS 보안 강화
AWS에서는 여러가지 보안 구조를 가지고 있는데 그 중에 처음이 바로 보안 그룹이다.
보안 그룹은 EC2를 비롯한 각 리소스에 설정하는 가상 방화벽과 같은 개념이다
보안 그룹에는 허용할 트래픽을 등록하고, 그 내용을 인스턴스에 적용하는 것이다.
하나의 룰에는 "Procotocol"과 "Source"를 인바운드/아웃바운드 별로 지정하여
허용할 트래픽을 설정한다.
볼륨 암호화는 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
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 주요 개념
DNS 레코드란?
DNS 질의에 응답을 위해서 알고있는 정보를 저장한 데이터를 말한다.
(A, AAAA, MX, NS, SRV, CNAME, ...)
Record Set
DNS 레코드로 Routing Policy와 Set ID, Health Check 설정과 Record를 전부 포함한다.
Routing Policy
Route53이 Record Set에 대해서 어떻게 라우팅할지 결정하는 것.
일반적으로 'Simple'이라는 정책을 이용하면 일반적인 DNS 서버와 같게 동작한다.
'Weighted(가중치 기반)', 'Latency(지연 시간 기반 라우팅)', 'Failover(DNS Failover),
'Geolocation(Geo Routing)'
Set ID
Routing Policy를 이용해 복수의 Record Set을 같은 이름으로 설정한 경우, 각각을 구별하여
인식하기 위해서 설정하는 ID
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)
2. 가중치 라운드 로빈(WRR; Weighted Round Robin)
=> DB 접속이 필요한 경우에는 별도의 데이터 동기 방법도 검토해야 한다.
3.DNS Failover
=> 이 기능을 사용하면 서비스 중인 서버나 서버 군에 장애가 발생하더라도 Sorry 페이지를
제공할 수 있도록 별도로 준비한 서버로 라우팅을 간단히 만들 수 있다.
4. Geo Routing
예를 들어 아시아에서의 요청이라면 서울 리전 EC2로 전송하고, 북아메리카에서 요청하면 버지니아
리전의 EC2로 전송하도록 설정할 수 있다.
지정한 장소와 맞지 않는 경우를 대비하여 기본 설정을 해두는 것이 좋다.
AWS 서비스와 연계
Route53은 DNS 서비스 자체만으로도 좋은 서비스이지만, S3나 CloudFront, ELB와 조합하여
사용하면 보다 편리한 이용이 가능하다.
이런 경우를 위해 사용하는 기능이 Route53 자체 레코드 타입인 ALIAS 레코드다.
- ALIAS Record
CNAME 레코드와 같이 별명으로 지정하면서도 A Record와 같은 직접 IP 주소와 매핑을 하는 것이다.
ALIAS Record가 지정할 수 있는 것은 AWS가 제공되는 서비스에 할당된 일부 DNS명에 대해서
가능하다.
지원하는 레코드 타입
도메인의 위임된 네임 서버(권한 네임서버)명을 설정
Route53에서는 Zone Apex의 NS레코드가 기본으로 설정되어 평소에는 변경할 필요가 없다.
서브 도메인을 다른 계정이나 다른 Hosted Zone으로 관리하는 경우, 서브 도메인을 NS레코드로
설정해야 한다.
주로 역질의(IP 주소를 DNS 명으로 매핑)를 한다.
실제 IP 주소를 직접 지정하지 않는다.
aaa.bbb.ccc.ddd라면 ddd.ccc.bbb.aaa.in.addr.arpa.와 같은 형식으로 다른 DNS명으로
별칭 지정한다.
RFC2219에 기록되어 있는 서비스와 별칭 지원은 well known port 이외의 포트로 운영되는
경우 포트 번호를 알 수 없다.
SRV레코드에서는 포트 번호 통지뿐 아니라 MX레코드처럼 부하 분산과 이중화 구성이 가능하다.
Active Directory에서는 이 SRV레코드가 이용된다.
텍스트 정보를 제공하기 위한 레코드.
최근에는 SPF나 전자 서명을 이용한 송신 도메인 인증인 DKIM(DomainKeys Identified Mail)를 설정하기 위해 이용된다.
Route53에서는 255문자를 넘는 TXT레코드를 1 레코드로 기술하는 경우 주의가 필요하다.
GUI로 설정하기
AWS Elastic beanstalk로 이동
Application 생성
애플리케이션 정보 : 애플리케이션의 이름을 입력
환경 정보
환경 이름 확인 또는 수정
도메인을 사용하고 싶은 경우에 값을 입력한 후 "가용성 확인" 버튼으로 확인
플랫폼
배포 환경에 맞는 플랫폼 선택
예제가 Tomcat인 관계로 해당 내용으로 플랫폼 설정
애플리케이션 코드
샘플 애플리케이션 선택
만약 버전 및 다른 설정이 되어 있다면, 환경에 맞게 코드 사용
사전 설정
현 상황에 맞는 내용을 선택(현재는 단일 인스턴스)
> Virtual Private Cloud 설정
=> 기존 VPC 혹은 새롭게 생성
> 인스턴스 설정
- 퍼블릭 IP 주소 : 활성화됨
- 인스턴스 서브넷 : 전체 선택
> 데이터베이스
-> 활성화 (사용할 경우)
DB 설정 정보 입력
> 인스턴스
> 용량
> 모니터링
> 관리형 플랫폼 업데이트
> 이메일 알림
> 롤링 업데이트 및 배포
> 플랫폼 소프트웨어
- Nginx 서버로 설정 - apache를 사용해도 된다.
=> 동작 확인 후 정상적인 배포가 끝나면 샘플 웹 페이지가 동작한다.
배포할 war파일의 설정을 확인
>> 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
...
또는 파일 내용을 복사 붙여넣기