Home Bastion 으로 private 인스턴스에 접속하기
Post
Cancel

Bastion 으로 private 인스턴스에 접속하기

1. 글을 작성하게 된 계기


로컬 환경에서 인프라에 설치된 데이터베이스안전하게 접속 하는 방법에 대해 정리하기 위해 글을 작성하게 되었습니다.





2. 문제 상황


private 인스턴스를 사용하면 데이터베이스에 직접 접근할 수가 없습니다. 외부에서 접속 자체가 안되니까요. 접속을 시도하면 접속 자체가 거부되거나 다음과 같이 타임아웃이 발생합니다.

image

예제는 AWS로 진행되지만, 이는 모든 클라우드 서비스가 동일합니다.







따라서 private 인스턴스의 데이터베이스에 접속하기 위해서는 별도의 방법이 필요한데요, 여기에는 배스천 인스턴스(Bastion Instance) 또는 Connect Endpoint 두 가지 방법이 존재합니다. 이번 포스팅에서는 배스천 인스턴스를 통해 어떻게 로컬에서 private 인스턴스의 데이터베이스에 접속하는지 살펴보겠습니다.

배스천 인스턴스(Bastion Instance)에 대해서는 알고 있다는 전제로 진행하겠습니다.







3. 해결책


IntelliJ를 사용할 경우, 데이터베이스 연결 탭에서 PASSWORD, Key Pair, OpenSSH config and authentication agent 와 같은 SSH 접속 에 대한 세 가지 옵션을 선택할 수 있습니다. 각 설정을 어떻게 하는지 하나씩 살펴보죠.

image







3-1. PASSWORD

패스워드를 사용할 경우, 배스천 인스턴스에 접속 후, /etc/ssh/sshd_config 에 있는 PasswordAuthentication 옵션을 yes로 바꿔야 합니다.

1
2
3
4
5
6
7
8
9
10
11
......

# Explicitly disable PasswordAuthentication. By presetting it, we
# avoid the cloud-init set_passwords module modifying sshd_config and
# restarting sshd in the default instance launch configuration.
PasswordAuthentication yes
PermitEmptyPasswords no

......





이후 SSH 데몬을 재시작 합니다.

1
$ sudo systemctl restart sshd





다음으로 PASSWORD를 지정하면 다음과 같이 성공했다는 문구를 볼 수 있습니다.

1
2
3
4
$ sudo passwd ec2-user
$ New password:
$ Retype new password:
$ passwd: all authentication tokens updated successfully.





마지막으로 IntelliJ에서 PASSWORD를 선택한 후, 비밀번호를 입력하면 다음과 같이 접속이 성공한 것을 볼 수 있습니다. 이 방법은 비밀번호만 알면 누구나 접속이 가능하기 때문에 그렇게 권장하는 방법은 아닙니다.

image







3-2. Key Pair

Key Pair 접속은 간단합니다. 자신의 pem 키 경로만 입력해 주면, 접속이 완료됩니다.

image







3-3. OpenSSH config and authentication agent

OpenSSH config and authentication agent는 ~/.ssh/config 경로의 설정 파일에 인스턴스 정보를 등록해야 합니다.

1
$ vi ~/.ssh/config





아래와 같이요. 각 변수에는 자신의 인스턴스 정보를 등록합니다.

1
2
3
4
5
6
7
8
9
10
11
12
# Bastion Host 설정
Host bastion
    HostName ${BASTION_INSTANCE_PUBLIC_IP}
    User ec2-user
    IdentityFile ${PEM_KEY_PATH}.pem
    ForwardAgent yes

# 프라이빗 인스턴스 설정
Host private-instance
    HostName ${PRIVATE_INSTANCE_IP}
    User ec2-user
    ProxyJump bastion





다음으로 SSH 에이전트를 시작하고 SSH 키를 추가한 후, private 인스턴스로 접속합니다. 이후 ~/.ssh/config 의 파일을 열고 배스천 호스트와 private 인스턴스에 대한 설정을 추가합니다.

1
2
3
$ eval "$(ssh-agent -s)"
$ ssh-add ${PEM_KEY_PATH}.pem
$ ssh private-instance





마지막으로 데이터베이스의 정보를 입력한 후 연결하면 로컬에서 접속이 된 것을 볼 수 있습니다. pem키 방식이 가장 안전한데요, 이 외에도 IAM을 통한 접속도 있습니다. 이는 별도의 포스팅을 통해 다루도록 하겠습니다.

image







4. 정리


로컬에서 어떻게 클라우드에 존재하는 데이터베이스에 안전하게 접속하는지 대해 살펴보았습니다. 방법은 다양한데요, 가급적 pem 키를 통해 접속할 것을 권장드립니다.


This post is licensed under CC BY 4.0 by the author.