내용으로 건너뛰기

Systems Manager에서 Amazon EC2 인스턴스를 관리형 인스턴스로 표시하지 않는 이유는 무엇입니까?

8분 분량
0

‘SSM Agent is not online” or “Connection Lost” 오류를 받는 이유 또는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스가 Fleet Manager에 표시되지 않는 이유를 알고 싶습니다.

간략한 설명

AWS Systems Manager Agent(SSM Agent)가 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 오프라인 상태인 경우 다음과 같은 알림을 받습니다.

참고: SSM Agent가 오프라인 상태인 경우 인스턴스는 Systems Manager에서 관리형으로 표시되지 않습니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

다음 사전 요구 사항을 완료한 후 AWSSupport-TroubleshootManagedInstance 런북을 사용하여 SSM Agent가 오프라인 상태이거나 Systems Manager와 연결할 수 없는 이유를 확인하십시오. 자세한 내용은 Systems Manager Automation으로 구동되는 자동화 작업 실행Automation 설정을 참조하십시오.

또한 AWS CLI를 사용하여 인스턴스 문제를 해결하거나 인스턴스 문제를 수동으로 해결할 수 있습니다.

SSM Agent가 설치되어 실행 중인지 확인

중요: 문제 해결 단계에서 인스턴스가 있는 AWS 리전을 선택합니다.

Systems Manager가 운영 체제(OS)를 지원하는지 확인하십시오. 그런 다음, OS별 명령을 실행하여 SSM Agent를 설치했는지 확인합니다.

참고: SSM Agent는 대부분의 Amazon Machine Image(AMI)에 사전 설치되어 있습니다. 자세한 내용은 SSM Agent가 사전 설치된 AMI 찾기를 참조하십시오. 인스턴스에 SSM Agent를 설치하지 않은 경우 Linux, Windows 또는 macOS에 수동으로 설치합니다.

SSM Agent의 상태가 실행 중이고 SSM Agent가 최대 절전 모드가 아닌지 확인하려면 다음 단계를 완료하십시오.

  1. Amazon EC2 콘솔을 엽니다.
  2. 왼쪽 탐색 창에서 인스턴스를 선택합니다.
  3. 인스턴스를 선택합니다.
  4. 작업, 모니터링 및 문제 해결, 시스템 로그 가져오기를 선택합니다.

SSM Agent가 실행 중이면 “Amazon SSM Agent vx.x.x.x is running”이라는 메시지가 표시됩니다.

SSM Agent가 최대 절전 모드에 있는 경우 다음 메시지 중 하나가 표시되고 그 뒤에 SSM Agent가 최대 절전 모드에 있는 이유가 표시됩니다.

  • "SSM Agent entering hibernation due to error:"
  • "SSM Agent unable to acquire credentials:" 

참고: SSM Agent 버전 3.3.2471.0 이상을 사용하는 경우 인스턴스의 시스템 로그를 검토하여 SSM Agent가 최대 절전 모드인 이유를 찾으십시오.

Systems Manager 자동화 런북 실행

전제 조건: 자동화를 실행하기 전에 AWS Identity and Access Management(IAM) 사용자 또는 역할에 필요한 권한이 있는지 확인하십시오. 자세한 내용은 AWSSupport-TroubleshootManagedInstance필수 IAM 권한 섹션을 참조하십시오.

런북을 실행하려면 다음 단계를 완료하십시오.

  1. AWSSupport-TroubleshootManagedInstance 런북을 엽니다.
  2. 입력 파라미터에 다음 정보를 입력합니다.
    InstanceId에 영향을 받는 인스턴스의 ID를 입력합니다. 인스턴스 ID를 수동으로 입력하거나 대화형 인스턴스 선택기를 사용할 수 있습니다. 인스턴스 선택기를 사용하는 경우 필터를 Show managed instance only(관리형 인스턴스만 표시)에서 Show all instances(모든 인스턴스 표시)로 변경합니다.
    (선택 사항) AutomationAssumeRole에는 Systems Manager Automation이 사용자를 대신하여 작업을 수행할 수 있도록 허용하는 IAM 역할의 Amazon 리소스 이름(ARN)을 입력합니다. 역할을 지정하지 않으면 Systems Manager Automation은 문서를 실행하는 사용자의 권한을 사용합니다.
  3. 실행을 선택합니다.

자동화가 완료되면 출력 섹션을 검토하십시오. FinalOutput.Message 변수는 Systems Manager가 인스턴스를 관리하는지 여부를 표시하고, 검사 통과 또는 실패 여부를 표시하고, 장애 해결 방법에 대한 정보를 제공합니다.

AWS CLI를 사용하여 오프라인 SSM Agent 문제 해결

다음 단계를 완료하십시오.

  1. SSH 또는 원격 데스크톱 프로토콜을 통해 인스턴스에 액세스할 수 있는지 확인합니다.
  2. ssm-cli AWS CLI 명령을 실행하여 관리형 인스턴스 가용성 문제를 해결합니다.
    Linux 및 macOS
    ssm-cli get-diagnostics --output table
    Windows
    ssm-cli.exe get-diagnostics --output table
    PowerShell
    .\ssm-cli.exe get-diagnostics --output table
    참고: Windows Server 시스템에서는 ssm-cli 명령을 실행하기 전에 C:\Program Files\Amazon\SSM 디렉터리로 이동해야 합니다.

SSM Agent가 제대로 작동하지 않는 경우 ssm-cli 명령을 사용하지 못할 수 있습니다. 자세한 내용은 SSM Agent 문제 해결을 참조하십시오.

Amazon EC2 인스턴스 문제를 수동으로 해결

포트 443에서 Systems Manager 엔드포인트에 대한 연결 확인

포트 443의 Systems Manager 엔드포인트에 대한 연결 검증은 OS 및 서브넷 설정에 따라 다릅니다. 리전별 Systems Manager 엔드포인트 목록은 서비스 엔드포인트를 참조하십시오.

참고: 다음 예에서는 Session Manager에 ssmmessages 엔드포인트가 필요합니다.

EC2 Linux 인스턴스

Telnet 또는 Netcat 명령을 사용하여 EC2 Linux 인스턴스의 포트 443에 있는 엔드포인트에 대한 연결을 확인합니다. Netcat은 EC2 인스턴스에 사전 설치되어 있지 않습니다. Netcat을 수동으로 설치하려면 Nmap 웹 사이트에서 Ncat을 참조하십시오.

참고: 다음 명령에서 RegionID를 인스턴스의 리전 ID로 바꾸십시오.

Telnet 명령:

telnet ssm.RegionID.amazonaws.com 443
telnet ec2messages.RegionID.amazonaws.com 443
telnet ssmmessages.RegionID.amazonaws.com 443

Telnet 연결 예시:

root@111800186:~# telnet ssm.us-east-1.amazonaws.com 443
Trying 52.46.141.158...
Connected to ssm.us-east-1.amazonaws.com.
Escape character is '^]'.

Telnet을 종료하려면 Ctrl] 키를 누릅니다. quit을 입력한 다음 Enter 키를 누릅니다.

Netcat 명령:

nc -vz ssm.RegionID.amazonaws.com 443
nc -vz ec2messages.RegionID.amazonaws.com 443
nc -vz ssmmessages.RegionID.amazonaws.com 443

EC2 Windows 인스턴스

EC2 Windows 인스턴스의 포트 443 엔드포인트 연결을 확인하려면 다음 Windows PowerShell 명령을 실행합니다.

Test-NetConnection ssm.RegionID.amazonaws.com -port 443
Test-NtConnection ec2messages.RegionID.amazonaws.com -port 443
Test-NetConnection ssmmessages.RegionID.amazonaws.com -port 443

퍼블릭 서브넷

Systems Manager 엔드포인트는 퍼블릭 엔드포인트입니다. 퍼블릭 서브넷에 있는 인스턴스의 연결 문제를 해결하려면 인스턴스 라우팅 테이블이 인터넷 트래픽을 인터넷 게이트웨이로 라우팅해야 합니다. 또한 Amazon Virtual Private Cloud(Amazon VPC) 보안 그룹네트워크 액세스 제어 목록(네트워크 ACL)이 포트 443에서 아웃바운드 연결을 허용해야 합니다.

프라이빗 서브넷

프라이빗 IP 주소를 사용하여 Amazon EC2 및 시스템 관리자 API에 비공개로 액세스합니다. 프라이빗 서브넷에 있는 인스턴스의 연결 문제를 해결하려면 인스턴스의 라우팅 테이블이 인터넷 트래픽을 NAT 게이트웨이로 라우팅해야 합니다. 또는 Systems Manager 엔드포인트에 도달하도록 VPC 엔드포인트를 구성해야 합니다.

자세한 내용을 보려면 인터넷에 액세스하지 않고도 Systems Manager를 사용하여 프라이빗 EC2 인스턴스를 관리할 수 있도록 VPC 엔드포인트를 만들려면 어떻게 합니까?를 참조하십시오.

참고: 각 인터페이스 엔드포인트는 제공된 서브넷에 탄력적 네트워크 인터페이스를 만듭니다.

프라이빗 서브넷에 대한 보안 모범 사례로 다음 설정을 확인하십시오.

  • VPC 엔드포인트의 네트워크 인터페이스에 연결된 보안 그룹은 인스턴스에 연결된 보안 그룹으로부터의 TCP 포트 443 인바운드 트래픽을 허용합니다.
  • 인스턴스에 연결된 보안 그룹이 VPC 엔드포인트의 네트워크 인터페이스에 대한 프라이빗 IP 주소로 TCP 포트 443 아웃바운드 트래픽을 허용합니다.

기본 호스트 관리 구성 설정 확인

참고: 기본 호스트 관리 구성을 활성화하지 않는 경우 올바른 IAM 역할이 인스턴스에 연결되어 있는지 확인 섹션으로 건너뛰십시오.

사용 사례에 충분한 권한이 기본 호스트 관리 구성에서 생성한 IAM 역할에 없는 경우 정책을 추가할 수 있습니다.

연결된 모든 인스턴스는 IMDSv2(인스턴스 메타데이터 서비스 버전 2)를 사용해야 합니다. IMDSv2 구성을 확인하려면 MetadataNoToken Amazon CloudWatch 지표를 사용하여 IMDSv1 사용이 전혀 없는 시기를 확인하십시오. 이후 인스턴스가 IMDSv2로 전환되었는지 확인합니다.

기본 호스트 관리 구성은 SSM Agent 버전 3.2.582.0 이상에서 사용할 수 있습니다. SSM Agent 버전을 확인하려면 SSM Agent 버전 번호 확인을 참조하십시오.

기본 호스트 관리 구성 설정을 확인하려면 Systems Manager 콘솔 또는 AWS CLI를 사용하십시오.

시스템 관리자 콘솔

다음 단계를 완료하십시오.

  1. Systems Manager 콘솔을 엽니다.
  2. 탐색 창에서 Fleet Manager를 선택합니다.
  3. 계정 관리 드롭다운 목록에서 기본 호스트 관리 구성을 선택합니다.
  4. 기본 호스트 관리 구성 활성화 설정이 켜져 있는지 확인합니다.

AWS CLI

get-service-setting AWS CLI 명령을 실행하여 기본 호스트 관리 구성에 대한 설정을 확인합니다.

aws ssm get-service-setting \
--setting-id arn:aws:ssm:RegionID:AccountID:servicesetting/ssm/managed-instance/default-ec2-instance-management-role

참고: AccountID를 원하는 AWS 계정 ID로 바꾸십시오.

기본 호스트 관리 구성을 활성화하면 다음과 비슷한 출력이 표시됩니다.

{
  "ServiceSetting": {
    "SettingId": "/ssm/managed-instance/default-ec2-instance-management-role",
    "SettingValue": "service-role/AWSSystemsManagerDefaultEC2InstanceManagementRole",
     "LastModifiedDate": 1679492424.738,
    "LastModifiedUser": "arn:aws:sts::012345678910:assumed-role/role/role-name",
    "ARN": "arn:aws:ssm:ap-southeast-1:012345678910:servicesetting/ssm/managed-instance/default-ec2-instance-management-role",
    "Status": "Customized"
  }
}

참고: SettingValue의 값이 $None이면 기본 호스트 관리 구성이 구성되지 않은 것입니다.

기본 호스트 관리 구성이 적절한 IAM 역할을 사용하고 있는지 확인

기본 호스트 관리 구성을 설정할 때 AWSSystemsManagerDefaultEC2InstanceManagementRole IAM을 사용하는 것이 좋습니다. 다른 역할을 사용하려면 AmazonSSMManagedEC2InstanceDefaultPolicy IAM 정책을 역할에 연결해야 합니다.

인스턴스에 인스턴스 프로필이 연결되어 있는 경우 ssm:UpdateInstanceInformation 작업을 허용하는 모든 권한을 제거합니다. SSM Agent가 기본 호스트 관리 구성 권한을 사용하기 전에 인스턴스 프로파일 권한을 사용하려고 합니다. 인스턴스 프로파일에서 ssm:UpdateInstanceInformation 작업을 허용하면 인스턴스에서 기본 호스트 관리 구성 권한이 사용되지 않습니다.

인스턴스에 올바른 IAM 역할이 연결되어 있는지 확인

참고: 기본 호스트 관리 구성을 활성화한 경우 IMDS에 대한 연결 확인 섹션으로 이동하십시오.

Systems Manager 엔드포인트에 API 직접 호출을 수행하려면 인스턴스에 연결된 IAM 역할에 AmazonSSMManagedInstanceCore 정책을 첨부해야 합니다. 사용자 지정 IAM 정책을 사용하는 경우 사용자 지정 정책이 AmazonSSMManagedInstanceCore의 권한을 사용하는지 확인합니다. 또한 IAM 역할에 대한 신뢰 정책에서 ec2.amazonaws.com이 역할을 수임할 수 있도록 허용하는지 확인하십시오. 자세한 내용은 EC2 인스턴스 권한의 대체 구성을 참조하십시오.

IMDS에 대한 연결 확인

SSM Agent는 IMDS와 통신하여 인스턴스에 대한 정보를 가져와야 합니다. 연결을 테스트하려면 인스턴스 OS에 따라 다음 명령을 실행합니다.

  • Linux

    nc -vz 169.254.169.254 80
  • Windows

    Test-NetConnection 169.254.169.254 -port 80

기존 인스턴스에 IMDS가 설정되어 있는지 확인하려면 Amazon EC2 콘솔 또는 AWS CLI를 사용하십시오.

Amazon EC2 콘솔

다음 단계를 완료하십시오.

  1. Amazon EC2 콘솔을 엽니다.
  2. 탐색 창에서 Instances(인스턴스)를 선택한 다음, 해당 인스턴스를 선택합니다.
  3. Actions(작업)를 선택하고 Instance settings(인스턴스 설정)를 선택합니다.
  4. Modify instance metadata options(인스턴스 메타데이터 옵션 수정)를 선택합니다.
  5. 대화 상자에서 Instance metadata service(인스턴스 메타데이터 서비스)가 Enabled(활성화)여야 합니다.

AWS CLI

describe-instances AWS CLI 명령을 실행하여 기존 인스턴스에 IMDS가 설정되어 있는지 확인합니다.

aws ec2 describe-instances --query "Reservations[*].Instances[*].MetadataOptions" --instance-ids i-012345678910

출력 예시:

[
  [
    {
      "State": "applied",
      "HttpTokens": "optional",
      "HttpPutResponseHopLimit": 1,
      "HttpEndpoint": "enabled",
      "HttpProtocolIpv6": "disabled",
      "InstanceMetadataTags": "disabled"
    }
  ]
]

참고: 출력에 **"HttpTokens": "optional"**이 표시되는 경우 IMDSv1과 IMDSv2가 모두 지원됩니다. 출력에 **"HttpTokens": "required"**가 표시되는 경우 IMDSv2가 지원됩니다. 출력에 **"HttpEndpoint": "enabled"**가 표시되는 경우 IMDS가 켜진 것입니다.

인스턴스에서 프록시를 사용하는 경우 프록시가 메타데이터 URL에 대한 연결을 차단할 수 있습니다. 차단을 방지하기 위해 프록시와 함께 작동하도록 SSM 에이전트를 구성하고 메타데이터 URL에 no_proxy를 설정합니다.

프록시를 사용하도록 SSM Agent를 구성하려면 다음 AWS 설명서를 참조하십시오.

추가 문제 해결

인스턴스가 여전히 관리되는 노드로 표시되지 않거나 Systems Manager에서 연결이 끊어진 것으로 표시되면 SSM Agent 로그를 검토하고 문제를 해결하십시오. Linux와 macOS의 경우 로그는 /var/log/amazon/ssm에 있습니다. Windows의 경우 로그는 %PROGRAMDATA%\Amazon\SSM\Logs에 있습니다.

인스턴스가 SSM Agent에 보고하지 않는 경우 Windows용 Remote Desktop Protocol(RDP) 또는 Linux용 SSH를 사용하여 로그를 수집하십시오. 로그를 수집할 수 없는 경우 인스턴스를 중지하고 루트 볼륨을 분리하십시오. 그런 다음 루트 볼륨을 보조 볼륨과 같은 가용성 영역에 있는 다른 인스턴스에 연결하여 로그를 가져옵니다.

관련 정보

Systems Manager Automation 런북 참조

Amazon EC2 인스턴스에 Amazon Elastic Block Store(Amazon EBS) 볼륨 연결

인스턴스에서 볼륨 분리

Amazon EBS 볼륨을 사용하도록 설정

댓글 없음