일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- c# 추상 클래스
- jupyter
- github
- 구조체
- 포인터
- 깃
- Python
- c# 윈폼
- 다트 언어
- vim
- docker
- C++
- C언어 포인터
- Houdini
- 도커
- c언어
- jupyter lab
- Algorithm
- C# delegate
- c#
- c# winform
- gitlab
- dart 언어
- Unity
- 플러터
- 유니티
- Flutter
- git
- HTML
- Data Structure
- Today
- Total
nomad-programmer
[Cloud/AWS] 공개키 본문
키 쌍(key pair)는 EC2 인스턴스에 접속하기 위해 사용하는 암호화된 파일이다. AWS에서는 보안 문제 때문에 EC2 인스턴스에 접속할 때 ID, 비밀번호 방식을 권장하지 않고 있다. (EC2 Linux 인스턴스의 경우 ID, 비밀번호 방식은 기본적으로 사용하지 않도록 설정되어 있다)
키 쌍 접속 방식은 ID와 비밀번호를 입력하지 않고도 접속할 수 있으며 키 쌍 파일만 분실하지만 않으면 매우 안전하다.
이 키 쌍은 RSA 공배 키 알고리즘(Public Key Algorithm)을 사용한다.
암호화 방식에는 두 가지가 있는데 대칭 키와 공개 키 방식이 대표적이다.
# 대칭 키 방식은 암호화(Encyption)하는 키와 복호화(Description)하는 키가 동일하여 이 대칭 키를 상대방에게 전달하는 구간에서 키가 노출되는 단점이 있다.
# 공개 키 방식은 이러한 단점을 개선해 암호화하는 키와 복호화하는 키를 다르게 설계했고, 암호화하는 키는 공개 키라고 하여 외부에 노출되어도 안전하다. 공개 키에서 복호화에 필요한 비밀 키 혹은 개인 키(Private Key)를 추출하는 것은 매우 어렵다.
AWS의 키 쌍은 공개 키(Public Key), 비밀 키 혹은 개인 키(Private Key)가 쌍을 이루고 있기 때문에 키 쌍이라고 부른다. 그리고 키 쌍은 리전별로 관리된다.
키 쌍을 사용하면 보안성도 높일 수 있고, ID와 비밀번호를 일일이 입력하지 않아도 되기 때문에 자동화에도 유리하다. (일반적으로 SSH 명령의 옵션에 ID와 비밀번호를 지정하여 접속하도록 자동화할 수 있지만 비밀번호가 노출되는 치명적인 단점이 있다)
키 쌍 파일(pem)을 분실했다면?
다음 순서대로 EC2 인스턴스의 공개 키를 교체하면 된다.
- 키 쌍을 분실한 EC2 인스턴스를 정지(stop)
- 공개 키 교체용 임시 EC2 인스턴스를 생성(반드시 같은 AZ에 생성)
- ELASTIC BLOCK STORE -> Volumes에서 키 쌍을 분실한 EC2 인스턴스의 볼륨을 Detach
- 키 쌍을 분실한 EC2 인스턴스의 볼륨을 선택하고 임시 EC2 인스턴스에 Attach
- 임시 EC2 인스턴스에 SSH로 접속한 뒤 sudo mount /dev/sdf1 /mnt를 입력하여 볼륨을 마운트
- /mnt/home/ec2-user/.ssh/authorized_keys 파일을 수정하여 새 공개 키로 교체
- sudo umount /mnt를 입력하여 볼륨 마운트 해제. ELASTIC BLOCK STORE -> Volumes로 이동한 뒤 임시 EC2 인스턴스에서 키 쌍을 분실한 EC2 인스턴스의 볼륨을 Detach
- 키 쌍을 분실한 EC2 인스턴스의 볼륨을 원래 EC2 인스턴스에 Attatch(Device는 /dev/xvda로 설정)
- EC2 인스턴스를 시작(start), 교체한 키 쌍을 사용하여 SSH로 접속
AWS에서 외부 키 쌍 파일 사용
이미 가지고 있는 키 쌍 파일이나 외부에서 생성한 키 쌍 파일을 AWS 키 쌍으로 넣는 방법이 있다.
특히 Linux나 Mac OS X를 사용하다 보면 SSH 키 쌍 파일을 여러 개 생성해 가지고 있게 된다. AWS에서 또 다시 새로운 키 쌍을 생성한다면 키 쌍 파일 관리가 다소 부담스러울 수 있다. 따라서 이미 가지고 있는 키 쌍 파일을 활용하면 키 쌍 파일 관리 부담을 덜 수 있다.
PuTTY로 생성한 키 쌍 파일 활용
PUTTYGEN.exe를 실행해 Generate 버튼을 클릭하여 생성한다.
이렇게하면 PuTTY에서 생성한 공개 키를 등록할 수 있다.
Linux와 Mac OS X에서 생성한 키 쌍 파일 활용
자신의 계정에 SSH 키 쌍 파일이 있는지 확인한다.
ls -alF ~/.ssh
SSH 키 쌍 파일이 없다면 아래의 명령으로 SSH 키 쌍 파일을 생성한다.
ssh-keygen -t rsa
id_rsa, id_rsa, pub 경로는 변경하지 않고 기본값 그대로 사용한다. 그리고 Passphrase는 아무것도 설정하지 않고 기본값 그대로 공백을 사용한다.
이미 생성된 EC2 인스턴스에서 공개 키 바꾸는 방법
EC2 인스턴스는 새로 생성할 때만 키 쌍을 선택할 수 있다. 생성된 이후에는 EC2 페이지에서 키 쌍을 바꾸는 기능이 없다. Linux가 설치된 EC2 인스턴스는 SSH로 접속한 뒤 파일을 약간 편집하면 공개 키를 추가하거나 바꿀 수 있다.
먼저 공개 키 형태를 알아보자. Windows에서 PuTTY Key Generator로 생성한 공개 키는 다음과 같은 형태이다.
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20200629"
ASFDDSFDWEWERE34323434ASDFSDFSDFeersadfasdfzxc#$#@#$dsadflCGHyJQJBX
i5Q6YCzp234UCJ58t4/AszfNxRzU2nl5ba0rf9SJXICGmn510DmdGp+y4lEA
8wqwerqwerqwefasdfasersadfMCtgpqDk8PEf+jc1dmqirBgn8BR0qfrKDiE1ur/
c4Wc07yvGaNJGh9nKkwNXAASQSSSVr+Mw7T9mqMOMFt30wUtSDioIvP7FG
AZGo/QWrsadfsafasdfasdfqwerhfgjhdghjdfhwrfgwergefqefgjVboLSX5D/4AbfK
WERSADFASDFQWERSDF@#$@#SDF#423424123rdsfasZ5Z9MmjpVQ==
---- END SSH2 PUBLIC KEY ----
그리고 Linux와 Mac OS X에서 공개 키는 사용자 홈 디렉토리의 .ssh 디렉토리 아래 id_rsa.pub 파일이다. id_rsa.pub파일은 다음과 같은 형태이다. 여러 줄로 보이지만 여러 줄이 아니라 한 줄이다.
ssh-rsa ASFDDSFDWEWERE34323434ASDFSDFSDFeersadfasdfzxc#$#@#$dsadflCGHyJQJBXi5Q6YCzp234UCJ58t4/AszfNxRzU2nl5ba0rf9SJXICGmn510DmdGp+y4lEA8wqwerqwerqwefasdfasersadfMCtgpqDk8PEf+jc1dmqirBgn8BR0qfrKDiE1urc4Wc07yvGaNJGh9nKkwNXAASQSSSVr+Mw7T9mqMOMFt30wUtSDioIvP7FGAZGo/QWrsadfsafasdfasdfqwerhfgjhdghjdfhwrfgwergefqefgjVboLSX5D/4AbfKWERSADFASDFQWERSDF@#$@#SDF#423424123rdsfasZ5Z9MmjpVQ= aaa@ubuntu
EC2 인스턴스에 SSH로 접속하여 사용자 홈 디렉토리 밑에 .ssh 디렉토리에 있는 authorized_keys 파일을 편집한다. (~/.ssh/authorized_keys)
이 파일에 공개 키가 등록되어 있으면 가지고 있는 개인 키 파일(pem 혹은 ppk)을 통해 SSH로 접속할 수 있다.
$HOME/.ssh/authorized_keys 파일의 예
ssh-rsa ASFDDSFDWEWERE34323434ASDFSDFSDFeersadfasdfzxc#$#@#$dsadflCGHyJQJBXi5Q6YCzp234UCJ58t4/AszfNxRzU2nl5ba0rf9SJXICGmn510DmdGp+y4lEA8wqwerqwerqwefasdfasersadfMCtgpqDk8PEf+jc1dmqirBgn8BR0qfrKDiE1urc4Wc07yvGaNJGh9nKkwNXAASQSSSVr+Mw7T9mqMOMFt30wUtSDioIvP7FGAZGo/QWrsadfsafasdfasdfqwerhfgjhdghjdfhwrfgwergefqefgjVboLSX5D/4AbfKWERSADFASDFQWERSDF@#$@#SDF#423424123rdsfasZ5Z9MmjpVQ= aaa@ubuntu
ssh-rsa WERDFXZCV23423W434ASDFSDFSDFeersadfasdfzxc#$#@#$dsadflCGHyJQJBXi5Q6YCzp234UCJ58t4/AszfNxRzU2nl5ba0rf9SJXICGmn510DmdGp+y4lEA8wqwerqwerqwefasdfasersadfMCtgpqDk8PEf+jc1dmqirBgn8BR0qfrKDiE1urc4Wc07yvGaNJGh9nKkwNXAASQSSSVr+Mw7T9mqMOMFt30wUtSDioIvP7FGAZGo/QWrsadfsafasdfasdfqwerhfgjhdghjdfhwrfgwergefqefgjVboLSX5D/4AbfKWERSADFASDFQWERSDF@#$@#SDF#423424123rdsfDFSAEFSASDFDD pyrasis
ssh-rsa QWERFGCVBDFASDFASDF@#$sdfsadfrsadfasdfzxc#$#@#$dsadflCGHyJQJBXi5Q6YCzp234UCJ58t4/AszfNxRzU2nl5ba0rf9SJXICGmn510DmdGp+y4lEA8wqwerqwerqwefasdfasersadfMCtgpqDk8PEf+jc1dmqirBgn8BR0qfrKDiE1urc4Wc07yvGaNJGh9nKkwNXAASQSSSVr+Mw7T9mqMOMFt30wUtSDioIvP7FGAZGo/QWrsadfsafasdfasdfqwerhfgjhdghjdfhwrfgwergefqefgjVboLSX5D/4AbfKWERSADFASDFQWERSDF@#$@#SDF#423424123rddssa##@!@#$#@ad rsa-key-20200631
기본적인 형식은 'ssh-rsa <공개 키> <코멘트>' 형식이다. 앞서 설명한 것처럼 여러 줄이 아니라 한 줄인 것에 유의해야 한다. id_rsa.pub 파일의 경우 그대로 복사해서 붙여넣으면 된다.
하지만, PuTTY Key Generator로 생성한 파일은 일정한 형태로 개행이 되어 있다. 그래서 위와 같이 형식을 맞춰줘야 한다. 맨 얖에 ssh-rsa를 입력하고 한 칸 띄운 뒤 키를 붙여넣고 여러 줄로 뒨 것을 한줄로 맞추어준다. 그리고 한 칸 띄운 뒤 코멘트로 사용할 rsa-key-20200631를 입력하면 된다.
authorized_keys 파일을 저장하면 앞에서 추가한 공개 키에 맞는 개인 키로 SSH 접속을 할 수 있게 된다. (원래 존재하던 공개 키를 삭제하고 새로운 공개 키만 넣어도 된다)
'Cloud > AWS' 카테고리의 다른 글
[Cloud/AWS] AWS 비용 꿀팁 (0) | 2023.06.20 |
---|---|
[Cloud/AWS] RDS 생성 후 맨 처음 설정해야 할 것 (0) | 2020.08.12 |
[Cloud/AWS] Elastic IP (고정된 공인 IP) (0) | 2020.06.28 |
[Cloud/AWS] 가상 서버를 제공하는 EC2 (0) | 2020.06.27 |