EC2 인스턴스에 Key Pair를 생성하고 SSH를 통해 접속하는 것 보다 더 나은 방법인 SSM 서비스가 있다.
현재 우리 회사는 EC2 인스턴스에 변경된 git 코드를 배포하여 production에 최종적으로 반영을 하도록 구성된다.
EC2 인스턴스에 SSH를 통해 접속하여, docker run을 실행시켜서 task를 분리하고 있는 플로우다.
그러나 문제점은 CI/CD가 제대로 동작하지 않아서, 계속 수동으로 진행하고 있어 번거로움이 존재한다.
배포가 자동화가 되고 있지 않은 원인은
git action을 통해서 CI/CD를 구축하려고 하는데,
SSH 연결은 VPN을 통해서만 허용하도록 하는 것이 보안상 안전하기 때문에
Github Action의 실행 방식 특성 상 불특정 IP를 통해 연결하는 것을 허용할 수 없기 때문에,
이에 대한 적절한 해결책을 찾아서 진행하려고 한다.
해결할 수 있을 만한 방법은
- Github Action Self hosted runner
- AWS SSM (Systems Manager)
를 사용하는 것이다.
Github Action Self-hosted Runner란
Github Actions에서 사용자가 지정하는 로컬 컴퓨팅 자원으로 빌드를 수행하도록 설정이다.
(Github Actions는 사용자가 보유한 컴퓨팅 자원으로 빌드를 수행할 수 있는 Self-hosted runner를 지원)
주로 배포 작업이 많아, 지체되거나, 서버 비용이 부담되는 경우 유용하다고 하다.
GitHub-hosted runners vs Self-hosted runners
github hosted runner 는 워크플로를 더 빠르고 간단한 방법을 제공
self hosted runner는 사용자 정의 환경에서 워크플로를 실행하는 높은 구성 가능성을 가짐
AWS SSM(Systems Manager)
Systems Manager은 여러 AWS 리소스를 그룹화하여 운영 및 유지보수를 자동화하고 효율적으로 관리하기 위한 서비스
[SSM Agent]
Systems Manager는 "AWS 리소스" 또는 "온프레미스 서버"에 "SSM Agent"가 설치되어 있어야 한다.
(Amazon Linux 2 등의 AMI에는 기본적으로 SSM Agent가 설치되어 있다)
Systems Manager는 기본적으로 EC2 인스턴스에서 작업할 권한이 없음
IAM instance profile(인스턴스 프로파일)을 사용하여 권한을 부여해야 한다.
- IAM instance profile: IAM Role을 EC2 인스턴스에 연결하는 컨테이너
- EC2에 접근할 수 있는 IAM Role을 생성해 IAM instance profile에 연결해야 함
둘 중에 어떤 것을 사용해야 하나?
VPN을 통한 SSH만 허용하는 건 보안 측면에서 훌륭한 설계
GitHub Actions는 IP가 매번 바뀌기 때문에 그런 환경에 바로 SSH 연결하기엔 보안 리스크 존재
AWS SSM(Systems Manager) 채택이유
- SSH 포트를 열 필요 없이, AWS IAM 기반 인증을 사용해 명령 실행
- EC2 인스턴스에 대한 직접적 네트워크 접근 필요 X -> 보안 리스크 제거
SSH 등을 애초에 사용하지 않기에 더욱 안전 !!
=> 아 그러면 sshoperator 를 다 python으로 바꿔야 할까..?
- Runner 유지보수, 보안 패치 등 Self-hosted Runner의 관리 부담(SSM은 모든 명령 실행 이력을 CloudTrail/CloudWatch에 저장해 감사 추적 가능)
EC2 인스턴스에 Key Pair를 생성하고 SSH를 통해 접속하는 것
보다 더 나은 방법이라고 한다.
다음 글은 SSM에 대한 도입과, 고민했던 부분,
자세한 이야기를 써보려고 한다.
참고 및 출처
- https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-prerequisites.html
- Github Actions로 초간단 코드 배포하기 (SSH) https://moneygear.tistory.com/41
- AWS SSM을 통해 Private EC2 접속 https://support.bespinglobal.com/ko/support/solutions/articles/73000544870--aws-aws-ssm-%EC%9D%84-%ED%86%B5%ED%95%B4-private-ec2-%EC%A0%91%EC%86%8D%ED%95%98%EA%B8%B0
- AWS Client VPN Endpoint 사용하기 https://musma.github.io/2019/11/04/aws-client-vpn-endpoint.html
- AWS SSM으로 EC2 인스턴스에 접근하기 (SSH 대체) https://musma.github.io/2019/11/29/about-aws-ssm.html
'공부' 카테고리의 다른 글
AWS SSM(system manager) Parameter Store (0) | 2025.04.15 |
---|---|
AWS System Manager(SSW) EC2 인스턴스 연결 설정(SSH 대체) (1) | 2025.04.11 |
elastic search에서 서치와 페이지네이션 (0) | 2025.04.08 |
[CI/CD] Gitlab CI/CD vs Github action vs Jenkins (0) | 2025.04.08 |
Data Warehouse 기반 데이터 플랫폼 Snowflake (0) | 2025.03.31 |