EC2에 연결할 때 22번 포트를 열지 말고 Systems Manager를 사용합시다.

EC2에 SSH 연결이 필요한 경우 보안 그룹의 22번 포트를 열지 않았습니까?
소스 IP가 풀 오픈이라는 것은 없을지도 모르지만, 이 설정이라면 악의가 있는 사람으로부터 접속을 시도할 가능성이 있습니다.



키 인증을 하고 있다고는 해도 DDoS 공격의 표적이 될지도 모릅니다.



AWS에는 Systems Manager라는 서비스가 있습니다. Systems Manager의 기능 중 하나인 Session Manager를 사용하면 보안 그룹의 22번 포트는 닫힌 상태에서도 SSH 연결이 가능합니다.

악의가 있는 사람으로부터의 접속은 보안 그룹이 막아 주므로, EC2는 영향을 받지 않아도 됩니다.



설정 방법을 소개합니다.

환경



EC2는 다음과 같은 상태로 시작


품목
설정


VPC
기본 VPC

IP 주소
공용 IP 주소 있음

IAM 역할
없음


※퍼블릭 IP를 부여할 수 없는 경우는 NAT 게이트웨이나 VPC 게이트웨이를 사용하면 같은 것이 가능합니다.

설정



EC2에 필요한 IAM 역할 설정



Systems Manager에 액세스하려면 권한이 필요합니다. 개별적으로 설정해도 좋지만 Systems Manager에 "고속 설정"이라는 기능이 있으므로 이것을 사용해 봅시다.
Systems Manager 콘솔 화면의 왼쪽 상단 메뉴에 있습니다.



빠른 설정을 사용하면 정기적으로 Systems Manager 에이전트 업데이트를 자동화하고 CloudWatch 에이전트를 설치할 수 있습니다. 또한 Systems Manager를 사용하는 데 필요한 IAM 역할을 EC2에 자동으로 추가합니다.



적용 대상은 리전의 모든 인스턴스이거나 특정 인스턴스를 선택할 수 있습니다.



빠른 설정을 수행하면 EC2에 AmazonSSMRoleForInstancesQuickSetup라는 IAM 역할이 적용됩니다. 이 IAM 역할에는 AmazonSSMManagedInstanceCore 정책과 AmazonSSMPatchAssociation 정책이 포함됩니다.

AmazonSSMManagedInstanceCore
{
    "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": "*"
        }
    ]
}

AmazonSSMPatchAssociation
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ssm:DescribeEffectivePatchesForPatchBaseline",
            "Resource": "arn:aws:ssm:*:*:patchbaseline/*"
        },
        {
            "Effect": "Allow",
            "Action": "ssm:GetPatchBaseline",
            "Resource": "arn:aws:ssm:*:*:patchbaseline/*"
        },
        {
            "Effect": "Allow",
            "Action": "tag:GetResources",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ssm:DescribePatchBaselines",
            "Resource": "*"
        }
    ]
}

연결할 Windows PC 측에 설치



Windows PC의 경우
* AWS CLI
* 세션 관리자 플러그인
설치하십시오. 마법사를 따르는 것만으로 설치할 수 있습니다.

IAM 사용자 만들기



모처럼이므로 Session Manager 만 가능한 SessionManagerUser를 작성해 보았습니다. 필요한 정책은 다음과 같습니다.

SessionManagerStartSessionPolicy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ssm:StartSession",
            "Resource": [
                "arn:aws:ssm:*:*:document/AWS-StartSSHSession",
                "arn:aws:ec2:*:XXXXXXXXXXXX:instance/*"
            ]
        }
    ]
}

작성한 사용자의 자격 증명을 aws configure로 등록합니다. profile 이름은 ssh-session-user입니다.
( htps : // / cs. 아 ws. 아마존. 이 m/그럼_jp/cぃ/ぁてst/うせrぐいで/cぃーこんふぃぐれくいくcks rt. HTML )
aws configure --profile ssh-session-user
AWS Access Key ID [None]: XXXXXXX
AWS Secret Access Key [None]: XXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]: 

SSH 연결 설정



SSH 연결용 구성 파일( %USERPROFILE%\.ssh\config )에 다음을 추가합니다.
# SSH over Session Manager
Host i-* mi-*
  ProxyCommand C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters portNumber=%p --profile ssh-session-user"

이것으로 설정이 완료됩니다.

연결



인스턴스 이름(i-01af40cfdcecbfe5f)과 사용자(ec2-user), 키 쌍 이름(key-pair.pem)을 지정하면 Systems Manager를 통해 SSH 연결이 가능합니다.
ssh -i key-pair.pem ec2-user@i-01af40cfdcecbfe5f

안전하게 연결할 수 있었습니까?

물론 VSCode의 SSH 확장을 사용하여 연결할 수도 있습니다. htps : // 여기.ゔぃすあ lsつぢお。 코 m / cs / remote / sh sh 토리 l
SSH 연결용 구성 파일( %USERPROFILE%\.ssh\config )에 다음을 추가하면 쉽게 연결할 수 있습니다.
Host i-01af40cfdcecbfe5f
  User ec2-user
  IdentityFile ~/.ssh/key-pair.pem

편리하네요!

좋은 웹페이지 즐겨찾기