AWS Systems Manager

AWS Free-Tier 를 사용하는 경우 아래와 같은 아키텍처로 EC2 & RDS 가 구성된다.

이때, RDS 는 private subnet 에 위치하게되어, pem key 가 위치한 곳에서 ssh 를 통해 EC2 로 접속한 후 RDS 로 접속할 수 있게 된다.

Production 환경에서 개발이 필요한 경우 DBeaver 와 같은 Tool 로 DB 에 직접 붙어야 하는데, 이때 AWS SSM 을 사용하면 Bastion Host 를 통하지 않더라도 RDS 에 접속할 수 있다.

Step 1 - AmazonSSMManagedInstanceCore 정책을 가진 IAM Role 생성:

  • Menu: IAM > Role

Step 2 - IAM Policy 생성:

  • Menu: IAM > Policy
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"ssm:StartSession"
			],
			"Resource": [
				"arn:aws:ec2:ap-northeast-2:{계정 ID}:instance/{EC2 Instance Id}", // EC2  접속하기 위함
				"arn:aws:ssm:ap-northeast-2:{계정 ID}:document/SSM-SessionManagerRunShell", // EC2  접속하기 위함
				"arn:aws:ssm:ap-northeast-2::document/AWS-StartPortForwardingSessionToRemoteHost" // RDS  접속하기 위함
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"ssm:TerminateSession"
			],
			"Resource": [
				"arn:aws:ssm:*:*:session/${aws:username}-*"
			]
		}
	]
}

STEP 3 - IAM User 생성 및 Policy 연결:

  • Menu: IAM > User
  • Access Key 생성 후 csv 저장

STEP 4 - EC2 Instance 에 IAM 연결:

  • EC2 > 보안

STEP 5 - EC2 에 ssh 로 들어가서 ssm agent 실행 및 확인:

  • 실행: sudo snap start amazon-ssm-agent
  • 상태 확인: sudo snap services amazon-ssm-agent

STEP 6 - AWS Cli 설치:

brew install awscli
brew tap dkanejs/aws-session-manager-plugin
brew install aws-session-manager-plugin

STEP 7 - AWS Configure:

> aws configure --profile {프로젝트명 등 적절한 이름}
AWS Access Key ID []: {access key}
AWS Secret Access Key []: {secret access key}
Default region name []: ap-northeast-2
Default output format []: json

> aws configure list --profile {프로젝트명 등 적절한 이름}

STEP 8 - EC2 접속 확인

aws --profile {프로젝트명 등 적절한 이름} ssm start-session --target {EC2 Instance Id}

STEP 8 - RDS Session 연결 후 DBeaver 연결

aws --profile {프로젝트명 등 적절한 이름} ssm start-session --target {EC2 Instance Id} --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"portNumber" : ["3306"], "localPortNumber" : ["3306"], "host" : ["{RDS Instance Id}"]}'
- host : localhost
- port : 3306
- database : {DB Name}
- driver : mysql
- username : {User Name}
- password : {PW}