끄적이는 보송

[AWS] AWS CloudShell 본문

STUDY/AWS

[AWS] AWS CloudShell

끄적이는 보송 2022. 2. 19. 21:39
반응형

AWS CloudShell 이란

AWS CloudShell은 브라우저 기반 가상 쉘이다. OS 환경 Amazon Linux 2 기반이며 공통 개발 및 운영 도구가 사전에 설치되어 있어 별도의 구성이나 로컬 설치는 필요하지 않다. CloudShell을 이용해 AWS CLI로 스크립트를 빠르게 실행하는 등 간단하고 접근 편하게 테스팅하기 좋아 보인다. 나아가 Cloudshell 자체는 무료다. CloudShell을 통해서 사용하는 별도의 AWS 서비스만 과금된다. CloudShell 사용 정보는 CloudTrail에 기록된다.

 

포스팅 기준 날짜로 CloudShell을 지원하는 지역은 옆의 이미지와 같다. 생각보다 지원되는 리전은 적지만 앞으로도 추가적인 지원이 될 예정이라고 한다.

 

 

 

AWS CloudShell 접속

해당 서비스를 지원하는 리전의 콘솔 환경에 접속하면 상단의 빨간 박스로 강조한 심볼을 클릭하면 된다. 간단하다

 

 

Safe Paste for multiline text 기능

개인적으로 가장 흥미로웠던 기능이다. 텍스트를 복붙 할 때 원치 않는 것들을 입력하는 것을 방지하는 기능이다. 타사 사이트에서 복사한 텍스트에는 숨겨진 코드가 포함될 수 있는데 이게 쉘 환경에서 예기치 않은 동작을 유발하기도 한다. CloudShell 접속해 복사한 텍스트를 붙여 넣기 하면 다음과 같은 창이 뜬다.

'Paste'를 클릭하면 복사한 텍스트가 붙여 넣기 된다. 실제로 입력될 값을 사전에 미리 확인하게 해주는 좋은 기능이다. 만약 이 기능을 비활성화하고 싶다면 콘솔 화면 우측 상단의 톱니바퀴 모양 설정을 클릭한 후, Safe Paste 기능을 비활성화하면 된다. 

참고로 이 기능 이름에도 써져있지만 'Multiple Line'에 대한 복붙 기능이다. 즉, 단어나 한 문장의 텍스트 복붙에 이 기능은 작동하지 않는다. 처음에 안돼서 조금 당황스러웠다.

 

 

CloudShell 스펙

CloudShell 접속 후, 간단하게 확인해 봤다. CloudShell은 각 리전마다 $HOME 디렉터리에 1GB를 지원한다고 한다. 그 이외에도 메모리는 3.6G에 (찾아본 자료는 2기가라던데 3.6G으로 보인다... 4기가라 하기도 애매한 수치고... 커널 버그인가) CPU 프로세스는 2개로 확인된다. 공식 도큐먼트와는 조금 다른 것 같은데 참고하자.

이 중 $HOME에 저장된 파일, 스크립트, 도구는 세션 간에 유지된다고 하며 각 리전당 1GB의 영구 스토리지(무료)를 함께 제공한다고 한다. 또한 홈 디렉터리 내부에서 변경된 사항만 세션이 끝나도 유지되고 스토리지는 AWS 리전 간에 동기화되지 않는다.

 

 

CloudShell로 AWS리소스 접근

앞 서 설명했듯이 CloudShell은 콘솔에 로그인하는 데 사용된 동일한 자격 증명을 통해 사전 설치되고 사전 인증된 AWS Command Line Interface(CLI)로 Amazon Linux 2 환경에 즉시 액세스 할 수 있다고 했다. 해당 계정 도쿄 리전에 구성되어 있는 S3 버킷 2개를 CLI 명령어로 불러와봤다.

 

일단 CloudShell에 전에 올려둔 pem키를 S3로 업로드 해보았다. 그리고 S3로 성공적으로 업로드한 것을 확인할 수 있다. 나중에 S3로 올라간 저 키로 제한적인 환경에서 서버 접속할 때 사용할 수 있을 듯하다. 물론 저 S3는 Private Bucket이어야 한다.

 

추가로 IAM 정책 수정을 통해 CloudShell을 이용하지 못하게 막을 수 있다. Administrator 혹은 PowerUser Role을 부여받은 User만 CloudShell을 시작할 수 있고 그 외는 아이콘만 보일 뿐 서비스 이용이 불가하다. 

 

 

파일 CloudShell로 Up/Download

오른쪽 위 'Action'에서 파일 업로드/다운로드가 가능하다. 파일 업로드 시 경로는 /home/cloudshell-user이며 앞서 설명했듯이 각 리전당 영구적으로 1GB를 지원한다고 한다. 세션을 다시 시작해도 파일은 유지되었다. 다운로들 할 때는 CloudShell 내에 위치하고 있는 데이터 파일의 경로를 입력하면 된다. $HOME 이외의 경로는 CloudShell에 나갔다 들어오면 다시 돌아간다. 

CloudShell에 있는 데이터($HOME 경로)는 각 지역별로 120일간의 유효기간을 가진다. 기준은 CloudShell Session이 종료된 후 Timer는 작동한다. 다시 Session을 시작하면 Timer도 다시 재설정된다. 데이터가 만료되어 삭제되기 전 AWS에서 'personal health dashboard'에 공지해주니 걱정하지 말자.

 

 

CloudShell에서 EC2로 접속

CloudShell에서 EC2로 접속하려는 목적, 본인의 환경, 접속하려는 EC2 인스턴스 환경 등에 따라 선택할 수 있는 방법은 여러 가지가 있겠지만 여기서는 4번을 해보려 한다.

 

1. 로컬에서 키를 업로드한다.

2. CloudShell에서 키파일을 생성하고 직접 내용을 복붙 한다.

3. 키 필요 없이 Password로 접근 가능한 EC2 계정이 있다면 그냥 Password로 접근한다.

4. 키파일을 Private Bucket에 올리고 CloudShell에서 Private Bucket에 있는 키파일을 다운로드하고 그 키파일로 서버에 접속한다.

 

우선 CloudShell의 IP주소를 확인해야 한다. IP주소가 확인이 됐다면 접속하려는 EC2 인스턴스의 보안 그룹의 Ibound 규칙에 CloudShell IP주소를 Source로 SSH 통신을 허용하도록 설정한다.

curl ifconfig.co

EC2 방화벽을 open 했다면 Private Bucket에 있는 키파일을 다운로드하여 그 키파일로 EC2 서버에 접속한다.

여기서 CloudShell에서 EC2 서버로 접속하는데 제한 사항이 있다. CloudShell에서 Private Subnet에 있는 EC2 인스턴스에 접속할 수 없다는 것. Private VPC에 있는 리소스 접근은 적어도 아직까진 불가능해 보인다. 하지만 방법은 있다. Bastion Host를 사용하면 된다. 10.0.0.154 IP주소의 Bastion Host에 접속해 Bastion Host에서 10.0.2.89 IP주소의 내부 서버에 접근하면 된다.

위 방법대로라면 업무용 컴퓨터가 없더라도 언제 어디서든지 인터넷과 컴퓨터만 있다면 작업에 빠르게 투입할 수 있다. 물론 자신이 선호하는 개발환경을 대체할 수 없겠지만 말이다. 

 

 

CloudShell Session Timeout

테스트 결과 CloudShell 서비스는 대략 20분 정도 뒤면 Session Timout이 발생하는 듯하다.

 

 

CloudShell 오류

가끔 CloudShell에 "Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1"라는 오류 메시지와 함께 파일 업/다운로드가 안되고 CLI 명령어가 안 먹히는 등의 문제가 발생한다면 다른 거 건들 것 없이 새로고침 해주자. 정확한 이유는 아직 모르겠지만 필자는 그렇게 해결했다.

 

 

반응형
Comments