보안그룹
인스턴스에 대한 인바운드 및 아웃바운드 트래픽을 제어하는 가상 방화벽 역할을 한다.
VPC에서 인스턴스를 시작할 때 최대 5개의 보안 그룹에 인스턴스를 할당할 수 있다.
보안 그룹은 서브넷 수준이 아니라 인스턴스 수준에서 작동하므로 VPC에 있는 서브넷의 각 인스턴스를 서로 다른 보안 그룹 세트에 할당할 수 있다.
인스턴스를 시작하고 보안그룹을 지정하지 않으면 인스턴스가 VPC의 기본 보안그룹에 자동으로 할당된다.
- 보안 그룹은 허용 규칙을 지정할 수 있지만 거부 규칙은 지정할 수 없다.
- 인바운드 트래픽과 아웃바운드 트래픽에 별도의 규칙을 지정할 수 있다.
- 보안 그룹 규칙을 사용하면 프로토콜과 포트번호를 기준으로 트래픽을 필터링할 수 있다.
- 보안 그룹은 상태가 저장된다.(stateful 방식) : 사용자가 인스턴스에서 요청을 전송하면 해당 요청의 응답 트래픽은 인바운드 보안 그룹 규칙에 관계없이 인바운드 흐름이 허용된다. 아웃바운드 규칙에 상관없이, 허용된 인바운드 트래픽에 대한 반응으로 외부로 나가는 흐름이 수행된다.
- 새 보안 그룹을 만드는 경우에는 인바운드 규칙이 없다. 따라서 보안 그룹에 인바운드 규칙을 추가하기 전에는 또 다른 호스트에서 시작하여 인스턴스로 가는 인바운드 트래픽이 허용되지 않는다
- 기본적으로 보안그룹은 모든 아웃바운드 트래픽을 허용하는 아웃바운드 규칙을 포함한다. 규칙을 제거할 수 있으며 특정 아웃바운드 트래픽만 허용하는 아웃바운드 규칙을 추가할 수 있다. 보안 그룹에 아웃바운드 규칙이 없는 경우 인스턴스에서 시작하는 아웃바운드 트래픽이 허용되지 않는다.
- VPC당 생성할 수 있는 보안 그룹 개수, 각 보안 그룹에 추가할 수 있는 규칙의 개수, 그리고 네트워크 인터페이스에 연결할 수 있는 보안 그룹의 개수에는 할당량이 있다.
- 트래픽을 허용하는 규칙을 추가하지 않으면 보안 그룹과 연결된 인스턴스가 서로 통신할 수 없다. (예외. 기본 보안 그룹에는 기본적으로 규칙이 포함됨)
- 보안 그룹은 네트워크 인터페이스와 연결된다. 인스턴스를 시작한 후 인스턴스에 연결된 보안 그룹을 변결할 수 있다. 이 경우 주 네트워크 인터페이스(eth0)에 연결된 보안 그룹이 변경된다. 다른 네트워크 인터페이스와 연결된 보안 그룹을 지정하거나 변경할 수도 있다.
인스턴스 생성 및 VPC 생성
전 포스팅과 같이 VPC 생성해준다.
https://hyeyeon13.tistory.com/9
인스턴스 생성
- WEBSERVER 인스턴스는 동일하게
- DATABASE 인스턴스는 전까지는 동일하게 생성해주고 단계 6에서는 아래와 같이 변경해준다.
소스부분에 사용자 지정 및 보안그룹(SG-WEB)을 넣어준다.
SG-WEB 를 소스로 정의하면 WEBSERVER안에 소속되어있는 인스턴스만 SSH 접속을 허용하겠다.
-> 보안이 강화된다. (내부 서버들도 아무나 들어오지 못하게 막아준다.)
기존 키페어 이용하여 인스턴스 생성 완료 한다.
WEBSERVER에서 탄력적 IP 주소 자동 할당을 활성화해주지 않았더라면, 아래와 같이 설정을 변경해 준다.
1. 서브넷으로 이동
2. PUBLIC-SUBNET 오른쪽 클릭
3. 자동 할당 IP 설정 수정 클릭
4. 퍼블릭 IPv4 주소 자동 할당 활성화 체크박스에 체크
5. VPC > MY-VPC 우클릭 > DNS 호스트 이름 편집
6. DNS 호스트 이름 활성화 체크박스에 체크
7. 탄력적 IP로 이동
8.. 탄력적 IP 주소 할당 클릭
9. 변경사항 없이 할당 버튼 클릭
10. 작업 > 탄력적 IP 주소 연결 클릭
15. 인스턴스에 WEBSERVER 클릭
16. 연결 클릭
-> 이제 퍼블릭 IP 주소가 할당되어있다.
WEBSERVER와 연결을 위해 MobaXterm 연결
접속 성공 하였다.
이제 여기서 아파치를 설치 후 index.html파일을 만들어보자.
$ sudo yum -y install httpd
$ sudo systemctl start httpd
$ sudo systemctl enable httpd
$ cd /var/www/html
$ sudo vi index.html
WEBSERVER
아이피 연결해보면 WEBSERVER 문구가 표시된 새 페이지를 볼 수 있다.
duplicatoin을 이용하여 창을 하나 더 열고 키 업로드 및 ubuntu로 접속해주자.
ubuntu@데이터베이스 프라이빗 주소
이제 ping을 입력해보자.
WEBSERVER(2.3.34.175.146)에서는 ping이 나가지만 DATABASE(3.3.34.175.146)에서는 ping이 나가지 않는다.
TEST 인스턴스 생성
(Amazon Linux AMI, Public , 2a, 보안그룹 이름:SG-TEST, 나머지는 디폴트값)
https://hyeyeon13.tistory.com/5
NAT 게이트웨이 생성
NAT 게이트웨이를 사용하면 프라이빗 서브넷의 인스턴스를 인터넷 또는 기타 AWS 서브스에 연결하는 한편, 인터넷에서 해당 인스턴스와의 연결을 시작하지 못하게 할 수 있다.
NAT 게이트웨이는 IPv6 트래픽을 지원하지 않으므로 아웃바운드 전용(외부전용) 인터넷 게이트웨이를 사용해야한다.
NAT 게이트웨이에 대한 설명은 아래 글 참조
왼쪽 목록의 탄력적 IP로 이동 후 탄력적 IP 주소를 할당한다.
왼쪽 목록의 NAT 게이트웨이로 이동
NAT 게이트웨이 생성 클릭
위와 같이 설정하고, 탄력적 IP 할당을 클릭해준다.
NAT 게이트웨이 생성 클릭
왼쪽 메뉴에서 라우팅 테이블 클릭
PRIVATE-RTB의 라우팅 테이블 클릭
라우팅 편집 클릭
방금 만든 NAT 게이트웨이를 넣어준다.
이제 아래와 같이 DATABASE에서 나가지 않던 ping이 나가는 모습을 확인할 수 있다.
이제 우분투에 워드프레스를 설치해보자.
워드프레스 설치 전 Mariadb 설치 먼저 해주어야한다.
Mariadb설치 전 NAT 게이트웨이 먼저 설치해준다.
$ sudo apt-get -y update
$ sudo apt-get -y install mariadb-server
$ sudo mysql_secure_installation
여기까지 NAT 게이트웨이 설치가 성공적으로 완료되었다.
NAT 게이트웨이는 사용한 만큼 과금되므로 여기서 삭제해주도록 한다.
AWS의 NAT 게이트웨이 클릭 -> 작업 -> NAT 게이트웨이 삭제
이제 DATABASE에 Mariadb를 설치해준다.
$ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
#bind-address = 127.0.0.1 // 이 라인에 주석 추가
$ sudo systemctl restart mysql
$ sudo mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 32
Server version: 10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> CREATE USER 'wpuser'@'%' IDENTIFIED BY 'wppass';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS wordpress;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'%';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> quit
Bye
Mariadb 설치가 완료되었다.
이제 WEBSERVER로 이동하여 워드프레스를 설치해보자.
$ wget https://ko.wordpress.org/wordpress-4.8.2-ko_KR.zip
$ sudo yum install -y httpd php php-mysql php-gd php-mbstring wget unzip
//워드프레스는 PHP기반의 웹 애플리케이션이므로 php를 설치 해 주어야한다.
$ cd /var/www/html
$ ls
index.html
$ sudo unzip /home/ec2-user/wordpress-4.8.2-ko_KR.zip
$ ls
index.html wordpress
$ sudo chown -R apache:apache wordpress
$ sudo systemctl restart httpd
워드프레스 설치도 완료되었다.
이제 새창에 WEBSERVER의 퍼블릭 IP/wordpress(3.34.175.146/wordpress)를 입력하면 아래와 같이 워드프레스가 뜬다.
워드프레스를 시작해보자.
데이터베이스 이름: wordpress(변경없음)
사용자명: wpuser(mariadb에서 만든 유저 이름)
비밀번호: wppass(mariadb에서 만든 유저의 비밀번호)
데이터베이스 호스트: DATABASE의 아이피 주소($ ip addr show 입력하면 나오는 아이피 주소값)
설치과정이 끝났다.
이제 설치 실행하기를 눌러보자.
위 그림과 같이 원하는 제목,이름, 비밀번호, 이메일을 입력해준다.
워드프레스 설치하기
사용자명 이름 확인 및 로그인을 클릭한다.
사용자명과 비밀번호를 입려력하여 로그인을 한다.
위에서 사이트를 사용자 정의 하기 버튼을 누르면 아래와 같이 선인장 그림이 나온다.
선인장을 확인했으면 워드프레스 만들기 성공!
왼쪽 리스트의 보안그룹을 클릭한다.
보안 그룹들 중에서 SG-DB를 체크한다.
아래 쪽 인바운드 규칙 편집을 눌러준다.
위 그림과 같이 유형은 모든 ICMP-IPv4, 소스는 sg-web를 클릭하여 규칙저장을 해준다.
WEBSERVER에서 DATABASE의 프라이빗 아이피로 핑이 나가는 모습을 확인할 수 있다.
TEST인스턴스는 mobaX가 아니라 웹으로 연결해보자.
TEST인스턴스를 오른쪽 클릭하고 연결을 클릭하면 아래와 같이 나온다.
EC2인스턴스 연결을 눌러 연결 버튼을 클릭하면 리눅스 CLI창이 뜰 것이다.
아직 ping DATABASE의 프라이빗 아이피를 입력해도 ping이 나가지 않는다.
Q) TEST인스턴스에서 ping이 나가도록 해보자.
VPC의 보안그룹 클릭
SG-DB의 인바운트 편집
유형: 모든 ICMP-IPv4, 소스: SG-TEST 입력
규칙 저장 클릭
이제 TEST인스턴스에서도 DATABASE의 ping이 나가는 모습을 확인 할 수 있다.