ㅍㅍㅋㄷ

AWS DocumentDB(MongoDB) 를 python 을 활용해 접속해 보자 (TLS 암호화) 본문

IT/mongoDB

AWS DocumentDB(MongoDB) 를 python 을 활용해 접속해 보자 (TLS 암호화)

클쏭 2019. 5. 24. 09:33

 

 

 

AWS의 DocumentDB 를 이용해 개발을 하려다 보니,

DocumentDB에서 사용되는 MongoDB 에 기본으로 TLS 암호화 통신 되도록 설정되어 있다.

 

[AWS Console 에서 보면 DocumentDB 의 TLS 암호화 설정]

 

필자의 경우 Python 으로 개발시 MongoDB 를 ORM 형태로 사용 가능한 MongoEngine 이라는 패키지를 주로 이용하는데, 이때 TLS 암호화 통신 설정 관련 일부 내용을 정리한다.

 

 

TLS 통신을 위한 public key 다운로드

 

Client와 서버 (documentDB) 간 암호화 통신을 위해서는 서로의 신뢰를 확인하기 위해서 Certificate 를 확인하는 절차가 필요하다.

이때 certificate 에 대한 발급은 서버 관리 권한을 가지고 있는 AWS 측에서 제공해준 Certificate 를 사용하면 된다.

 

해당 key 는 AWS S3 에서 다운받도록 한다.

wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

 

참고로 해당 key 의 경우, DocumentDB가 생성될때 자동으로 부여되는 endpoint URL 에 대해서만 인증이 된다. 따라서 Route53 을 이용해 내부 도메인을 사용하는 경우는 동작하지 않는다.

 

 

MongoEngine 설치

 

MongoEngine 은 MongoDB 를 ORM 형태로 개발 하도록 해주는 python SDK 이다. Python framework 중 가장 많이 사용되는 Django 의 ORM 과 사용성이 거의 비슷하기 때문에 Django 를 사용한 개발자면 어렵지 않게 사용 가능하다.

 

pip 로 쉽게 설치 가능하다.

pip3 install mongoengine

 

 

MongoEngine 을 이용한 DocumentDB 연결

 

MongoEngine 을 이용해 DocumentDB 에 TLS 로 연결 하려면 아래와 같이 

SSL 관련 Option 을 지정해 주면 된다.

ssl_ca_certs 는 위 S3 에서 다운받은 public key를 지정해주면 된다. 

from mongoengine import *
from model import User

ssl_config = {
    'ssl': True,
    'ssl_ca_certs': 'rds-combined-ca-bundle.pem'
}

connect(
    '<DB>',
    username='<MONGODB_USER>',
    password='<MONGODB_PASSWORD>',
    host='<MONGODB_HOST>',
    port=27017,
    **ssl_config
)

user_vos = User.objects()

for user in user_vos:
	print(f'{user_vo.email} {user_vo.first_name} {user_vo.last_name}')
    

 

# model.py
from mongoengine import *

class User(Document):
    email = StringField(required=True)
    first_name = StringField(max_length=50)
    last_name = StringField(max_length=50)

 

 

Reference

https://docs.aws.amazon.com/documentdb/latest/developerguide/security.encryption.ssl.html

 

 

Comments