• 아마존 문서
https://docs.aws.amazon.com/ko_kr/
https://docs.aws.amazon.com/ko_kr/
docs.aws.amazon.com
• VPC
‣ 사용자가 정의한 가상 네트워크로 AWS 리소스를 시작할 수 있다
‣ 기존 네트워크와 아주 유사한 가상 네트워크
‣ 다른 가상 네트워크와 논리적으로 분리되어 있다
‣ VPC는 IP주소 범위를 지정하고 서브넷과 게이트웨이를 추가하고 보안 그룹을 연결
• 기본 VPC
- 기본 서브넷, 연결된 인터넷 게이트웨이, 모든 트래픽을 인터넷 게이트웨이로 보내는 기본 라우팅 테이블의 경로, EC2 인스턴스에 퍼블릭 IP 주소 및 DNS 호스트 이름을 제공하는 DNS 설정
- 기본 서브넷에서 시작된 EC2 인스턴스는 자동으로 인터넷에 액세스
• 서브넷
‣ 서브넷은 단일 가용 영역에 상주
‣ 서브넷을 만들 때 해당 서브넷에 대한 IPv4 CIDR 블록을 지정합니다. 이는 VPC CIDR 블록의 서브넷입니다.
‣ 프라이빗 서브넷 : 퍼블릭 인터넷에 엑세스하려면 NAT 장치가 필요합니다. (업데이트할 때 NAT 장치 필요)
‣ 네트워크 ACL를 사용
• 라우팅 및 라우팅 테이블
‣ 서브넷 또는 게이트웨이의 네트워크 트래픽이 전달되는 위치를 결정
‣ VPC와 함께 자동으로 제공되는 라우팅 테이블
‣ 다른 라우팅 테이블과 명시적으로 연결되지 않은 모든 서브넷의 라우팅을 제어
‣ 라우팅 테이블과 서브넷, 인터넷 게이트웨이 또는 가상 프라이빗 게이트웨이 간의 연결
• 인터넷 게이트웨이
‣ 인터넷 게이트웨이를 사용하여 VPC를 인터넷에 연결
‣ 인터넷 바인딩된 트래픽을 인터넷 게이트웨이로 전달하는 라우팅을 서브넷의 라우팅 테이블에 추가
‣ 서브넷의 인스턴스에 퍼블릭 IPv4 주소나 IPv6 주소가 있는지 확인
‣ 네트워크 액세스 제어 목록 및 보안 그룹 규칙에서 원하는 인터넷 트래픽이 인스턴스로, 그리고 인스턴스에서 흐르도록 허용되는지 확인
• VPC 엔드포인트를 사용하여 인터넷 게이트웨이 또는 NAT장치를 사용하지 않고 AWS 서비스에 비공개로 연결 ex) DynamoDB - 인터페이스 엔드포인트 - 게이트웨이 엔드포인트 : S3, SynamoDB • Peering ‣ 두 VPC의 리소스 간 트래픽을 라우팅 ex) Peer : 동료, 친구 ----> P2P (Peer to Peer) • 듀얼 스택(Dual Stack) ‣ IPv4와 IPv6도 사용 • RFC 미국의 국제 인터넷 표준화 기구인에서 제공, 관리하는 문서 |
• 프라이빗 IP주소 ‣ VPC에서 인스턴스를 시작할 경우, 서브넷의 IPv4 주소 범위에 속한 주 프라이빗 IP 주소는 인스턴스의 주 네트워크 인터페이스(eth0)에 할당 ‣ 각 인스턴스에는 인스턴스의 프라이빗 IP 주소를 확인하는 프라이빗(내부) DNS 호스트 이름이 할당 • 퍼블릭 IP주소 ‣ 퍼블릭 IPv4 주소를 받을 것인지 여부를 결정하는 속성을 갖습니다. ‣ 따라서 이 속성이 활성화된 서브넷(퍼블릭 서브넷)에서 인스턴스를 시작할 경우, 퍼블릭 IP 주소는 인스턴스에 대해 생성된 주 네트워크 인터페이스(eth0)에 할당 ‣ 퍼블릭 IP 주소는 NAT(Network Address Translation)를 통해 주 프라이빗 IP 주소로 매핑 cf) NAT : 외부에서는 퍼블릭IP, 내부에서는 프라이빗IP • 탄력적 IP주소 ‣ 영구 퍼블릭 IP주소가 필요한 경우, 그대신에 탄력적 IP주소를 사용 |
• 네트워크 ACL⭐
- 서브넷은 한 번에 하나의 네트워크 ACL에만 연결
- 네트워크 ACL에는 인바운드 규칙과 아웃바운드 규칙이 있음
- 각 규칙에서는 트래픽을 허용하거나 거부
- 규칙에는 1부터 32766까지 번호 사용 (2의 15승)
- 가장 낮은 번호의 규칙부터 순서대로
- 트래픽이 규칙과 일치하면 규칙이 적용(없으면 아래 규칙 검토)
- 필요한 경우 나중에 새 규칙을 삽입할 수 있도록 중분 방식으로 규칙을 생성(예: 10 또는 100 단위씩 증분)
- 네트워크 ACL 규칙은 트래픽이 서브넷에 들어오고 나갈 때 적용
- 네트워크 ACL은 상태 비저장 (Stateless : 상태를 고려하지 않음) --> 리턴 트래픽은 불허
- 규칙 번호. 번호가 가장 낮은 규칙부터 평가됩니다. 규칙에 일치하는 트래픽이 있으면 이와 모순되는 상위 규칙이 있더라도 적용됩니다.
- 유형. 트래픽 유형(예: SSH)입니다. 모든 트래픽 또는 사용자 지정 범위를 지정할 수도 있습니다.
- 프로토콜 . 표준 프로토콜 번호를 가진 어떤 프로토콜이든 지정할 수 있습니다. 자세한 내용은 프로토콜 번호를 참조하십시오. ICMP를 프로토콜로 지정하면 ICMP 유형과 코드 중 일부 또는 전부를 지정할 수 있습니다.
- 포트 범위. 트래픽에 대한 수신 포트 또는 포트 범위입니다. 예를 들어, HTTP 트래픽의 경우 80입니다.
- 소스: . [인바운드 규칙만 해당] 트래픽의 소스(CIDR 범위)입니다.
- 대상 [아웃바운드 규칙만 해당] 트래픽의 대상(CIDR 범위)입니다.
- 허용/거부. 지정된 트래픽을 허용 또는 거부 할지 여부입니다.
‣ 사용자 지정 네트워크 ACL 예시

• Return Traffic
‣ 내부망에서 요청을 보낸것을 기록했다가 이에 대한 응답이 오는 것
• 방화벽의 Stateful Inspection (SPI)
‣State Table에 내부망에서 요청한 것을 기록했다가 응답이 오면 허용, 나머지는 안됨
⇒ Return Traffic 허용하는 방식, Stateful은 상태를 고려하는 방식
⇒ 내부망을 보호하는 효과
• 단일 서브넷에 있는 VPC

- IPv4 CIDR 블록의 크기가 /16(예: 10.0.0.0/16)인 Virtual Private Cloud(VPC). 이것은 65,536개의 프라이빗 IPv4 주소를 제공합니다.
- IPv4 CIDR 블록의 크기가 /24(예: 10.0.0.0/24)인 서브넷. 이것은 256개의 프라이빗 IPv4 주소를 제공합니다.
- 인터넷 게이트웨이 VPC를 인터넷 및 다른 AWS 서비스에 연결합니다.
- 인스턴스가 VPC의 다른 인스턴스와 통신할 수 있게 해주는 서브넷 범위(예: 10.0.0.6)의 프라이빗 IPv4 주소와 인스턴스가 인터넷에 연결하고 인터넷에서 액세스할 수 있게 해주는 퍼블릭 IPv4 주소인 탄력적 IPv4 주소(예: 198.51.100.2)가 있는 인스턴스.
- 서브넷과 연결된 사용자 정의 라우팅 테이블. 라우팅 테이블 항목은 서브넷의 인스턴스가 IPv4를 사용하여 VPC 내의 다른 인스턴스와 통신할 수 있도록 해주며, 또한 인터넷을 통해 직접 통신할 수 있게 해줍니다. 인터넷 게이트웨이로 이어지는 경로가 있는 라우팅 테이블과 연결된 서브넷을 퍼블릭 서브넷이라고 합니다.
• 퍼블릭 및 프라이빗 서브넷이 있는 VPC(NAT)
‣ 백엔드 서버에 대한 공개적인 액세스를 차단하면서 퍼블릭 웹 애플리케이션을 실행하려는 경우
‣ 웹 서버가 데이터베이스 서버와 통신할 수 있도록 보안

- IPv4 CIDR 블록의 크기가 /16(예: 10.0.0.0/16)인 VPC. 이것은 65,536개의 프라이빗 IPv4 주소를 제공합니다.
- IPv4 CIDR 블록의 크기가 /24(예: 10.0.0.0/24)인 퍼블릭 서브넷. 이것은 256개의 프라이빗 IPv4 주소를 제공합니다. 퍼블릭 서브넷은 인터넷 게이트웨이로 이어지는 라우팅이 있는 라우팅 테이블과 연결된 서브넷입니다.
- IPv4 CIDR 블록의 크기가 /24(예: 10.0.1.0/24)인 프라이빗 서브넷. 이것은 256개의 프라이빗 IPv4 주소를 제공합니다.
- 인터넷 게이트웨이 VPC를 인터넷 및 다른 AWS 서비스에 연결합니다.
- 서브넷 범위에서 프라이빗 IPv4 주소가 있는 인스턴스(예: 10.0.0.5, 10.0.1.5). 이 경우 인스턴스가 서로 통신할 수 있으며 VPC의 다른 인스턴스와 통신할 수 있습니다.
- 탄력적 IPv4 주소(예: 198.51.100.1)가 있는 퍼블릭 서브넷의 인스턴스. 이 경우 탄력적 IPv4 주소는 인터넷을 통해 접근할 수 있게 해주는 퍼블릭 IPv4 주소입니다. 인스턴스는 탄력적 IP 주소 대신 퍼블릭 IP 주소가 실행 시 지정될 수 있습니다. 프라이빗 서브넷의 인스턴스는 인터넷에서 수신되는 트래픽을 수락할 필요가 없는 백 엔드 서버이므로 퍼블릭 IP 주소가 없지만, NAT 게이트웨이를 사용하여 인터넷으로 요청을 전송할 수 있습니다(다음 글머리표 항목 참조).
- 자체 탄력적 IPv4 주소를 가진 NAT 게이트웨이. 프라이빗 서브넷의 인스턴스는 IPv4를 통한 NAT 게이트웨이를 통해 인터넷에 요청을 보낼 수 있습니다(예: 소프트웨어 업데이트의 경우).
- 퍼블릭 서브넷과 연결된 사용자 지정 라우팅 테이블. 이 라우팅 테이블에는 서브넷의 인스턴스가 IPv4를 통해 VPC의 다른 인스턴스와 통신할 수 있게 하는 항목과, 서브넷의 인스턴스가 IPv4를 통해 인터넷과 직접 통신할 수 있게 하는 항목이 들어 있습니다.
- 프라이빗 서브넷과 연결된 기본 라우팅 테이블. 라우팅 테이블에는 서브넷의 인스턴스가 IPv4를 통해 VPC의 다른 인스턴스와 통신할 수 있게 해주는 항목과, 서브넷의 인스턴스가 IPv4로 NAT 게이트웨이를 통해 인터넷과 통신할 수 있게 해주는 항목이 들어 있습니다.
‣ VPC 설정
IPv4 CIDR 블록의 크기가 /16(예: 10.0.0.0/16)인 VPC. 이것은 65,536개의 프라이빗 IPv4 주소를 제공
10.0.0.0 을 이진수로 표현하면 0000 1010. 0000 0000 . 0000 0000 . 0000 0000
/16은 Subnet Mask에서 1이 16개 1111 1111 . 1111 1111 . 0000 0000 . 0000 0000 = 255.255.0.0
Network Host
‣ 퍼블릭 서브넷
IPv4 CIDR 블록의 크기가 /24(예: 10.0.0.0/24)인 퍼블릭 서브넷. 이것은 256개의 프라이빗 IPv4 주소를 제공합니다.
퍼블릭 서브넷은 인터넷 게이트웨이로 이어지는 라우팅이 있는 라우팅 테이블과 연결된 서브넷
10.0.0.0 을 이진수로 표현하면 0000 1010 . 0000 0000 . 0000 0000 . 0000 0000
/24는 Subnet Mask에서 1이 24개 1111 1111 . 1111 1111 . 1111 1111 . 0000 0000 = 255.255.255.0
‣ 프라이빗 서브넷
IPv4 CIDR 블록의 크기가 /24(예: 10.0.1.0/24)인 프라이빗 서브넷. 이것은 256개의 프라이빗 IPv4 주소를 제공
10.0.0.0 을 이진수로 표현하면 0000 1010 . 0000 0000 . 0000 0001 . 0000 0000
/24는 Subnet Mask에서 1이 24개 1111 1111 . 1111 1111 . 1111 1111 . 0000 0000 = 255.255.255.0
• 프라이빗 서브넷에 있는 EC2에 접근할려면?
‣ 퍼블릭 서브넷에 있는 리눅스를 통해서 접근(Bastion Host) : Key가 필요 ( S3 Bucket을 사용 ---> 위험)
‣ 퍼블릭 서브넷에 있는 윈도우를 통해서 접근(Bastion Host) : Key를 복사하기 쉬움, RDP는 오른쪽 마우스를 복/붙, 권한 설정(상속 제거, 읽기만 허용), 보안 그룹에서 허용
‣ EIP를 통해 접근해서 설정, 설정이 끝나면 EIP를 Release : 가장 간단, 보안 그룹에서 허용
• EC2에 DB를 직접 설치해서 운영하는 방법 vs. RDS를 사용하는 방법
‣ RDS를 사용하는 경우 AWS에서 관리해줌, 비용이 약간 더 비쌈, root 권한을 사용할 수 없음, DB에 대한 Tuning, Customizing을 할 수 없음
‣ EC2에 DB를 직접 설치 : 관리를 잘하기 어려움, 기존 DB가 RDS와 호환이 안 되는 경우에 택할 수 있음, root 권한 사용 가능
실습 EC2 데이터베이스 만들기
‣ DB 서버 설정



Public Subnet 접근이 가능하게 하기 위해 퍼블릭 서브넷 IP 지정


프라이빗 서브넷 접근을 하기 위해 탄력적 IP 주소 할당을 해줌




mysql-server 설치

데이터베이스에 접속 및 생성
mysql> create database gnuboard; mysql> create user bts@'%' identified by '1234'; mysql> grant all privileges on gnuboard.* to bts@'%'; mysql> flush privileges; mysql> exit |


bind-address 앞에 #을 붙여서 주석처리(외부에서 접속 가능하도록))
‣ Web Server 설정






‣ Gnuboard에서 DB서버로 연결하기




• 사설 IP로 설정해도 잘되는 이유
‣ 서브넷들을 라우팅 테이블에 명시적 연결로 구성
‣ 보안 그룹에서 퍼블릭 서브넷 IP 주소에서 3306번 포트로 들어오는 경우 허용
‣ DB서버 살펴보기

database가 여러 개라서 s를 붙여야 함

테이블 목록 확인

g5_board_file의 칼럼 목록 확인

테이블에 저장된 내용 확인

회원 목록 확인(id, pw, 이름)
‣ 마무리 작업


• Spot Instance
‣ 사용자가 제시한 금액 ($0.0044)이 시세 ($0.0043) 보다 높으면 내 인스턴스를 실행하고, 시세가 더 높으면 내 인스턴스를 중지 또는 삭제하도록 설정 가능
• Amazon Inspector
‣ Amazon EC2 인스턴스에서 소프트웨어 취약성과 의도하지 않은 네트워크 노출을 자동으로 검색하고 스캔
‣ 취약점 분석 및 스캐닝해주는 AWS 서비스
• 인스턴스 스토어
‣ 인스턴스에서 임시 데이터를 저장하는 데 사용 가능
‣ 인스턴스 스토어에 저장된 데이터를 삭제 : 인스턴스를 중단하거나 최대 절전 모드로 전환하거나 종료
• LAMP
‣ Linux용 Apache + MySQL + PHP
Amazom Linux2에 LAMP 웹 서버 설치
‣ LAMP 서버 준비














‣ LAMP 서버 테스트



이 파일은 유용한 정보를 포함하고 있지만 보안상 이유로 인터넷에 공개되어서는 안 됨
‣ 데이터베이스 서버 보안 설정


‣ WordPress 블로그 호스팅




mysql> create database gnuboard; mysql> create user bts@'%' identified by '1234'; mysql> grant all privileges on gnuboard.* to bts@'%'; mysql> flush privileges; mysql> exit |








'Rookies 9기 > 클라우드 보안 컨설팅 실무' 카테고리의 다른 글
클라우드 보안 컨설팅 실무 3일차 (0) | 2022.11.09 |
---|---|
클라우드 보안 컨설팅 실무 1일차 (0) | 2022.11.07 |