Skip to content
Play Builder
Go back

SSH Key는 이제 그만: Session Manager로 Bastion 없는 보안 접속 환경 구축

AmazonSSMManagedInstanceCore는 실무에서 EC2 인스턴스를 다룰 때 가장 기본이자 필수적으로 사용하는 정책입니다.

한마디로 정의하자면:

“EC2 인스턴스(내부의 SSM Agent)가 AWS Systems Manager 서비스와 통신할 수 있게 해주는 ‘필수 통행증(Visa)‘“

Table of contents

Open Table of contents

1. [핵심] SSH 키 없이 서버 접속 (Session Manager)

현재 방식 (Modern - Session Manager):

자세한 배경은 서버 접속의 진화: Bastion Host에서 AWS SSM까지 글을 참고하세요.


2. 원격 명령 실행 및 자동화 (Run Command)

상황: 서버가 100대인데, 모든 서버의 로그를 지우거나 특정 패치를 해야 한다면?


3. 패치 관리 및 인벤토리 수집 (Patch Manager & Inventory)


정책 내부 구조: 세 가지 부류의 권한

이 정책의 내용을 뜯어보면 크게 세 가지 부류의 권한이 들어있습니다.

AmazonSSMManagedInstanceCore 정책 구성

  1. ssm:DescribeAssociation, ssm:GetDocument
    • SSM Agent가 “내가 무슨 작업을 해야 하지?”라고 작업 명세서(Document)를 읽어오는 권한입니다.
  2. ssmmessages:CreateControlChannel, ssmmessages:CreateDataChannel
    • 가장 중요! 이것이 있어야 **Session Manager(웹 터미널 접속)**가 작동합니다. 터미널의 입력/출력 데이터를 암호화된 채널로 주고받는 권한입니다.
  3. ec2messages:...
    • 예전 방식의 통신 프로토콜을 위한 권한입니다 (하위 호환성).

AmazonSSMManagedInstanceCore 정책 세부 목록 (이름에 ‘Core’가 들어간 게 최신 경량화 버전입니다):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:DescribeAssociation",
                "ssm:GetDeployablePatchSnapshotForInstance",
                "ssm:GetDocument",
                "ssm:DescribeDocument",
                "ssm:GetManifest",
                "ssm:GetParameter",
                "ssm:GetParameters",
                "ssm:ListAssociations",
                "ssm:ListInstanceAssociations",
                "ssm:PutInventory",
                "ssm:PutComplianceItems",
                "ssm:PutConfigurePackageResult",
                "ssm:UpdateAssociationStatus",
                "ssm:UpdateInstanceAssociationStatus",
                "ssm:UpdateInstanceInformation"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssmmessages:CreateControlChannel",
                "ssmmessages:CreateDataChannel",
                "ssmmessages:OpenControlChannel",
                "ssmmessages:OpenDataChannel"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2messages:AcknowledgeMessage",
                "ec2messages:DeleteMessage",
                "ec2messages:FailMessage",
                "ec2messages:GetEndpoint",
                "ec2messages:GetMessages",
                "ec2messages:SendReply"
            ],
            "Resource": "*"
        }
    ]
}

요약

이 정책을 EC2에 붙이는 순간, SSH 포트(22)를 닫아도 접속할 수 있고, 원격으로 조종(스크립트 실행)할 수 있게 된다. 뿐만 아니라, SSH로 접속하면 누가 언제 들어왔는지 로그 남기기가 까다롭지만, Session Manager를 쓰면 CloudTrailS3에 접속 기록과 명령어 내역이 전부 로깅되어 보안 감사가 가능해집니다.


Share this post:

Previous Post
컨테이너 공격 표면 최소화: Linux Capabilities로 Root 권한 제거하기
Next Post
서버 접속의 진화: Bastion Host에서 AWS SSM까지