Django SSH tunneling(AWS SSH) , AWS RDS, inspectDB
Web/Django

Django SSH tunneling(AWS SSH) , AWS RDS, inspectDB

뉴비뉴 2022. 7. 12.

안녕하세요

 

오늘은 Local 에서 AWS SSH Tunnel를 연결한 뒤

AWS RDS를 연결하여, inspect DB하는 과정을 설명하겠습니다.

 

우리들은 평소에 SSH tunnel은 개인 프로젝트를 할 때는 중요하게 여기지 않습니다.

하지만 회사나 보안을 신경써야 되면 무조건 해야되는 것이 SSH tunnel입니다.

 

SSH 터널링은 암호화된 SSH 연결을 통해 임의의 네트워킹 데이터를 전송하는 방법입니다. 기존 응용프로그램에 암호화를 추가하는 데 사용할 수 있습니다. 또한 VPN(Virtual Private Network)을 구현하고 방화벽을 통해 인트라넷 서비스에 액세스하는 데 사용할 수 있습니다.

위의 사진과 같이 SSH Tunnel이 되지 않으면 접속할 수 없습니다.

 

Local -> EC2 ssh-tunneling -> RDS(PostgreSQL, PORT: 5432)

Local 에서 EC2 ssh-tunneling 로 터널링을 해줘야 한다.

EC2 ssh-tunneling 에는 유저네임을 지정하면 된다.

 

ssh username@1.1.1.10 -L 5432:rds.address:5432

@ 앞에는 Username @ 뒤에는 IP addr,

-L 뒤에 5432: 는 로컬의 포트 5432를 이용하여

rds.address:5432 (PostgreSQL) 로 연결이 되는 것이다.

 

여기까지 이해가 어려울 수 있으니 settings 파일을 보도록 하겠다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.getenv('A_DB_DATABASE_NAME', 'postgres'),
        'USER': os.getenv('A_DB_USERNAME', 'username'),  # 설정한 아이디
        'PASSWORD': os.getenv('A_DB_PASSWORD', 'password'),  # 설정한 패스워드
        'HOST': os.getenv('A_DB_HOSTNAME', 'localhost'),  # .cluster-***.ap-northeast-2.rds.amazonaws.com
        'PORT': os.getenv('A_DB_PORT', 5432)
    }
}

여기서 잠시 HOST를 보내되면 원래 SSH-tunneling 을 이용하지 않게되면

주석으로 된 부분이 들어와서 연결해야 되는 것이다.

하지만 우리는 터널링을 했기 때문에 localhost로  설정해서 접속하면 된다.

 

1. AWS EC2 로 접속하여 터널링을 진행한다.
2. 터널링이 완료되었다면 RDS 또한 localhost로 연결이 가능하다.

왜냐하면 터널링을 통해 연결이 됐기 때문이다.

 

하지만 이렇게 구현한 케이스는 돈만 있다면 편하게 사용할 수 있다...

바로 DataGrip과 Pycharm 유료 버전을 사용하면 된다.

 

마지막으로 inspectDB 하는 법은 간단하다.

python manage.py inspectdb > models.py

python manage.py migrate

감사합니다!

 

참고

https://medium.com/serverlessguru/what-is-a-ssh-tunnel-aws-ec2-8ebc394b8208

https://jojoldu.tistory.com/623

 

댓글

💲 추천 글