본문 바로가기

개발노트/LINUX

AWS SSM > session manager 를 이용하여 EC2 접속하기

부제

SSH key 없이, AWS Access Key 로 원격에서 EC2 의 shell 을 실행하기

 

예상 효과 & 목적

  1. EC2 접속을 위한 SSH Key 관리를 하지 않아도 되게 함으로써 개발자 생산성 향상
    • 새로운 팀원에게 SSH Key 를 발급해주거나, 기존 Key 를 전달하는 과정 등에서 보안 취약점이 생길 수 있음
    • 또한 SSH Key 관리를 한다는 것 자체가 개발자/인프라 담당자의 생산성을 저하시키는 업무가 될 수 있음
    • Bastion 서버를 따로 운영하지 않아도 됨
    • 같은 망이 아닌, 원격에서도 Private Subnet 에 있는 EC2 에 바로 접속할 수 있어서 개발자 생산성 향상시킬 수 있음
  2. SSH 접속 기록을 CloudWatch 또는 S3 에 log 를 남기는 것을 통해 보안 감사 capability 확보
    • 누가(어떤 Access Key 가 사용돼) EC2 에 접속했고, 뭘 했으며 STDOUT 으로 뭘 남겼는지를 CloudWatch 나 S3 로 분석 가능
  3. SSH 접속을 위한 Security Group 을 따로 설정할 필요 없음. 즉 22번 포트를 open 시키지 않아도 됨.

 

준비물 & 절차

  1. EC2 자체 및 linux user 추가
    • EC2 에 초기 연결된 SSH Key 로 접속한 다음 session manager 를 이용하여 접속할 linux user 를 추가 (adduser 또는 useradd 이용)
      • AWS 자체적으로 여러 서비스에서 사용하는 sudoer 인 ec2-user 나 ssm-user 로 직접 접속하지 않도록 하기 위함
  2. EC2 에 할당할 IAM Role 에 `AmazonSSMManagedInstanceCore` 라는 권한 정책(Pemission policies)을 추가(Addition)하기
  3. EC2 에 ssm-agent 설치
    1. https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html   
    2. Amazon Linux2 기준 : 대부분의 경우에는 SSM Agent 가 default 로 설치돼있기 때문에 이 OS 를 설치할 경우 따로 ssm-agent 를 설치할 필요가 없다 - 설명글 링크   
  4. ssm > session manager > Preferences 설정
    • idle session timeout : default 값은 20분으로 설정돼있는 듯. 조직의 상황에 맞게 적절한 값을 적용하면 됨
    • Run As
      • 이 값은 비워두는 것이 가능하고, 비워두는 것이 보안상 더 적절할 것 같다. (ec2-user 또는 ssm-user 를 지정할 수도 있긴 하나, 새로 생성해둔 linux user 로 접속하게 하는 의도를 드러냄과 동시에 어느정도의 강제성을 부여하기 위해 비워두는 것이 더 좋을 수 있다.)
    • Maximum session duration
    • KMS encryption
  5. CloudWatch logging 설정
    • Enable 하기
    • logging option(streaming 으로 할 것인지 end of session 의 순간에 한 번에 업로드 할 것인지) 및 log group 지정
  6. session manager 를 이용하여 EC2 에 접속할 IAM User(개발자 계정)에서 접속을 할 수 있게 Permission policies 추가(Allow) 및 IAM User 에 "1" 에서 추가한 linux user 를 지정하기 위해 tagging 하기
    • IAM User 에 최소한으로 필요한 권한 정책(Permission policies) 목록
      • ssm:StartSession
      • ssm:TerminateSession
    • IAM User 에 태깅할 Key & Value
      • Key : SSMSessionRunAs
      • Value : "1" 에서 추가한 linux username
  7. session manager 를 이용하여 EC2 에 접속하기 위한 aws cli 설치 및 설정 & aws cli plugin 설치
    1. aws cli 설치 후 Access Key 설정
    2. aws cli Session Manager plugin 설치 - 설치 매뉴얼 링크   

 

이 과정까지 마치면, "aws ssm start-session" 이라는 명령어와 적절한 option 을 갖고 세팅해놓은 EC2 에 접속하여 shell 에 접근할 수가 있다!

 

부록

중간 과정에 참고가 될 만한 스크린샷들

AWS Systems Manager > Session Manager > Preferences 설정
EC2 접속에 사용할 Access Key 를 갖고 있는 IAM User 의 Tags
aws ssm start-session 명령어로 EC2 접속 시도하는 모습
누가, 언제, 무슨 IAM User 로 session manager 를 이용하여 접속했는지 알 수 있다.
CloudWatch Log Group 에서 로그를 보면 어떤 명령어를 실행했는지, STDOUT 으로 뭐가 출력이 됐었는지를 JSON 형태의 로그를 통해 확인할 수 있다.

반응형