スキップしてコンテンツを表示

使用している Amazon EC2 インスタンスが、Systems Manager でマネージドインスタンスとして表示されない原因を教えてください。

所要時間5分
0

「SSM Agent is not online」エラーが発生したり、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスが Fleet Manager に表示されなかったりする原因を把握したいです。

簡単な説明

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスにおいて、AWS Systems Manager Agent (SSM Agent) がオフラインになっている場合、次の通知が行われます。

  • AWS Systems Manager の機能である Session Manager は、次のエラーを表示します: 「SSM Agent is not online.The SSM Agent was unable to connect to a Systems Manager endpoint to register itself with the service (SSM Agent は Systems Manager エンドポイントに接続できないため、サービスに登録できません)」
  • AWS Systems Manager の機能である Fleet Manager では、インスタンスの ping ステータスは「Connection Lost」エラーとして報告されます。
  • Fleet Manager のリストには、使用しているインスタンスは表示されません。

注: SSM Agent がオフラインの場合、使用しているインスタンスは Systems Manager ではマネージドインスタンスとして表示されません。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

次の前提条件を満たした上で、AWSSupport-TroubleshootManagedInstance ランブックを実行し、SSM Agent がオフラインになったり、Systems Manager に接続できなかったりする原因を判断してください。詳細については、「Systems Manager Automation による自動操作を実行する」および「オートメーションを設定する」を参照してください。

AWS CLI を使用してインスタンスをトラブルシューティングするか、インスタンスを手動でトラブルシューティングしてもかまいません。

SSM Agent がインストール済みであり、実行中であることを確認する

重要: すべてのトラブルシューティング手順では、インスタンスを配置した AWS リージョンを選択してください。

Systems Manager は、使用するオペレーティングシステム (OS) をサポートしていることを確認してください。次に、使用する OS に応じたコマンドを実行し、SSM Agent がインストール済みであることを確認してください。

注: SSM Agent は、ほとんどの Amazon マシンイメージ (AMI) にプリインストールされています。詳細については、「SSM Agent がプリインストールされている AMI を見つける」を参照してください。インスタンスに SSM Agent がインストール済みでない場合は、LinuxWindows、または macOS に手動でインストールしてください。

SSM Agent が実行中状態であり、SSM Agent が休止状態になっていないことを確認するには、次の手順を実行します。

  1. Amazon EC2 コンソールを開きます。
  2. 左側のナビゲーションペインで [インスタンス] を選択します。
  3. 該当するインスタンスを選択します。
  4. [アクション][モニタリングとトラブルシューティング][システムログを取得] を選択します。

SSM Agent が実行中の場合は、「Amazon SSM Agent vx.x.x.x is running」というメッセージが表示されます。

SSM エージェントが休止状態の場合、次のいずれかのメッセージが表示され、その後に SSM エージェントが休止状態になっている理由が表示されます。

  • 「SSM Agent entering hibernation due to error (エラーにより SSM Agent は休止状態に移行しています)」
  • 「SSM Agent unable to acquire credentials: (SSM Agent は認証情報を取得できません)」

注: 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 を手動で入力することも、インタラクティブなインスタンスピッカーを使用することもできます。インスタンスピッカーを使用する場合は、フィルターを [マネージドインスタンスのみ表示] から [すべてのインスタンスを表示] に変更します。
    (オプション) Systems Manager Automation がユーザーに代わってアクションを実行できるようにする IAM ロールの Amazon リソースネーム (ARN) を、AutomationAssumeRole に入力します。ロールが指定されていない場合、Systems Manager Automation ではこのドキュメントを実行するユーザーのアクセス許可を使用します。
  3. [実行] を選択します。

オートメーションの完了後、[出力] セクションを確認してください。FinalOutput.Message 変数は、Systems Manager がインスタンスを管理しているかどうか、チェックに合格したかどうかを示します。この変数からは、障害のトラブルシューティング方法に関する情報を取得できます。

AWS CLI を使用してオフラインの SSM Agent をトラブルシューティングする

次の手順を実行します。

  1. SSH または Remote Desktop Protocol 経由でインスタンスにアクセスできることを確認します。
  2. AWS CLI コマンド ssm-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 マシンでは、C:\Program Files\Amazon\SSM ディレクトリに移動した後に ssm-cli コマンドを実行する必要があります。

SSM Agent が正常に機能していない場合、ssm-cli コマンドは使用できない可能性があります。詳細については、「SSM Agent のトラブルシューティング」を参照してください。

Amazon EC2 インスタンスを手動でトラブルシューティングする

ポート 443 での Systems Manager エンドポイントへの接続を確認する

ポート 443 での Systems Manager エンドポイントへの接続を検証する方法は、OS とサブネットの設定によって異なります。リージョン別の Systems Manager エンドポイントのリストについては、「サービスエンドポイント」を参照してください。

注: 次の例では、Session Manager には ssmmessages エンドポイントが必要です。

EC2 Linux インスタンス

Telnet または Netcat コマンドを使用して、ポート 443 での EC2 Linux インスタンスのエンドポイントへの接続を確認します。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 インスタンスの場合は、次の Windows PowerShell コマンドを実行して、ポート 443 でのエンドポイントへの接続を確認します。

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 と Systems Manager API にプライベートでアクセスします。プライベートサブネット内のインスタンスとの接続の問題を解決するには、インスタンスのルートテーブルはインターネットトラフィックを NAT ゲートウェイにルーティングする必要があります。または、Systems Manager エンドポイントに到達できるように VPC エンドポイントを設定する必要があります。

詳細については、「インターネットにアクセスせずに Systems Manager でプライベート EC2 インスタンスを管理するために、VPC エンドポイントを作成する方法を教えてください。」を参照してください。

注: 各インターフェイスのエンドポイントは、指定されたサブネットにエラスティックネットワークインターフェイスを作成します。

プライベートサブネットのセキュリティ上のベストプラクティスとして、次の設定を確認してください。

  • VPC エンドポイントのネットワークインターフェイスにアタッチされたセキュリティグループで、インスタンスにアタッチされたセキュリティグループからのインバウンドトラフィックを TCP ポート 443 で許可している。
  • インスタンスにアタッチされたセキュリティグループで、VPC エンドポイントのネットワークインターフェイスのプライベート IP アドレスへのアウトバウンドトラフィックを TCP ポート 443 で許可している。

デフォルトのホスト管理設定を確認する

注: デフォルトのホスト管理設定を有効化していない場合は、「適切な IAM ロールがインスタンスにアタッチされていることを確認する」セクションに進んでください。

デフォルトのホスト管理設定で作成した IAM ロールにユースケースに必要なアクセス許可がない場合は、ポリシーを追加します。

関連するすべてのインスタンスは、Instance Metadata Service Version 2 (IMDSv2) を使用する必要があります。IMDSv2 の設定を確認するには、Amazon CloudWatch メトリクス MetadataNoToken を参考に、IMDSv1 の使用量がゼロになるタイミングを判断します。次に、インスタンスが IMDSv2 に移行しているかどうかを確認します。

デフォルトのホスト管理設定は、SSM Agent のバージョン 3.2.582.0 以降で使用できます。SSM Agent のバージョンを確認するには、「SSM Agent のバージョン番号を確認する」を参照してください。

デフォルトのホスト管理設定の設定内容を確認するには、Systems Manager コンソールまたは AWS CLI を使用します。

Systems Manager コンソール

次の手順を実行します。

  1. Systems Manager コンソールを開きます。
  2. ナビゲーションペインで [Fleet Manager] を選択します。
  3. [アカウント管理] ドロップダウンリストで [デフォルトのホスト管理設定] を選択します。
  4. [デフォルトのホスト管理構成を有効にする] 設定が有効であることを確認します。

AWS CLI

AWS CLI コマンド get-service-setting を実行し、デフォルトのホスト管理設定の設定内容を確認します。

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 を使用するのがベストプラクティスです。別のロールを使用する場合は、そのロールに IAM ポリシー AmazonSSMManagedEC2InstanceDefaultPolicy がアタッチされている必要があります。

EC2 インスタンスにインスタンスプロファイルがアタッチされている場合は、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. ナビゲーションペインで [インスタンス] を選択し、該当するインスタンスを選択します。
  3. [アクション] を選択し、[インスタンス設定] を選択します。
  4. [インスタンスメタデータオプションの変更] を選択します。
  5. ダイアログボックスで、インスタンスメタデータサービス有効になっていることを確認します。

AWS CLI

AWS CLI コマンド describe-instances を実行し、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 Agent をプロキシと連携するよう構成し、メタデータの 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 ボリュームを使用できるようにする

コメントはありません