為什麼我的 EC2 執行個體未顯示為受管節點或在 Systems Manager 中顯示「連線中斷」狀態?

4 分的閱讀內容
0

我的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體會失去連線,或是無法在 AWS Systems Manager 主控台中的 Fleet Manager 下顯示。

解決方法

受管理執行個體是與系統管理員一起使用的 EC2 執行個體作為受管理節點

若要確認您的 EC2 執行個體符合成為受管執行個體的先決條件,請執行 AWSSupport-TroubleshootManagedInstance Systems Manager Automation 文件。然後,確認您的 EC2 執行個體符合下列要求。

**重要:**在整個疑難排解步驟中,選取包含 EC2 執行個體的 AWS 區域。

確認 SSM Agent 已安裝並在執行個體上執行

確認您的作業系統支援 Systems Manager 後,請確認 AWS Systems Manager Agent (SSM Agent) 已安裝並在您的執行個體上執行。

SSM Agent 已預先安裝在某些 Linux、macOS 和 Windows Amazon Machine Image (AMI) 上。若要在未預先安裝代理程式時手動安裝 SSM Agent,請參閱下列文件:

若要驗證 SSM Agent 是否正在執行,請使用作業系統特定的命令來檢查代理程式狀態

完成驗證 SSM Agent 之後,請執行 ssm-cli 以對受管執行個體可用性進行疑難排解。

驗證連接埠 443 上 Systems Manager 端點的連接性

若要驗證連接埠 443 上 Systems Manager 端點的連接性,必須考慮作業系統和子網路設定。如需依區域劃分的 Systems Manager 端點清單,請參閱 AWS Systems Manager 端點和配額

**注意:**在範例中,AWS Systems Manager Session Manager 需要 ssmmessages 端點。

EC2 Linux 執行個體

對 EC2 Linux 執行個體使用 Telnet 或 Netcat 命令驗證連接埠 443 上端點的連接性。

**注意:**執行命令時,用您的執行個體的區域取代 RegionID

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

Netcat 未預先安裝在 EC2 執行個體上。若要手動安裝 Netcat,請參閱 Nmap 網站上的 Ncat

EC2 Windows 執行個體

對 EC2 Windows 執行個體使用下列 Windows PowerShell 命令驗證連接埠 443 上端點的連接性。

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

公有子網路

Systems Manager 端點是公有端點。若要解決從公有子網路中的執行個體連線到端點時的問題,請確認下列幾點:

私有子網路

使用私有 IP 位址私密存取 Amazon EC2 和 Systems Manager API。若要解決從私有子網路中的執行個體連線到端點時的問題,請確認下列其中一點:

  • 執行個體的路由表將網際網路流量路由至 NAT 閘道。
  • VPC 端點已設定為連線 Systems Manager 端點。

如需詳細資訊,請參閱如何建立 VPC 端點以便我可以使用 Systems Manager 在沒有網際網路存取時管理私有 EC2 執行個體?

**注意:**每個介面端點會在提供的子網路中建立彈性網路介面。

作為私有子網路的安全性最佳實踐,請確認下列設定:

  • 附加到 VPC 端點的網路介面的安全群組允許來自附加到執行個體的安全群組的 TCP 連接埠 443 傳入流量。
  • 附加到執行個體的安全群組允許 TCP 連接埠 443 傳出流量到 VPC 端點網路介面的私有 IP 位址。

驗證預設主機管理組態的設定

**注意:如果您不使用預設主機管理組態,請跳至「確認正確的 IAM 角色是否已附加至執行個體」**區段。

在設定預設主機管理組態時,Systems Manager 會自動管理不含 AWS 身分與存取管理 (IAM) 執行個體設定檔的 EC2 執行個體。在設定此功能時,Systems Manager 具有管理您的區域和帳戶中所有執行個體的權限。如果權限對您的使用案例不足,請新增政策至預設主機管理組態所建立的預設 IAM 角色。

所有關聯的執行個體都必須使用 Instance Metadata Service 版本 2 (IMDSv2)。若要檢查您的 IMDSv2 組態,請參閱 IMDSv1 使用為零時檢查執行個體是否已轉換為 IMDSv2

預設主機管理組態在 SSM Agent 版本 3.2.582.0 或更新版本中可以使用。若要驗證您的 SSM Agent 版本,請參閱檢查 SSM Agent 版本號

若要驗證預設主機管理組態的設定,請完成下列步驟:

  1. 開啟 Systems Manager 主控台
  2. 在導覽窗格中,選擇 Fleet Manager
  3. 帳戶管理下拉清單中,選擇預設主機管理組態
  4. 確認啟用預設主機管理組態設定已開啟。

您也可以使用下列 AWS Command Line Interface (AWS CLI) 命令來驗證預設主機管理組態的設定:

**注意:**執行命令時,以您的 AWS 帳戶 ID 取代 AccountID

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

設定預設主機管理組態時,您會收到類似下列內容的回應:

{
  "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 角色。若要使用其他角色,請確保該角色已附加 the AmazonSSMManagedEC2InstanceDefaultPolicy IAM 政策。

如果您的 EC2 執行個體已附加執行個體設定檔,則移除允許 ssm:UpdateInstanceInformation 作業的所有權限。SSM Agent 會嘗試使用執行個體設定檔權限,然後再使用預設主機管理組態權限。當您允許執行個體設定檔中執行 ssm:UpdateInstanceInformation 作業時,執行個體不會使用預設主機管理組態權限。

確認正確的 IAM 角色已附加至執行個體

注意:如果您使用的是預設主機管理組態,請跳至驗證與 IMDS 的連線區段。

若要對 Systems Manager 端點進行 API 呼叫,您必須將 AmazonSSMManagedInstanceCore 政策附加到已附加至執行個體的 IAM 角色。如果您使用的是自訂 IAM 政策,請確認您的自訂策略是否使用 AmazonSSMManagedInstanceCore 中的權限。此外,請確保您的 IAM 角色的信任政策允許 ec2.amazonaws.com 擔任此角色。

如需詳細資訊,請參閱將權限新增至 Systems Manager 執行個體設定檔 (主控台)

驗證與 IMDS 的連線

SSM Agent 必須與執行個體中繼資料服務 (IMDS) 通訊,以取得關於執行個體的必要資訊。為測試連線,請執行下列 Netcat 命令:

nc -vz 169.254.169.254 80

若要驗證是否已為現有執行個體設定 IMDS,請執行下列其中一個步驟:

  • 開啟 Amazon EC2 主控台。在導覽窗格中,選擇執行個體,選取執行個體,然後選擇動作執行個體設定修改執行個體中繼資料選項。在對話方塊中,必須啟用****執行個體中繼資料服務

  • 在 AWS CLI 中,執行 describe-instances CLI 命令。

    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 Agent 設定為支援代理伺服器,並為中繼資料 URL 設定 no_proxy。若要設定 SSM Agent 使用代理伺服器,請參閱下列文件:

其他疑難排解

如果您的執行個體仍未顯示為受管理節點或在 Systems Manager 中顯示連線中斷,請繼續在 SSM Agent 日誌中繼續疑難排解:

  • Linux 和 macOS: SSM Agent 日誌位於 /var/log/amazon/ssm 中。
  • Windows: SSM Agent 日誌位於 %PROGRAMDATA%\Amazon\SSM\Logs 中。

當您的執行個體未報告給 SSM Agent 時,請嘗試使用 RDP (Windows) 或 SSH (Linux) 登入以收集日誌。如果無法收集日誌,則必須停止執行個體並分離根磁碟區。然後,將根磁碟區附加到與次要磁碟區相同的可用區域中的另一個執行個體,以取得日誌。

相關資訊

將 Amazon Elastic Block Store (Amazon EBS) 磁碟區附加到執行個體

從 Linux 執行個體分離 Amazon EBS 磁碟區

讓 Amazon EBS 磁碟區可在 Linux 上使用

讓 Amazon EBS 磁碟區可在 Windows 上使用

AWS 官方
AWS 官方已更新 10 個月前