EMD Blog

AWS Session Manager를 통한 RDP 연결 본문

Public Cloud/AWS

AWS Session Manager를 통한 RDP 연결

EmaDam 2022. 9. 7. 16:43

Windows Server도 AWS Session Manager를 통해 연결 가능함.

사전 구성

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/session-manager-prerequisites.html

먼저 Windows Server 2019 Instance를 생성한다. 그 다음 클라이언트 프로그램으로 접속해 아래 절차를 진행한다. Windows Server 2022가 있긴 하지만 아직 Session Manager를 지원하지 않는다.

SSM Agent 설치

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/sysman-install-ssm-proxy.html

Session Manager를 사용하려면 SSM Agent가 설치되어 있어야 함.

참고로 아래 버전에는 SSM Agent가 사전 설치되어 있음.

  • 2016년 11월 이후에 게시된 Windows Server 2008-2012 R2 AMI
  • Windows 서버 2016, 2019 및 2022

[설치 확인]

& "C:\\Program Files\\Amazon\\SSM\\amazon-ssm-agent.exe" -version

만약 설치되어 있지 않다면 아래 절차로 설치(Power Shell)

Invoke-WebRequest `
    <https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/windows_amd64/AmazonSSMAgentSetup.exe> `
    -OutFile $env:USERPROFILE\\Desktop\\SSMAgent_latest.exe
Start-Process `
    -FilePath $env:USERPROFILE\\Desktop\\SSMAgent_latest.exe `
    -ArgumentList "/S"
rm -Force $env:USERPROFILE\\Desktop\\SSMAgent_latest.exe

[SSM Agent 재시작]

Restart-Service AmazonSSMAgent

IAM 설정

EC2에 인스턴스 프로파일을 적용해야 함. 인스턴스 프로파일은 EC2내에서 어플리케이션이 사용할 AWS IAM이다.

AWS 관리형 정책인 AmazonSSMManagedInstanceCore을 지정해주면 되지만 최소 권한 원칙을 준수하고 싶다면 아래 문서들을 참고하면 된다.

모든 사용자가 모든 인스턴스에 Session 액세스를 하지 못하도록 제어를 할 필요가 있다.

Session 액세스 시 필요한 권한 설정은 크게 3가지로 나눌 수 있다.

Session Manager를 구성하면 세션에 대한 기본 설정 (로깅, 암호화 등)이 포함되어 있는 Session 문서가 생성된다. 사용자가 Session Manager를 사용해서 접속하려면 이 Session 문서에 대한 접근 권한이 필요하다.

{
    "Effect": "Allow",
    "Action": [
        "ssm:StartSession"
    ],
    "Resource": [
        "arn:aws:ec2:<region>:<account-id>:instance/<instance-id>",
        "arn:aws:ssm:<region>:<account-id>:document/<session-document-name>"
    ],
    "Condition": {
      "BoolIfExists": {
        "ssm:SessionDocumentAccessCheck": "true"
      }
    }
}

위 권한은 ssm:StartSession를 수행 할 수 있는 Instance와 session-document를 지정해준 것이다. 위 처럼 리소스를 하나씩 지정해줘도 되고 태그 같은 것으로 범위 지정을 해줘도 된다.

session-document-name은 위 에서 말한 Session 문서 이름을 말한다. 이 문서는 기본적으로 SSM-SessionManagerRunShell 라는 이름으로 생성되며 다른 이름을 지정해 줄 수도 있다. 참고로 이 문서는 start-session(session으로 인스턴스 접속)시 --document-name으로 지정해야 하며 지정하지 않을 경우 SSM-SessionManagerRunShell에 접근한다.

마지막으로 Condition을 보면 ssm:SessionDocumentAccessCheck로 true를 지정해 주었는데 true는 start-session 시 Session 문서에 대한 접근 권한을 체크 하겠다는 뜻이다. false로 지정하면 위에서 지정한 것과 같은 문서의 접근 권한을 무시한다(모든 문서에 접근 가능).

[전체 IAM 권한]

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": [
                "arn:aws:ec2:ap-northeast-2:338527320136:instance/<instance-id>",
                "arn:aws:ssm:ap-northeast-2:338527320136:document/SSM-SessionManagerRunShell"
            ],
            "Condition": {
                "BoolIfExists": {
                    "ssm:SessionDocumentAccessCheck": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:DescribeSessions",
                "ssm:GetConnectionStatus",
                "ssm:DescribeInstanceProperties",
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:TerminateSession",
                "ssm:ResumeSession"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:session/${aws:username}-*"
            ]
        }
    ]
}

aws ssm start-session \

--target <instance-id>

위에서 Instance-id 만 변경해서 적용하면 된다.

테스트

아래 과정을 전부 진행했는지 확인한다.

  • AmazonSSMManagedInstanceCore 정책이 포함되어 있는 역할을 EC2 IAM에 지정
  • Instance에 SSM Agent 설치 및 실행 확인
  • 접속할 사용자에게 해당 인스턴스에 대한 start-session 권한 부여

[접속]

aws ssm start-session \\
    --target <instance-id>