EC2에 SSH 키 없이 접속하기, Session Manager로 22번 포트를 닫는 순서
EC2 인스턴스에 접속하는 가장 익숙한 방법은 보안 그룹에서 22번 포트를 열고, 키 페어 파일로 SSH 접속하는 것입니다. 처음에는 간단하지만, 사람이 늘어나면 키 파일을 누구에게 줬는지, 퇴사한 사람의 키는 지웠는지, 22번 포트가 어디에 열려 있는지를 관리하는 일이 점점 커집니다.
AWS Systems Manager의 Session Manager는 인바운드 포트를 열지 않고도 브라우저나 AWS CLI에서 인스턴스의 셸에 접속하게 해 주는 기능입니다. 접속 권한은 SSH 키가 아니라 IAM 정책으로 주고, 누가 언제 접속했는지는 CloudTrail과 로그로 남길 수 있습니다.
이 글에서는 Session Manager가 포트 없이 연결되는 원리, 사용하기 위해 갖춰야 할 조건, 실제 설정 순서, 접속 기록을 남기는 방법, 그리고 요금을 정리합니다.
필요한 조건은 세 가지뿐입니다. 인스턴스에 SSM Agent가 동작하고, AmazonSSMManagedInstanceCore 정책이 붙은 IAM 역할이 연결되어 있으며, 443번 포트로 Systems Manager 엔드포인트에 나갈 수 있으면 됩니다. 이 조건이 갖춰지면 22번 포트는 닫아도 되고, EC2 인스턴스에 대한 Session Manager 사용에는 추가 요금이 없습니다.

포트를 열지 않고 연결되는 원리
SSH는 사용자의 PC가 인스턴스의 22번 포트로 직접 들어가는 방식입니다. 반면 Session Manager는 인스턴스 안의 SSM Agent가 먼저 Systems Manager 서비스로 나가는 연결을 만들어 두고, 사용자의 요청을 그 연결을 통해 전달받습니다. 인스턴스 입장에서는 밖으로 나가는 연결만 있으므로 들어오는 포트를 열 필요가 없습니다.

- 사용자가 콘솔이나 CLI에서 세션 시작을 요청합니다.
- Session Manager가 사용자의 IAM 권한과 세션 설정을 확인합니다.
- 권한이 맞으면 인스턴스의 SSM Agent에 양방향 연결을 열라는 메시지를 보냅니다.
- 연결이 열리면 사용자가 입력한 명령과 그 결과가 이 채널을 통해 오갑니다.
사용자와 인스턴스 사이의 통신은 TLS 1.2로 암호화되고, 세션을 만드는 요청은 서명된 AWS API 요청으로 처리됩니다. 필요하면 KMS 키로 세션 데이터를 한 번 더 암호화할 수도 있습니다.
SSH 접속과 Session Manager 비교
| 구분 | SSH 키 접속 | Session Manager |
|---|---|---|
| 인바운드 포트 | 22번 열어야 함 | 열 필요 없음 |
| 접속 권한 | 키 파일을 가진 사람 | IAM 정책으로 허용된 사람 |
| 권한 회수 | 키를 인스턴스마다 지워야 함 | IAM 권한만 회수 |
| 프라이빗 서브넷 인스턴스 | 배스천 호스트를 거쳐야 함 | VPC 엔드포인트로 바로 접속 |
| 접속 기록 | 인스턴스 안 로그를 따로 수집 | CloudTrail, S3, CloudWatch Logs로 기록 |
배스천 호스트를 운영하면 그 서버 자체의 패치와 보안 그룹 관리가 따로 필요하고, 퍼블릭 IPv4 주소에도 시간당 요금이 붙습니다. Session Manager로 바꾸면 이 서버를 없애고 접속 통로를 IAM 하나로 모을 수 있습니다.
Session Manager 설정 순서
설정은 인스턴스 쪽 준비와 네트워크 확인으로 나뉩니다. 처음 한 번만 해 두면 이후 새로 만드는 인스턴스에도 같은 역할을 붙이기만 하면 됩니다.
- SSM Agent를 확인합니다. Amazon Linux 2023, Amazon Linux 2, Ubuntu Server 18.04~24.04 LTS, Windows Server 2016 이후 AMI 등에는 대개 미리 설치되어 있으며, 최소 2.3.68.0 이상이어야 합니다.
- IAM 역할을 만들어 AWS 관리형 정책 AmazonSSMManagedInstanceCore를 붙이고, 인스턴스의 IAM 역할로 연결합니다.
- 인스턴스가 443번 포트로 ssm, ssmmessages, ec2messages 엔드포인트에 나갈 수 있는지 확인합니다. 보안 그룹의 기본 아웃바운드 규칙은 모든 트래픽을 허용합니다.
- 인터넷이 없는 프라이빗 서브넷이라면 NAT 게이트웨이를 두거나, 위 세 서비스의 인터페이스 VPC 엔드포인트를 만듭니다.
- 몇 분 뒤 EC2 콘솔의 연결 버튼에서 Session Manager 탭을 선택해 접속되는지 확인합니다.
- 접속이 확인되면 보안 그룹에서 22번 포트 인바운드 규칙을 삭제합니다.
AWS CLI로 접속하려면 CLI 1.16.12 이상과 Session Manager 플러그인을 PC에 설치한 뒤 aws ssm start-session --target 인스턴스ID 명령을 사용합니다. 세션은 인스턴스에 자동으로 만들어지는 ssm-user 계정으로 열리며, 이 계정은 기본적으로 관리자 권한을 가지므로 필요하면 권한을 줄일 수 있습니다.
접속 기록 남기기와 요금
Session Manager의 큰 장점은 접속 기록을 한곳에 모을 수 있다는 것입니다. 세션 시작과 종료 같은 API 호출은 CloudTrail에 기록되고, 세션 안에서 입력한 명령과 출력은 설정에 따라 S3 버킷이나 CloudWatch Logs로 보낼 수 있습니다. EventBridge 규칙을 만들면 누군가 세션을 시작할 때 SNS로 알림을 받을 수도 있습니다.
| 기록 대상 | 무엇이 남나 | 설정 |
|---|---|---|
| CloudTrail | 누가 언제 어느 인스턴스에 세션을 열고 닫았는지 | 기본으로 기록(이벤트 기록·추적) |
| S3 버킷 | 세션 중 입력·출력 내용 | Session Manager 기본 설정에서 지정 |
| CloudWatch Logs | 세션 내용 스트리밍 | Session Manager 기본 설정에서 지정 |
| EventBridge·SNS | 세션 시작·종료 알림 | EventBridge 규칙 생성 |
다만 포트 포워딩이나 Session Manager를 통한 SSH 세션은 데이터가 SSH로 한 번 더 암호화되기 때문에 세션 내용 로그가 남지 않습니다. 요금은 EC2 인스턴스에서 쓰는 경우 추가 요금이 없습니다. 온프레미스 서버나 다른 클라우드의 하이브리드·멀티클라우드 노드는 2026년 9월 30일부터 세션당 0.05달러가 부과됩니다. S3나 CloudWatch Logs로 보낸 로그의 저장 요금과 VPC 엔드포인트 요금은 각 서비스 요금으로 따로 계산됩니다.
포트 포워딩으로 프라이빗 데이터베이스에 접속하기
Session Manager는 셸 접속뿐 아니라 포트 포워딩도 지원합니다. 프라이빗 서브넷에 있는 RDS 데이터베이스처럼 인터넷에서 직접 닿지 않는 리소스에 PC의 데이터베이스 도구로 접속해야 할 때, 배스천 호스트 대신 같은 VPC의 인스턴스를 통로로 쓸 수 있습니다.
- 데이터베이스에 접근할 수 있는 VPC 안의 인스턴스를 Session Manager로 접속 가능하게 준비합니다.
- PC에서 AWS CLI로 원격 호스트 포트 포워딩 문서(AWS-StartPortForwardingSessionToRemoteHost)를 지정해 세션을 시작하고, 대상 호스트로 데이터베이스 엔드포인트와 포트를, 로컬 포트로 PC에서 쓸 포트를 넣습니다.
- 데이터베이스 도구에서 localhost와 지정한 로컬 포트로 접속합니다.
이 방식도 인스턴스와 데이터베이스 어디에도 인바운드 포트를 인터넷에 열 필요가 없습니다. 다만 앞에서 설명한 것처럼 포트 포워딩 세션은 세션 내용 로그가 남지 않으므로, 데이터베이스 자체의 접속 기록과 함께 관리하는 것이 좋습니다.
요약
Session Manager는 인스턴스의 SSM Agent가 밖으로 만든 연결을 이용해 셸 접속을 제공하므로 22번 포트와 배스천 호스트, SSH 키가 필요 없습니다. SSM Agent, AmazonSSMManagedInstanceCore 정책이 붙은 IAM 역할, 443번 아웃바운드 연결만 갖추면 되고, 접속 권한은 IAM으로 주고 회수합니다. EC2에서는 추가 요금이 없으며, 세션 기록은 CloudTrail과 S3, CloudWatch Logs로 남길 수 있습니다.
설정하다 자주 막히는 부분
콘솔에서 Session Manager 연결 버튼이 비활성화되어 있어요.
인스턴스가 아직 관리형 노드로 등록되지 않은 경우입니다. IAM 역할이 연결되어 있는지, SSM Agent가 실행 중인지, 443 아웃바운드가 막히지 않았는지 차례로 확인하고, 역할을 붙인 직후라면 몇 분 기다려 보세요.
파일을 주고받으려면 어떻게 하나요?
Session Manager 화면에는 파일 전송 기능이 없으므로, S3 버킷을 거쳐 인스턴스에서 내려받는 방식이 가장 간단합니다. 꼭 필요하다면 Session Manager를 통한 SSH 연결로 scp를 쓸 수 있지만, 이때는 세션 내용 로그가 남지 않습니다.
특정 인스턴스에만 접속을 허용할 수 있나요?
IAM 정책의 Resource에 인스턴스 ARN을 지정하거나, 태그 조건을 걸어 특정 태그가 붙은 인스턴스에만 세션을 열도록 제한할 수 있습니다.
22번 포트를 닫으면 기존 배포 도구가 안 될 수도 있나요?
SSH로 접속해 배포하는 도구를 쓰고 있다면 영향을 받습니다. 이런 경우 Systems Manager의 명령 실행 기능이나 Session Manager를 통한 SSH 연결로 바꾼 뒤 포트를 닫는 것이 안전합니다.
열려 있는 22번 포트는 자동화된 스캐너가 가장 먼저 두드리는 문입니다. 키 파일 관리까지 사람이 챙겨야 하는 구조는 계정과 인원이 늘어날수록 빈틈이 생기기 쉽습니다.
지금 운영 중인 인스턴스가 있다면 보안 그룹에서 22번 포트가 0.0.0.0/0으로 열려 있는 곳이 있는지부터 확인해 보세요. 한 대에 먼저 IAM 역할을 붙여 Session Manager 접속을 확인한 뒤 포트를 닫는 식으로 하나씩 옮기면, 서비스 중단 없이 접속 방식을 바꿀 수 있습니다.
함께 읽으면 좋은 글: 보안 그룹과 네트워크 ACL 차이 / 퍼블릭 IPv4 주소 요금
참고 자료: AWS Systems Manager Session Manager, Session Manager 사전 요구 사항, SSM Agent가 설치된 AMI, AWS Systems Manager 요금
※ 본 글은 2026년 9월 기준 AWS Systems Manager 사용 설명서와 요금 페이지를 참고해 작성했으며, 요구 사항과 요금은 변경될 수 있으니 최신 내용은 AWS 공식 문서에서 확인해 주세요.