2025-02-21 15:52:23

공인 IP 할당 안받아서 보안수준 올리기

 

라는 생각으로 찾아보게 되었습니다.

 

 

IAM 역할 생성 방법:


AWS Management Console에서 IAM 서비스로 이동합니다.
"Roles"에서 새 역할(Role)을 생성합니다.
"AWS 서비스" 유형에서 "EC2"를 선택합니다.
정책 연결 단계에서 AmazonSSMManagedInstanceCore 정책을 선택합니다.
역할에 이름을 지정하고 생성합니다.
생성된 IAM 역할을 해당 EC2 인스턴스에 할당합니다.

 

 

 

 

 

AWS ssm 가능은

 

프라이빗 서브넷에 할당된 인스턴스에 BastionHost 등의 별도의 공간을 통하지 않고 바로 접속하는 방법입니다.

AamazonLinux

 

sudo yum install -y amazon-ssm-agent
sudo systemctl enable amazon-ssm-agent
sudo systemctl start amazon-ssm-agent

 

Ubuntu

 

sudo snap install amazon-ssm-agent --classic
sudo systemctl enable snap.amazon-ssm-agent.amazon-ssm-agent.service
sudo systemctl start snap.amazon-ssm-agent.amazon-ssm-agent.service

 

에서 실행하시면 1번째 준비가 됩니다.

근데 요즘 AMI에는 보통있는것 같습니다.

 

이후 인스턴스가 SSM과 통신할 수 있도록 IAM 역할을 생성하고 적절한 권한을 부여해야 합니다.

 

IAM 역할 생성 방법:


AWS Management Console에서 IAM 서비스로 이동합니다.
"Roles"에서 새 역할(Role)을 생성합니다.
"AWS 서비스" 유형에서 "EC2"를 선택합니다.
정책 연결 단계에서 AmazonSSMManagedInstanceCore 정책을 선택합니다.
역할에 이름을 지정하고 생성합니다.
생성된 IAM 역할을 해당 EC2 인스턴스에 할당합니다.
이미 실행 중인 인스턴스의 경우, 인스턴스 속성에서 IAM 역할을 추가하거나 변경할 수 있습니다.

 

그 다음으로 네트워크 설정을 합니다.

 

인스턴스가 SSM 엔드포인트에 접근할 수 있어야 합니다.
프라이빗 서브넷에 인터넷 액세스가 없으면 SSM 통신을 위해 VPC 엔드포인트를 생성해야 합니다.

 

VPC 엔드포인트 생성
AWS 콘솔에서 VPC 서비스로 이동합니다.
왼쪽 메뉴에서 "Endpoints"를 선택한 후 "Create Endpoint"를 클릭합니다.
다음 세 가지의 VPC 엔드포인트를 각각 생성합니다:
com.amazonaws.[region].ssm
com.amazonaws.[region].ec2messages
com.amazonaws.[region].ssmmessages


예시: 서울 리전(ap-northeast-2)의 경우 cohttp://m.amazonaws.ap-northeast-2.ssm
각 엔드포인트에 대해 다음을 설정합니다:
VPC: 인스턴스가 위치한 VPC 선택


서비스: 위에서 언급한 서비스를 하나씩 선택
엔드포인트 유형: Interface 엔드포인트
서브넷: 인스턴스가 있는 프라이빗 서브넷 선택

본인의 Private VPC를 고르세요


보안 그룹: SSM 트래픽을 허용하는 보안 그룹 선택(기본적으로 아웃바운드 443 포트만 필요합니다.)
엔드포인트를 생성합니다.
보안 그룹 설정
VPC 엔드포인트에 연결된 보안 그룹은 인바운드로 포트 443(HTTPS)을 허용해야 합니다.


EC2 인스턴스의 보안 그룹에서 SSM 관련 포트를 열 필요는 없습니다.

본인이 필요한 포트를 열어서 사용합니다.

 

AWS Management Console을 통한 접속


AWS 콘솔에서 Systems Manager 서비스로 이동합니다.
왼쪽 메뉴에서 "Session Manager"를 선택합니다.
"Start session"을 클릭합니다.
연결할 인스턴스를 선택하고 "Start session"을 클릭합니다.
브라우저에서 인스턴스의 셸에 직접 접속할 수 있습니다.

 

이제는 로컬에 대한걸 해야합니다.

 

aws ssm start-session --target "인스턴스 ID"

로 인스턴스에 접속합니다.

 

아니면 아래처럼도 가능합니다.

이렇게 AWS 포탈에서 편하게 접속이 가능합니다.

 

 

##########################################################################################

 

보통 프라이빗은 DB에 관한 내용이 많습니다.

 

그래서 포트포워딩을 하면 DB에 직접 접속이 가능합니다.

aws ssm start-session \
    --target "인스턴스 ID" \
    --document-name AWS-StartPortForwardingSession \
    --parameters "localPortNumber=로컬 포트,remotePortNumber=원격 DB 포트"

 

저는 MYSQL을 써서 3306을 사용합니다.

이후 localhost:3306 이 가능해집니다.

 

##########################################################################################

 

위에 적은 방법 말고도 프라이빗에 접속하는 방법은 다양합니다,

 

AWS PrivateLink 기능

SSH 터널링 기능

소프트웨어 VPN 기능

AWS ELB 기능

BsstionHost 사용

등의 다양한 방법이 있습니다.

 

하지만 별도의 인스턴스를 사용하지 않아 추가비용이 더 저렴합니다.

IAM과 보안그룹등에 더 자세하게 공부가가능합니다.

1번 제대로 하면 편하게 여러 인스턴스에서 사용할 수 있습니다.

 

이상한거 있으면 얼마든지 지적해주세요!