본문 바로가기
공부/AWS

[AWS] Session Manager로 RDP 접속하기 (Windows Server)

by haejang 2021. 3. 29.
728x90
728x90

 

21.12.11 추가

  • SSMuser 생성은 굳이 필요 없다.
    -> Administrator / pem키 해독한 password로도 충분히 접속 가능하다
  • ssm/ssmmessages/ec2messages 3개 endpoint만 있다면 NAT조차 없는 Private한 서브넷에 있는 Window EC2에도 RDP로 접속할 수 있다

 

 

이전에 Session Manager로 Windows Server 접속하는 글을 쓴 적이 있지만, 그저 PowerShell로 접속되는 글이었다

윈도우의 가장 큰 장점은 편리한 GUI이므로 좀 귀찮지만 RDP로 접속하는 일을 해보겠다

 

목표 : 로컬에서 RDP 포트가 열려있지 않은 윈도우 서버에 RDP로 접속하기

 

목차

1. EC2용 IAM 역할 & Windows Server 2019 EC2 생성

2. Session Manager로 접속할 사용자 생성

3. 로컬에서 필요한 파일들 설치

4. 자격 증명에 필요한 IAM User 생성

5. RDP 접속

 

 

시작!


1. EC2용 IAM 역할 & Windows Server 2019 EC2 생성

먼저 AmazonEC2RoleforSSM 정책이 붙어있는 IAM 역할을 만들어주자. 난 ec2-ssm 이란 이름으로 만들었다

 

 

그리고 EC2는 Windows Server 2019 Base 로 만들어주자

(다른 윈도우로 해도 무방하나 Marketplace의 AMI를 사용하면 서버에 SSM Agent를 따로 설치해줘야 한다)

 

 

RDP는커녕 아무것도 열려있지 않은 보안그룹을 만들어서 붙여준다

 

 

인스턴스 상태가 실행 중이 되면, 위에서 만든 ec2-ssm 역할을 붙여준다

(작업 > 보안 > IAM 역할 수정)

 

 

위에서도 말했지만 AWS에서 제공하는 AMI들엔 기본적으로 SSM Agent가 다 깔려있다

그래서 IAM 역할만 붙여주면 서버에서 별다른 설정 없이 바로 연결할 수 있다

 

연결 > Session Manager

 

Session Manager 연결이 활성화되었다

 

해당 서버의 PowerShell로 접속되었다

 

2. Session Manager로 접속할 사용자 생성

Session Manager PowerShell에서 아래 명령으로 새 사용자를 만들어 설정해주자

# 보안 문자열로 암호 입력
$Password = Read-Host -AsSecureString
[원하는 비번 설정]

# 로컬 사용자 만들기
New-LocalUser "SSMuser" -Password $Password

# Remote Desktop Users 그룹에 사용자 추가
Add-LocalGroupMember -Group “Remote Desktop Users” -Member “SSMuser”

Read-Host : 한 줄 입력을 받음

-AsSecureString : 입력을 보안 문자열(*)로 저장

New-LocalUser : 새 local user 계정을 만듬

Add-LocalGroupMember : local 그룹에 멤버 추가

 

 

3. 로컬에서 필요한 파일들 설치

AWSCLIv2 다운

session manager 플러그인 다운

 

로컬에서 진행 - 나는 윈도우(cmd)에서 진행했다

위 두 링크에서 파일을 다운받은 후 실행해 설치를 완료해주자

 

잘 설치되었는지 확인하려면 아래 명령을 쳐보면 된다

aws --version
session-manager-plugin

 

 

4. 자격 증명에 필요한 IAM User 생성

awscli로 접속할 IAM User가 필요하다

IAM > 사용자 > 사용자 추가

 

 

이름을 대충 정해주고, 프로그래밍 방식 액세스만 체크해서(cli로만 사용할 계정이니까) 권한 탭으로 넘어가자

 

 

기존 정책 직접 연결 > 정책 생성 > JSON

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:TerminateSession"
            ],
            "Resource": "*"
        }
    ]
}

 

 

StartSession, TerminateSession 권한을 갖는 정책을 만들어서 만들던 User에 붙여주면 된다

 

방금 만든 ssmtest 정책 연결 (새로고침 해줘야됨)

 

그러고 생성을 완료하면, 키를 받을 수 있는 창이 뜬다

액세스 키와 시크릿 키를 다운받든 복사해두든 하고, cmd에서 aws configure를 실행한다

 

 

액세스 키, 시크릿 키, 리전만 설정해주고 넘기자

 

5. RDP 접속

이제 준비는 모두 끝났다

일단 3389 포트가 안열려있는데 RDP로 접근할 수 있는 원리는 "포트 포워딩" 이다

AWS-StartPortForwardingSession 이란 문서를 통해 포트 포워딩 방식으로 3389에서의 트래픽을 원하는 로컬 포트로 리디렉션해주는 것이다

 

일단 cmd에서 아래 명령을 쳐서 원하는 로컬 포트를 열어주자

aws ssm start-session --target <instance-id> --document-name AWS-StartPortForwardingSession --parameters "localPortNumber=55678,portNumber=3389"

docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-port-forwarding

 

 

이렇게 뜨면 RDP 접속 일보 직전이다 (Waiting이라 뜨길래 안되는건줄 알고 여기서 한참 삽질을 했었다...)

 

각자 로컬에서 원격 앱을 아무거나 틀어보자

난 윈도우의 원격 데스크톱 연결을 실행해봤다

 

 

연결할 컴퓨터에 localhost:55678(자신이 적은 로컬 포트번호)를 적어준 후, 옵션 표시를 누른다

 

 

사용자 이름에 아까 생성한 User의 이름을 넣고, 설정했던 비밀번호까지 치고 확인을 눌러주면?

 

한번 더 예를 눌러주자

 

위의 스펙들을 비교해보면 아까 생성한 그 ec2가 맞다...

이렇게 RDP 포트 안열어놓은 윈도우 서버에 RDP로 접속하기를 드디어 성공했다

 

끝!

 


참조

728x90
728x90

댓글