처음 만나는 클라우드 보안

[팀프로젝트] 도커와 파이썬을 활용한 3Tier-시스템 구축 본문

클라우드 기초

[팀프로젝트] 도커와 파이썬을 활용한 3Tier-시스템 구축

영민하게 2022. 5. 1. 23:40
반응형

 

도커(Dokcer) 컨테이너를 바탕으로 대상 서버의 접속 로그를 모니터링 할 수 있는 시스템을 구축한다.

 

아래 그림과 같이 컨테이너는 총 세개 (관리 서버’, ‘DB서버’, ‘타겟 서버’) 그리고 그것을 모두 연결하는 파이썬 프로그램이 핵심이다. 사용자는 관리서버를 통해 타켓 서버에 대한 로그기록을 실기간으로 열람할 수 있다.

시스템 구상도

도커(Docker)란?

오픈소스 가상화 플랫폼으로 하나의 OS(Operation System)상에서 여러 컨테이너(=서버)를 동시에 실행 할 수 있다. 완성 된 컨테이너들은 추가  설치 프로그램과 환경을 묶는 컴포징(Composing) 작업을 통해 하나의 자동화 서비스로 배포되어 다른 환경에서도 즉각적인 서비스 구성이 가능하다.

 

1)   도커 컴포즈(Docker-compose) 

여러 개의 컨테이너를 하나의 패키지로 구성하는 기술을 의미한다. 포함된 다수의 컨테이너들은 일괄적으로 관리되며  한번에 관리가 가능하며 YAML 포맷으로 이루어져 있다.

 

2)   도커 볼륨(Docker Volume)

: 기본적으로 컨테이너 내부에 저장된 데이터는 컨테이너의 삭제와 함께 소멸된다. 이때 컨테이너 생성시 적용된 볼륨 옵션(-v)을 통해 데이터를 로컬 호스트 데이터로 보존할 수 있다.

 

 

 

1. 도커 환경 구축

명칭 관리서버 DB서버 타켓서버
이미지 파일 Python3: Latest MySQL Nginx
주요 기능 사용자 인터페이스 로그 및 사용자 데이터 저장 로그 데이터 발생

 

2. 파이썬 프로그램 개발

컨테이너 간 원격접속 기능과 MySQL 사용을 위하여 파이썬의 Pexpect, PyMySQL 모듈이 활용되었다.

 

1) Pexpect 모듈 

: 관리서버는 타겟서버의 SSH로 접근하는데, 이때의 기계식 질문을 Child.expect() 함수를 사용하여 응답한다. 함수 리턴 값 currentTime을 통해서 관리서버에서 로그 수집을 갱신할 수 있다.

import pymysql   #예시용으로 구동되지 않습니다.
def log_col_view() :
    conn = pymysql.connect(host='172.17.0.1', user='root', password='abcd', db = 'developer', charset='utf8')
    cursor = conn.cursor()
    sql = "SELECT ip, accessNumber FROM logCollect "
    cursor.execute(sql)
    data = []
    for i in cursor:
        data.append(i)
    if data == [] :
        return False
    else :
    return data
    conn.commit()
    conn.close()
 

2) Pymysql 모듈

: DB서버로의 원격 접속 후 pymysql.connect() 함수를 통해  MySQL 명령어를 전송한다. 이를 통해 DB서버에 대한 데이터 삽입, 삭제 그리고 출력이 가능하다.

1.import pymysql  #예시용으로 구동되지 않습니다.
2.def log_col_view() :
3.    conn = pymysql.connect(host='172.17.0.1', user='root', password='abcd', db = 'developer', charset='utf8')
4.    cursor = conn.cursor()
5.    sql = "SELECT ip, accessNumber FROM logCollect "
6.    cursor.execute(sql)
7.    data = []
8.    for i in cursor:
9.        data.append(i)
10.    if data == [] :
11.        return False
12.    else :
13.    return data
14.    conn.commit()
15.    conn.close()

 

3. 데이터 베이스 테이블 설정

DB서버에 저장되는 각 테이블 구조 및 특징은 다음과 같다.

 

1) User Table

: admin이라는 컬럼값을 통해 ‘1’의 경우 관리자, ‘0’의 경우 일반사용자로 식별한다. 비밀번호는 파이썬 모듈 중 HASHLImd5() 함수를 적용시켜 암호화된 문자로 저장된다.

idx ID PW NAME admin
1 a f4ds56a4f5sd6a Kim 1
2 b f1ds6a41f6asd5 Lim 0
3 c f4ds5a6f165sda Choi 0
4 d gfb456sdfb416 Hong 0

 

2) Log Table

: IP주소와 해당 접속 횟수를 수집한다. 접속 횟수의 과도한 증가를 통해 이상 접속 여부를 판별하고자 위함이다.

IP 주소 접속 횟수
10.0.0.8 88
192.138.17.128 52

 

 

4. YAML파일 작성 및 배포

: 도커 컨테이너는 이미지 파일을 제작하여 도커 허브에 업로드(Push)하고 서비스 구현이 요구되는 컨테이너 상에서 다운(Pull)하면 서비스 재현이 가능하다. 해당 작업에선 추가적인 설정 및 설치파일을 포함시키기 위해 각 컨테이너에 대한 이미지를 도커파일(Docker File)로 생성(commit)하였고 최종적으로 yaml포맷으로 컴포징 하였다.

도커 파일 작성
도커 yaml파일로 컴포징
해당 yaml 파일 다운 및 compose 수행

 

4. 구축결과

 

 

파이썬 프로그램 구동시 첫 CLI
관리자는 admin이라는 계정으로 설정되어있다.

 

관리자의 권한으로 허용되는 기능들
타겟 서버로부터 호출한 로그 데이터를 열람할 수 있다.

 

참고자료

PyMySQL, ‘User guide of py MySQL’, (https://pymysql.readthedocs.io/en/)

위키피디아, ‘클라우드’, (https://ko.wikipedia.org/wiki)

후니의 컴퓨터, ‘YAML파일’, (https://hoony-gunputer.tistory.com)

반응형
Comments