[AWS] EC2 인스턴스 접근 - 윈도우에서 PEM 권한 설정

sookyoung.k·2024년 11월 12일
0

🌿 교보DTS TIL

목록 보기
27/39
post-thumbnail

하루도 그냥 넘어가는 날이 없는 윈도우 ^^^^^^^^^^^^^^^^^^^^^^^^
아 진짜 너무 너무 짜증이 난다 하지만 어쩌겠어 우리는 윈도우로 실습하고 있으니까 해야지


이 글은 Amazon EC2 인스턴스에 접근 중에 발생한 pem키 권한 문제에 대해서 정리하는 글이다. 그렇기 때문에 EC2 인스턴스 생성에 대해서는 생략한다.

Linux 인스턴스에 접근하기 위해서는 SSH 클라이언트를 사용한다. PuTTY를 사용해도 되고, 터미널을 열어도 되는데 걍 푸티쓰세요 터미널을 열었다가 진짜 개빡쳤음.

기본적으로 접근하는 명령어는

ssh -i /your_path/your_key.pem ec2-user@<public_ip>

이러하다. (* 사용자 이름의 경우 amazon linux나 red hat 프리티어를 사용할 경우에는 ec2-user이지만 ubuntu를 사용할 경우 ubuntu로 바꿔줘야 한다. 다른 배포판을 사용할 경우 이름 확인을 꼭 해주어야 한다.)

pem키 주소도 알았고, 인스턴스를 생성했으니 public_ip 주소도 있는데 권한 오류가 생긴다. 보통은 권한이 없어서 문젠데 이새낀 권한이 많아서 문제라고 한다.

🗝️ PEM 키 파일 권한 제한

개인 키를 오직 소유자만 읽을 수 있도록 제한하여, 다른 사용자나 프로세스가 무단으로 접근하는 것을 방지해야 한다.

😠 왜?

바로 보안때문이다.

1. 개인 키 보호

PEM 파일은 EC2 인스턴스에 접근할 수 있는 개인 키를 포함한다.

2. 무단 접근 방지

때문에 우리는 PEM 키에 대한 권한을 제한하여 다른 사용자가 이 파일에 접근하는 것을 막아야 한다. 현재 사용자에게만 읽기 권한을 부여하고 다른 모든 사용자의 접근을 차단한다.

3. SSH 연결 요구사항

SSH 클라이언트는 보안 상의 이유로 개인 키 파일의 권한이 너무 개방적이지 않을 것을 요구한다. 권한이 개방적이면 연결이 거부된다.

4. 보안 모범 사례

AWS 같은 클라우드 서비스 사용 시 권장되는 보안 모범 사례로, 개인 키의 보안 유지는 인스턴스의 보안과도 직결되어 매우 중요한 일이다.

5. 데이터 보호

개인 키에 대한 접근을 제한함으로써 EC2 인스턴스와 그 안에 있는 데이터를 보호할 수 있다.

🔐 권한 설정

권한 설정 명령어는 무엇?! 바로바로 chmod!!

하지만 역시 우리의 윈도우는 기대를 저버리지 않는다. 만일 chmod 명령어를 사용해서 권한을 주려고 시도할 경우

이런 빨간 에러 메시지를 발견할 것이다. 안 먹힌다. 아오...

🖱️ 방법 1. GUI

PEM 파일을 우클릭하고 속성 > 보안 > 고급으로 이동해서 권한을 수동으로 조정해줄 수도 있다. 하지만... 그건 간지가 안 나잖아요?

⌨️ 방법 2. CLI

chmod 대신 윈도우에서 사용할 수 있는 명령어를 찾으면 된다. 멍청한 ai가 한참을 잘못 알려줘서 계속해서 실패하다가 겨우 성공했다. 기강 한 번씩 잡아줘야댐 진짜 ;;

icacls

Windows PowerShell에서는 chmod대신 icacls 명령어를 사용한다.

# 모든 권한 초기화
icacls C:\pem\ubuntu.pem /reset

# 현재 사용자에게 읽기 권한만 부여
icacls C:\pem\ubuntu.pem /grant:r "$($env:username)\$($env:username):(r)"

# 상속 제거 및 상속된 권한 모두 제거 
icacls C:\pem\ubuntu.pem /inheritance:r

# 권한 확인
icacls C:\pem\ubuntu.pem

권한 설정이 이렇게 되면 성공이다.

권한 설정을 reset한 후 원래 권한을 확인해보면 우ㅏ와 같다. 하지만 우리는 먼저 보여준 성공 사진처럼 권한 설정이 되어야 한다.

🌟 icacls C:\pem\ubuntu.pem /grant:r "$($env:username)\$($env:username):(r)"

멍청한 AI가 처음에는 $($env:username)만 알려줘서 한참을 헤맸다. 하지만 GUI로 PEM 권한 설정을 성공한 후에 권한을 비교해보니 무언가 이상한 점을 발견...

이전 ai가 알려준 명령어에서는 $($env:username)만 사용했는데 이렇게 되면 Windows에서는 권한 설정이 제대로 이루어지지 않는다.

왜냐하면 윈도우에서는 로컬 계정과 도메인 계정을 구분한다. 로컬 계정의 경우 전체 이름은 일반적으로 사용자이름(컴퓨터이름)\사용자이름 형식을 따른다. $($env:username)만 사용할 경우 윈도우가 정확히 어떤 계정에 권한을 부여해야 할지 모호해진다. 때문에 $($env:username)\$($env:username) 형식을 사용해야만 권한 설정이 제대로 이루어진다. 윈도우에서 파일 권한을 다룰 때 이 점을 주의해야 한다.

👉 icacls: 윈도우에서 파일 및 폴더의 접근 제어 목록을 표시하거나 수정하는 명령어

👉 C:\pem\ubuntu.pem: PEM키 경로

👉 /grant:r
- /grant: 지정된 사용자나 그룹에 권한 부여
- :r: 기존의 모든 명시적 권한을 대체한다

👉 $($env:username)\$($env:username):(r):
- $($env:username): 현재 로그인 한 사용자 이름
- \$($env:username): 사용자 이름 한 번 더 적으면서 로컬 계정 전체의 이름 지정
- :(r): 읽기 권한만 부여

icacls C:\pem\ubuntu.pem /inheritance:r

위 명령어는 파일의 권한 상속을 제어(제거)한다. /inheritance:r 이 옵션은 파일의 권한 상속을 제거하는 것이다. 이를 통해 상위 폴더로부터의 권한 상속을 차단한다.

보안 설정을 더욱 명확하게 하기 위한 설정이다. 이를 통해서 의도치 않은 접근을 방지한다. 필요한 사용자에게만 최소한의 권한을 부여하는 것이 보안 원칙을 지키는 데 더 도움을 준다.

그래서 이렇게 권한 설정을 잘 해줬다면?!

🙆🏻‍♀️ 인스턴스 접근

ssh -i /your_path/your_key.pem ubuntu@<public_ip>

EC2 인스턴스 터미널에 무사히 접근이 가능하다.


본 포스팅은 글로벌소프트웨어캠퍼스와 교보DTS가 함께 진행하는 챌린지입니다.

profile
영차영차 😎

0개의 댓글