지원되는 연결 대상은 다음과 같습니다
Bastion Concepts
Bastion Session을 사용하면 SSH 키 쌍의 개인 키를 소유한 권한 있는 사용자가 미리 지정된 시간 동안 대상 리소스에 연결할 수 있습니다. Session을 생성할 때는 SSH 키 쌍의 공개키를 제공해야 하고, Session에 연결할 때에는 개인키를 제공해야 합니다. 또한 허용되는 범위내의 IP 주소에서 연결을 시도해야 합니다.
Bastion Session은 3가지 유형을 지원합니다. 1) Managed SSH Session
Managed SSH Session은 OCI Compute Instance에 직접 접속을 위한 세션입니다. 기본적으로 다음 요건을 만족해야 합니다.
Session은 대상 인스턴스의 IP와 22번 포트를 통해서 연결합니다. (대상 Subnet Security List의 Ingress Rule 추가 필요)
2) SSH 포트 포워딩(PORT FORWARDING) SESSION
포트 포워딩(PORT FORWARDING) (또는 SSH 터널링)은 클라이언트의 특정포트와 대상 리소스의 특정 포트가 서로 보안 연결을 생성해 주며, 이 연결을 통해서 다른 형태의 프로토콜을 중재할 수 있습니다. SSH를 통해서 아래 프로토콜을 포함하여 대부분의 TCP 서비스를 터널링합니다.
Session은 linux 인스턴스의 경우 22번 포트, Windows의 RDP의 경우 3389번 포트, Oracle DB System은 1521번 포트, MySQL DB System은 3306번 포트를 사용합니다. (대상 Subnet Security List의 Ingress Rule 추가 필요)
예를 들어 Oracle SQL Developer를 사용하여 Autonomous Database for Transaction Processing 이나 Mixed Workloads database의 Private Endpoint에 접속할 수 있습니다. 또한 SSH를 통해 기본 암호화되므로, VNC(Virtual Network Computing)과 같은 암호화되지 않은 프로토콜을 사용하는 정보를 전송하는 경우에도 유용할 수 있습니다.
3) 동적 포트 전달(DYNAMIC PORT FORWARDING) (SOCKS5) SESSION
동적 포트 전달(SOCKS5) 세션은 SSH 포트 포워딩 세션과 동일한 이점을 갖지만 Private Subnet의 모든 대상 리소스에 동적으로 연결할 수 있습니다. 특정 대상 리소스(IP 주소 또는 DNS 이름)에 연결하도록 구성하는 다른 세션 유형과 달리 동적 포트 전달(SOCKS5) 세션을 사용하면 대상 서브넷에 대한 터널을 생성하고 클라이언트에서 연결할 리소스와 포트를 결정할 수 있습니다.
1) 대상 인스턴스의 Cloud Agent Bastion Plugin을 활성화 합니다. 우선 해당 인스턴스를 선택하고 상세 페이지의 Oracle Cloud Agent를 클릭합니다.
2) Bastion Plugin을 Enable 합니다. Running 상태가 되어야 합니다. (대략 10분정도 걸림)
3) OCI Menu > Identity & Security > Bastion 으로 이동한 후 Create Bastion 버튼을 클릭합니다.
4) 다음과 같이 입력한 후 마지막으로 Create Basion 버튼을 클릭합니다.
5) Session 생성
Bastion 상세 화면에서 Create Session버튼을 클릭한 후 다음과 같이 입력/선택한 후 Create Session을 클릭합니다.
6) 인스턴스 접속
생성한 세션 우측 아이콘클릭 후 Copy SSH command를 클릭합니다.
다음과 같은 명령어가 복사됩니다.
ssh -i <privateKey> -o ProxyCommand="ssh -i <privateKey> -W %h:%p -p 22 ocid1.bastionsession.oc1.ap-seoul-1.amaaaaaakv6tzsaa6hgqj2dtvpuzczfuiywe32zo3fqqpu5fvyo6l4n5fxiq@host.bastion.ap-seoul-1.oci.oraclecloud.com" -p 22 opc@10.0.1.252
이제
ssh -i id_rsa -o ProxyCommand="ssh -i id_rsa -W %h:%p -p 22 ocid1.bastionsession.oc1.ap-seoul-1.amaaaaaakv6tzsaa6hgqj2dtvpuzczfuiywe32zo3fqqpu5fvyo6l4n5fxiq@host.bastion.ap-seoul-1.oci.oraclecloud.com" -p 22 opc@10.0.1.252
The authenticity of host 'host.bastion.ap-seoul-1.oci.oraclecloud.com (192.29.26.85)' can't be established.
ED25519 key fingerprint is SHA256:I5vDR3ZJW956EFdxWd3iavCmUOKGTdSvVftlrOG74pY.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'host.bastion.ap-seoul-1.oci.oraclecloud.com' (ED25519) to the list of known hosts.
The authenticity of host '10.0.1.252 (<no hostip for proxy command>)' can't be established.
ED25519 key fingerprint is SHA256:D0M5MG4NXSC5p+zM25HMR9njCkZPfrAuhS8zvAWjVJ8.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.1.252' (ED25519) to the list of known hosts.
[opc @privatevm ~]$
이번에는 Bastion을 통해서 Oracle Database Cloud Service (Base Database Service)에 SQL Developer로 접속을 해보도록 합니다.
Oracle Base Database (19c)는 사전에 Private Subnet에 프로비저닝을 한 상태에서 진행합니다. Bastion이 있는 Subnet에서 Oracle Base Database가 있는 Subnet으로 1521 포트 접근이 가능하도록 Security List Ingress Rule도 사전에 추가합니다.
사전에 프로비저닝한 DB의 정보는 다음과 같습니다.
1) 먼저 Bastion 상세 화면에서 포트 포워딩 세션을 생성합니다.
Create Session 버튼을 클릭하여 세션을 생성합니다.
2) 생성한 세션 우측 아이콘을 클릭한 후 Copy SSH Command를 선택합니다.
다음과 같은 명령어가 복사됩니다.
ssh -i <privateKey> -N -L <localPort>:10.0.1.250:1521 -p 22 ocid1.bastionsession.oc1.ap-seoul-1.amaaaaaakv6tzsaa6ia63pbstvrvh2tkdbsqxgruk4b2zgsupexg4ucpty7q@host.bastion.ap-seoul-1.oci.oraclecloud.com -v
이제 다음과 같이
ssh -i id_rsa -N -L 1521:10.0.1.250:1521 -p 22 ocid1.bastionsession.oc1.ap-seoul-1.amaaaaaakv6tzsaa6ia63pbstvrvh2tkdbsqxgruk4b2zgsupexg4ucpty7q@host.bastion.ap-seoul-1.oci.oraclecloud.com -v
디버깅 로그 마지막 라인에 debug1: pledge: id가 보이면 성공입니다.
3) 이제 SQL Developer에서 접속해보도록 합니다.
마지막으로 동적 포트 전달(SOCKS5) 세션을 생성해서 Private VM에 접속해 보도록 합니다.
1) Bastion 상세 화면에서 Create Session을 클릭한 후 다음과 같이 입력 후 생성합니다.
Create Session 버튼을 클릭하여 세션을 생성합니다.
생성된 세션의 우측 아이콘을 클릭한 후 Copy SSH command를 클릭하면 다음과 같은 명령어를 얻을 수 있습니다.
ssh -i <privateKey> -N -D 127.0.0.1:<localPort> -p 22 ocid1.bastionsession.oc1.ap-seoul-1.amaaaaaakv6tzsaa77ecydvmmere4svjfknax2kau4gvwgie7wmkmq74u4ha@host.bastion.ap-seoul-1.oci.oraclecloud.com
2) SOCKS5 접속 SOCKS5 접속을 위해서는 SOCKS5 지원 클라이언트를 사용하여야 합니다. Putty 및 다양한 웹 브라우저가 SOCKS5 프로토콜을 지원합니다.
SOCKS5 연결은 아래 포스팅을 참고하시기 바랍니다. (Firefox 및 Putty)
New SOCKS support for Bastion Service
이 글은 개인적으로 얻은 지식과 경험을 작성한 글로 내용에 오류가 있을 수 있습니다. 또한 글 속의 의견은 개인적인 의견으로 특정 회사를 대변하지 않습니다.
Donghu Kim INFRASTRUCTURE
oci bastion