Amazon Web Services 한국 블로그

신규 EC2 Serial Console 기능 출시 – 부팅 및 네트워킹 문제 해결

정식 서비스 중 발생하는 문제 해결은 시스템 및 네트워크 관리자의 주요 책임 중 하나입니다. 사실 저에게는 항상 이것이 인프라 엔지니어링에서 가장 흥미로운 부분 중 하나였습니다. 당면한 문제에 필요한 만큼 깊이 파고들면 결국 문제를 해결할 수 있을 뿐만 아니라 그 과정에서 보통은 알 수 없는 많은 것을 배우게 됩니다.

운영 체제는 확실히 그러한 기회를 제공합니다. 시간이 지남에 따라 운영 체제가 점점 더 복잡해지면서 관리자는 수많은 구성 파일 및 설정을 익혀야 합니다. Infrastructure as Code와 자동화로 서버 프로비저닝 및 관리가 크게 향상되었지만 시스템의 올바른 시작을 방해하는 실수와 고장이 발생할 여지는 항상 있습니다. 하드웨어 드라이버 누락, 잘못 구성된 파일 시스템, 잘못된 네트워크 구성, 잘못된 권한 등 목록은 끝이 없습니다. 설상가상으로 많은 문제로 인해 사실상 관리자가 시스템에서 차단되어 로그인, 문제 진단 및 적절한 수정 사항 적용이 불가능합니다. 유일한 선택권은 서버에 대한 대역 외 연결을 설정하는 것입니다. 지금까지 고객은 EC2 인스턴스의 콘솔 출력을 볼 수 있지만 상호 작용할 수는 없었습니다.

오늘 Amazon Elastic Compute Cloud(EC2) 인스턴스에 대한 직렬 연결을 설정하여 부팅 및 네트워크 연결 문제를 해결하는 간단하고 안전한 방법인 EC2 Serial Console이 발표되었습니다.

EC2 Serial Console 소개
EC2 Serial Console 액세스가 AWS Nitro 시스템을 기반으로 하는 EC2 인스턴스에 제공됩니다. EC2 Serial Console은 모든 주요 Linux 배포판, FreeBSD, NetBSD, Microsoft Windows 및 VMWare를 지원합니다.

유효한 네트워크 구성이 없어도 AWS 관리 콘솔의 브라우저 기반 셸이나 관리형 콘솔 서버에 대한 SSH 연결을 사용하여 인스턴스에 연결할 수 있습니다. 인스턴스에서 sshd 서버를 실행할 필요가 없습니다. 유일한 요구 사항은 로그인에 사용할 암호가 루트 계정에 할당되어 있어야 한다는 것입니다. 그러면 인스턴스의 직렬 포트 중 하나에 직접 연결된 키보드와 모니터가 있는 것처럼 명령을 입력할 수 있습니다.

또한 운영 체제별 프로시저를 트리거할 수 있습니다.

  • Linux에서는 Magic SysRq 명령을 트리거하여 크래시 덤프를 생성하고 프로세스를 종료하는 등의 작업을 수행할 수 있습니다.
  • Windows에서는 부팅 프로세스를 중단하고 Emergency Management Service(EMS)와 Special Admin Console(SAC)을 사용하여 안전 모드로 부팅할 수 있습니다.

인스턴스의 콘솔에 대한 액세스 권한을 얻는 것은 엄격하게 제어해야 하는 권한이 있는 작업이므로 EC2 Serial Console 액세스는 계정 수준에서 기본적으로 허용되지 않습니다. 계정에서 액세스를 허용하면 이 계정의 모든 인스턴스에 해당 설정이 적용됩니다. 또한 관리자는 서비스 제어 정책으로 조직 수준에서 제어를 적용하고 AWS Identity and Access Management(IAM) 권한으로 인스턴스 수준에서 제어를 적용할 수 있습니다. 예상대로 EC2 Serial Console과의 모든 통신은 암호화되며 각 세션에 대해 고유한 키가 생성됩니다.

Linux로 간단한 데모를 해보겠습니다. 이 프로세스는 다른 운영 체제와 유사합니다.

AWS 관리 콘솔을 사용하여 EC2 Serial Console에 연결
먼저 Amazon Linux 2 인스턴스를 시작합니다. 이 인스턴스에 로그인할 때 이더넷 네트워크 인터페이스(/etc/sysconfig/network-scripts/ifcfg-eth0)에 대한 네트워크 구성을 변경하여 완전 가짜인 정적 IP 주소를 설정하기로 결정했습니다. 프로덕션 인스턴스에서는 이를 시도하지 마세요.

그런 다음 인스턴스를 재부팅합니다. 몇 초 후 인스턴스가 EC2 콘솔에서 실행되고 있고 포트 22가 보안 그룹에서 열려 있지만 SSH로 인스턴스에 연결할 수 없습니다.

$ ssh -i ~/.ssh/mykey.pem ec2-user@ec2-3-238-8-46.compute-1.amazonaws.com
ssh: connect to host ec2-3-238-8-46.compute-1.amazonaws.com port 22: Operation timed out

이제 EC2 Serial Console이 나설 차례입니다.

먼저 내 계정에서 콘솔 액세스를 허용해야 합니다. EC2 설정에서 확인란을 선택하기만 하면 됩니다.

콘솔 사용 설정

그런 다음 EC2 콘솔에서 인스턴스 이름을 마우스 오른쪽 버튼으로 클릭하고 [모니터 및 문제 해결(Monitor and troubleshoot)]을 선택한 다음 [EC2 Serial Console]을 선택합니다.

그러면 연결할 인스턴스 ID와 직렬 포트 번호를 확인하는 새 창이 열립니다. [연결(Connect)]을 클릭하기만 하면 됩니다.

브라우저에서 새 탭이 열립니다. Enter 키를 누르면 익숙한 로그인 프롬프트가 표시됩니다.

Amazon Linux 2
Kernel 4.14.225-168.357.amzn2.x86_64 on an x86_64
ip-172-31-67-148 login:

루트로 로그인하면 친숙한 쉘 프롬프트가 표시됩니다.

이 세션에 Magic SysRq를 사용하도록 설정(sysctl -w kernel.sysrq=1)하여 먼저 사용 가능한 명령을 나열(CTRL-0 + h)한 다음 메모리 보고서를 요청합니다(CTRL-0 + m). 아래 이미지를 클릭하면 더 크게 볼 수 있습니다.

콘솔에 연결

멋지지 않습니까? 이것은 복잡한 문제를 해결하는 데 확실히 유용합니다. 여기서는 필요하지 않습니다. 네트워크 인터페이스에 대한 유효한 구성을 빠르게 복원하고 네트워크 스택을 다시 시작합니다.

인스턴스에 연결을 다시 시도하면 문제가 해결되었음을 확인할 수 있습니다.

$ ssh -i ~/.ssh/mykey.pem ec2-user@ec2-3-238-8-46.compute-1.amazonaws.com

__|   __|_  )
_|   (    / Amazon Linux 2 AMI
___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-172-31-67-148 ~]$

이제 AWS 명령줄 인터페이스를 사용하여 동일한 명령을 빠르게 보여드리겠습니다.

AWS CLI를 사용하여 EC2 Serial Console에 연결
이것도 똑같이 간단합니다. 먼저 인스턴스 키 페어의 SSH 퍼블릭 키를 직렬 콘솔에 전송합니다. file:// 접두사를 추가하세요.

$ aws ec2-instance-connect send-serial-console-ssh-public-key --instance-id i-003aecec198b537b0 --ssh-public-key file://~/.ssh/mykey.pub --serial-port 0 --region us-east-1

그런 다음 <instance id>.port<port number>를 사용자 이름으로 사용하여 직렬 콘솔에 ssh를 사용합니다. 그러면 로그인 프롬프트가 표시됩니다.

$ ssh -i ~/.ssh/mykey.pem i-003aecec198b537b0.port0@serial-console.ec2-instance-connect.us-east-1.aws

Amazon Linux 2
Kernel 4.14.225-168.357.amzn2.x86_64 on an x86_64
ip-172-31-67-148 login:

로그인하면 Magic SysRq를 사용할 수 있으며 ~B+명령으로 이를 트리거할 수 있습니다. ~로 콘솔 세션을 종료할 수도 있습니다.

EC2 Serial Console 시작하기
보시다시피 EC2 Serial Console을 사용하면 EC2 인스턴스에서 발생하는 복잡한 부팅 및 네트워크 문제를 훨씬 쉽게 디버깅하고 수정할 수 있습니다. 지금 바로 다음 AWS 리전에서 EC2 Serial Console을 추가 비용 없이 사용할 수 있습니다.

  • 미국 동부(버지니아 북부), 미국 서부(오레곤), 미국 동부(오하이오)
  • 유럽(아일랜드), 유럽(프랑크푸르트)
  • 아시아 태평양(도쿄), 아시아 태평양(시드니), 아시아 태평양(싱가포르)

사용해보시고 여러분의 의견을 알려주세요. 언제나 여러분의 피드백을 기다립니다. 일반 AWS Support 담당자를 통해 보내거나, EC2 서비스 AWS Forum을 통해 보내실 수 있습니다.

– Julien