본문 바로가기

AWS/System Manager

Session Manager를 사용하여 OS 내부로 접속하기

안녕하세요. 오늘은 AWS System Manager 서비스안의 Session Manager 서비스를 이용하여

SSH를 사용하지 않고도, Key-Pair가 없어도 OS 내부로 접근할 수 있는 방법을 소개 해드리도록 하겠습니다.

또한, Session Manager 서비스를 터미널창에서 대화식으로 실행할 수 있는 오픈소스 툴 또한 함께 소개 드리겠습니다.

 

########

단, Private Instance 접속의 경우

해당 Private Subnet이 NAT Gateway - IGW를 통해 인터넷과 통신이 가능하거나,
VPC 앤드포인트가 있어야합니다.

동작 방식자체가 443 Port를 통해서 SSM Endpoint와 통신을 하는 구조이기 때문입니다.


NAT Gateway를 사용하는 구조라면, SG의 Outbound 및 NACL에 443 Port에 대해서 아래의 주소가 허용되어야 합니다.

ssm.REGION.amazonaws.com
(2021-04-01 시점에서 ssm.ap-northeast-2.amazonaws.com의 IP-Range는 52.95.192.0/20 입니다.)
참고 URL : https://docs.aws.amazon.com/ko_kr/general/latest/gr/aws-ip-ranges.html


VPC Endpoint를 사용하는 구조라면, SG의 Inbound 및 NACL에 443 Port로 VPC CIDR을 허용해야합니다.

참고 URL : https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-systems-manager-vpc-endpoints/


########

 

사담을 조금 하면, 저같은 경우 Windows Server에서 RDP Port를 변경하고, 실수로 Windows 자체 방화벽에서

변경된 Port에 대한 규칙을 저장하지 않아서 그 때 Session Manager를 통해 접속하여서 규칙을 추가해주었던

기억이 있습니다..^^;; (Session Manager가 GUI 환경을 지원하지는 않습니다.)

 

그럼, 바로 Session Manager를 소개 해드리도록 하겠습니다.

 

테스트환경은 Amazon Linux2를 사용하였으며, Session Manager를 사용하기 위해서는 SSM-Agent가 필요합니다.


먼저 생성되어있는 Instance에 IAM Role을 부착해주셔야 합니다.

  • AWS Web Console - EC2 - Instances - Select - Actions - Instance settings - Attach/Replace IAM Role -
    AmazonSSMRoleForInstancesQuickSetup - Apply


Instance에 IAM Role 부착

 

(해당 IAM Role에는 AmazonSSMManagedInstanceCore Policy가 부착되어 있고, 신뢰관계는 EC2 입니다.
자세한 설명은 생략하도록 하겠습니다.)

 

 

저같은 경우는 Instance가 생성되어 있었기때문에, 위와 같은 작업을 해주었는데요.

만약, 테스트를 위해 Instance를 새로 생성하신다면, 생성과정에서 IAM Role을 미리 지정해줄 수도 있습니다.


다음은 System Manager의 Session Manager를 통해 OS 내부로 접속해보도록 하겠습니다.

  • AWS Web Console - System Manager - Session Manager - Start session - Instance Select - Start session

Start Session

 

 

Start session을 누르시게 되면 아래 사진과 같이 새로운 탭이 열리면서 익숙한 CLI 환경이 보입니다.

Start session을 하여 Instance 내부로 접속

 

여기까지 간단하게 Session Manager를 사용하여 Instance 내부로 접속하는 방법을 소개해드렸는데요.

다음으로는 AWS Web Console이 아닌 AWS CLI가 설치되어있는 Local Desktop에서 오픈소스 툴을 사용하여
대화식으로 Session Manager를 사용해보도록 하겠습니다.

AWS CLI를 사용하기때문에 Access Key는 필수조건이며, Access Key를 사용하기때문에 여러 계정을
편리하게 관리할 수 있다는 장점이 존재합니다.

 

오픈소스 툴 : https://github.com/gjbae1212/gossm

 

gjbae1212/gossm

💻Interactive CLI tool that you can connect to ec2 using commands same as start-session, ssh in AWS SSM Session Manager - gjbae1212/gossm

github.com

툴 제공자분께서 README를 워낙 잘 작성해놓으셔서 저는 간략하게 사용하는 법 소개만 드리겠습니다 ^^


(WIndows 환경에서 wget을 사용하시려면 이 곳에서 다운로드 받으신 후 c:\windows\system32에 위치시키시면 됩니다.)


 

먼저, AWS CLI에 사용할 AccessKey를 위해 IAM User와 Policy를 생성합니다.

  • AWS Web Console - IAM - Policies - Create policy - Json - 복사/붙여넣기
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ssm:DescribeInstanceInformation",
                "ec2:DescribeRegions",
                "ssm:TerminateSession",
                "ssm:StartSession"
            ],
            "Resource": "*"
        }
    ]
}

 

위 Policy를 부착할 IAM User를 Programmatic access 방식으로 생성해줍니다.

  • AWS Web Console - IAM - Users - Create user

IAM User 생성


이 후, 생성되는 AccessKey를 $HOME/.aws/credentials or %HOMEPATH%\.aws\credentials 에 등록합니다.

 

AWS Credentials 파일


마지막으로, CMD를 실행하여 위의 오픈소스툴인 gossm이 설치된 디렉터리로 이동하여 명령어를 실행합니다.

제 경우 %HOMEPATH%\gossm_1.3.0_Windows_x86_64 입니다.

 

gossm


이렇게 Session Manager라는 서비스와 Session Manager를 편리하게 사용할 수 있는 오픈소스툴도 함께

소개해드렸는데요. 아무래도 OS 내부로 들어가는 서비스와 연동된 AccessKey라서 MFA를 거시는것을

강력하게 권고드립니다.

 

 

감사합니다.