[aws] aws ec2, ssm 명령어 사용기
AWS SSM 이란?
AWS에서 인프라를 보고 제어하기 위해 사용할 수 있는 AWS 서비스
기존 Bastion host를 통해 SSH 로 EC2 인스턴스에 접근하는 방식에는 몇 가지 단점이 존재
1. Bastion host 전용 서버를 따로 생성
2. Basion host에서 ec2에 접속할 때 필요한 키페어를 생성해서 보관
- 보안을 위해 접속하는 EC2 인스턴스 마다 키를 별도로 생성 + 접속하는 사용자마다 사용자를 생성하여 키를 설정해야 한다.
- 하지만 대부분 키 하나를 두고 모든 사용자들에게 키를 공유하여 사용한다.(우리도 그렇다)
3. SSH 연결을 위한 서버 설정 및 보안 그룹 생성 등 관리한 부분들이 존재
SSM 특징/장점
인바운드 포트를 열거나 SSH 키를 관리할 필요 없이 관리형 인스턴스에 안전하게 연결
Bastion host 나 Key pair 가 필요 X
HTTPS 프로토콜을 사용하여 접속이 가능
선택한 목적 또는 활동에 따라 AWS 리소스를 그룹화하여 중앙 집중식 관리 가능
SSM 명령어
그전에, aws ec2의 인스턴스의 id 값을 알기 위해서는 아래처럼 태그를 통해 접근할 수 있다.
aws ec2 describe-instances \
--filters "Name=tag:Name,Values=[태그 이름]" "Name=instance-state-name,Values=running" \
--query "Reservations[].Instances[].InstanceId" \
--output text
ec2에 ssm 으로 연결하기
aws ssm start-session --target i-XXXXXXXXXXXXX
그러면 아래와 같이 된다.
Starting session with SessionId: luna-XXXXXXXXXXXXXXXXX
[sh-5.2$
나 누구야? 하면 "ssm-user"이다. 그렇기 때문에 만약에 ec2-user에 대한 권한 설정이 필요해보인다.
Session Manager 사용 시 EC2 인스턴스에 생성되는 SSM-USER 가 Administrator 권한을 갖게된다고 한다.
이 것또한 제어할 수 있다고 하는대, 아래와 같이 여러 가지 기능들이 추가되었다고 한다.
Session Manager 사용 시 EC2 인스턴스에 생성되는 SSM-USER 가 Administrator 권한을 갖게 되는데 이 권한을 삭제하는 것이 가능
Session Manager 사용 시 SSM-USER 가 아닌 EC2 인스턴스에서 생성한 Username 을 이용하여 접속 가능
Session Manager 를 이용하여 접속한 이후에 사용 가능한 명령어를 제한 가능
Session Manager 를 이용하여 Port Forwarding 을 사용
Session Manager 를 이용하여 SSH 연결을 생성
ssm-user가 ec2-user 인척을 할 수 있다.
심지어는 다른 설정 없이도, sudo -u ec2-user 만 사용하면 가능했다.
여러 삽질
sh-5.2$ sudo cat sudoers
해서 해당 설정들을 보고,
sh-5.2$ whoami
ssm-user
sh-5.2$ echo "#User rules for ssm-user" > ec2-user
sh: ec2-user: Permission denied
sh-5.2$ sudo echo "#User rules for ssm-user" > ec2-user
sh: ec2-user: Permission denied
sh-5.2$ sudo -s
[root@ip---- etc]# echo "#User rules for ssm-user" > ec2-user
위의 명령어를 실행하여 ec2-user라는 파일을 잘못 만들었다.
sh-5.2$ sudo -u ec2-user bash
이렇게 하면 내가 ec2-user 라는 권한으로 사용할 수 있는 듯!
그래서 ls ~ 하니 내가 원하는 경로로 가서 좋았음
아 근데, 내가 ssm 연결해서 하면 SSM 명령은 기본적으로 ssm-user가 실행하고 있다고 한다.
aws ssm send-command를 실행하면 실제로 명령은 ssm-user 라는 시스템 계정이 실행되어서,
도커 빌드나 실행 중에 도커 관련 설정이 저장되는 ~/.docker/ 디렉토리가 ssm-user 소유로 되는 듯하다.
root로 들어가나,,? command 로 ec2-user로 사용하고 있어도,
결론적으로는 aws ssm send-command로 실행하고 있기 때문에 ssm-user 라는 시스템 계정이 실행
~/.docker/는 이미 ssm-user 소유해서, ec2-user는 여기에 접근하거나 수정할 권한이 없는듯하다.
그러면 다른 사람들이 로컬에서 사용하고자 하면
sudo chown -R ec2-user:ec2-user ~/.docker
위처럼 권한을 주어야 한다.
.docker 디렉토리와 그 하위 파일들의 소유자를 ec2-user로 바꾼다.
출처 및 참고