Inflearn brand logo image

인프런 커뮤니티 질문&답변

logt님의 프로필 이미지
logt

작성한 질문수

Kafka & Spark 활용한 Realtime Datalake

Ansible 설치

Ansible과 NAT 환경에서 발생 가능한 root 권한 노출 리스크에 대한 질문

해결된 질문

작성

·

45

·

수정됨

0

안녕하세요, 선생님.

 

이전 강의에서 저희는 외부에서 직접적으로 private subnet에 접근하지 못하도록 하기 위해 NAT 인스턴스를 생성하고, outbound 트래픽 규칙도 사용자 지정으로 변경하였습니다. 이를 통해 NAT 인스턴스가 외부 접근을 차단하는 일종의 방화벽 역할을 한다고 이해하고 있습니다.

 

이 구조는 다음과 같이 2단계 방화벽을 형성한다고 생각됩니다:

1. 클라이언트에서 NAT로의 접근

2. NAT에서 private 서버로의 접근


그런데 Ansible에서 ansible_ssh_private_key_file 옵션만으로 .pem 파일을 지정하면 별도의 계정 정보 없이도 private 서버에 접근이 가능하다는 점이 조금 놀라웠습니다. 아마도 ansible.cfg나 inventory에 특정 설정이 추가되어 있어 가능한 것 같긴 하지만, 실제로 .pem만 존재해도 root 권한 접근까지 이어질 수 있다는 점에서 우려가 되었습니다.

 

특히, 악의적인 사용자가 만약 public NAT 인스턴스에 접근할 수 있는 상황이라면, ansible-playbook 파일과 become: yes 옵션을 활용해 손쉽게 private 서버의 root 권한을 획득할 수 있을 것으로 보입니다.

 

이런 보안 리스크를 줄이기 위해서는 어떤 식의 아키텍처 개선이나 운영 전략이 필요할지, 보안적으로 권장되는 방식이 있다면 조언을 듣고 싶습니다.


항상 감사합니다.

답변 1

1

김현진님의 프로필 이미지
김현진
지식공유자

안녕하세요 logt님

말씀하신대로 실습 환경에서 public-nat 서버상에 private 서버들의 .pem 파일을 저장해두고 접속하는 구조는 보안적으로 좋은 방법은 아니기는 합니다.

기업 기준으로 일반적으로 클라우드 서버를 사용하면 전용선 연결을 통해 cloud 내 서버들도 사내망으로써 접속하는 구조를 갖게 합니다. 즉 public 망을 통해 접근하는 구조 자체가 없는 셈이죠.

그리고 보통 보안이 어느정도 갖춰진 회사는 서버나 DB 접근제어 솔루션들을 가지고 있습니다. 그래서 사내 온프레미스에 있는 서버든 클라우드에 있는 서버든 서버 접근제어 솔루션을 통해 접속하는 경우가 많습니다. 이렇게 되면 .pem 파일을 가지고 접속하는 구조가 아니라 주로 패스워드 방식으로 인증하여 접속하게 됩니다.

 

이런 기업환경이 아니고 실습 환경과 같이 public 을 통해 접속해야 하는 구조라면 간단하게는 ssh 터널링을 구성해서 접속하는 방법도 있습니다. 이 방법은 키 파일은 내 로컬에 두고 사용할 수 있는 방법입니다. public-nat 서버를 통해 패킷이 전달되는 구조라 public-nat 서버를 사용하되, public-nat 서버에 ssh 터미널 로그인을 하는게 아니라 터널링을 구성하는 방식입니다.

 

다른 방법으로는 aws에서 제공하는 솔루션을 사용하는 방법도 있을 듯 합니다.

AWS Systems Manager(SSM) Session Manager 라는 기능인데 .pem 으로 접속하는 구조가 아니고 iam 인증을 통해 접속하는 방식입니다. (저도 써보지는 않았어요)

 

아무튼 실습에서는 간단히 환경 구성하느라 .pem 파일을 public-nat 서버에 올려놓는 식으로 구성했지만 보안적으로 더 좋은 방법도 많이 있습니다. 기업 내 클라우드 서버 사용을 원한다면 전용선 구성은 꼭 필요할거에요. 그렇다면 위에서 말씀드린대로 public 망을 통해 접속하는 구조가 아니기 때문에 실습 환경과 접속구조는 많이 달라지게 될거에요. 참고하세요 ^^

aws 서비스중에는 다른 방법도 더 있는 것으로 아는데

logt님의 프로필 이미지
logt
질문자

답변 정말 많은 도움이 됐습니다. 감사합니다.

김현진님의 프로필 이미지
김현진
지식공유자

앗 답변 끝 부분이 짤렸네요... ㅜㅜ

aws 서비스중에는 다른 방법도 더 있는것으로 아는데 한번 검색해보시면 좋을 듯해요.

[aws instance connect]

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/connect-linux-inst-eic.html

logt님의 프로필 이미지
logt

작성한 질문수

질문하기