

# パブリック IP アドレスと EC2 Instance Connect を使用して Linux インスタンスに接続する
<a name="connect-linux-inst-eic"></a>

Amazon EC2 Instance Connect を使用すると、Secure Shell (SSH) 経由で Linux インスタンスに安全に接続できます。EC2 Instance Connect では、AWS Identity and Access Management (IAM) [ポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)および[プリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal)を使用して、インスタンスへの SSH によるアクセスをコントロールします。SSH キーを共有および管理する必要はありません。EC2 Instance Connect を使用したすべての接続リクエストは、[AWS CloudTrail にログとして記録される](monitor-with-cloudtrail.md#ec2-instance-connect-cloudtrail)ため、接続リクエストを監査できます。

EC2 Instance Connect では、Amazon EC2 コンソールまたは任意の SSH クライアントを使用してインスタンスに接続できます。

EC2 Instance Connect を使用してインスタンスに接続すると、EC2 Instance Connect API から SSH パブリックキーが[インスタンスメタデータ](ec2-instance-metadata.md)にプッシュされ、60 秒間保持されます。ユーザーにアタッチされた IAM ポリシーにより、ユーザーはパブリックキーをインスタンスメタデータにプッシュすることを許可されます。SSH デーモンは、インスタンスメタデータから承認用のパブリックキーを検索してユーザーをインスタンスに接続するために、EC2 Instance Connect のインストール時に設定される `AuthorizedKeysCommand` と `AuthorizedKeysCommandUser` を使用します。

**ヒント**  
EC2 Instance Connect は Linux インスタンスに接続するためのオプションの 1 つです。他のオプションについては、「[SSH を使用した Linux インスタンスへの接続](connect-to-linux-instance.md)」を参照してください。Windows インスタンスに接続するには、「[RDP を使用した Windows インスタンスへの接続](connecting_to_windows_instance.md)」を参照してください。

**料金**  
EC2 Instance Connect は、追加のコストなしで利用できます。

**リージョンの可用性**  
EC2 Instance Connect はアジアパシフィック (台北) を除き、すべての AWS リージョン で利用できます。Local Zones ではサポートされていません。

**Topics**
+ [チュートリアル](ec2-instance-connect-tutorial.md)
+ [前提条件](ec2-instance-connect-prerequisites.md)
+ [アクセス許可](ec2-instance-connect-configure-IAM-role.md)
+ [EC2 Instance Connect のインストール](ec2-instance-connect-set-up.md)
+ [インスタンスへの接続](ec2-instance-connect-methods.md)
+ [EC2 Instance Connect のアンインストール](ec2-instance-connect-uninstall.md)

EC2 Instance Connect を使用して拠点ホストのセキュリティを強化する方法に関して説明しているブログ投稿については、「[Amazon EC2 Instance Connect を使用した拠点ホストの保護](https://aws.amazon.com/blogs/infrastructure-and-automation/securing-your-bastion-hosts-with-amazon-ec2-instance-connect/)」を参照してください。

# チュートリアル: EC2 Instance Connect を使用してインスタンスに接続するために必要な設定を完了する
<a name="ec2-instance-connect-tutorial"></a>

Amazon EC2 コンソールで EC2 Instance Connect を使用してインスタンスに接続するには、まず、インスタンスに正常に接続するための前提条件の設定を完了する必要があります。このチュートリアルの目的は、前提条件となる設定を完了するためのタスクを順を追って説明することです。

**チュートリアルの概要**

このチュートリアルでは、以下の 4 タスクを完了します。
+ [タスク 1: EC2 Instance Connect を使用するために必要なアクセス許可を付与する](#eic-tut1-task1)

  まず、パブリックキーをインスタンスメタデータにプッシュできる IAM アクセス許可を含む IAM ポリシーを作成します。IAM ID (ユーザー、ユーザーグループ、またはロール) にこのポリシーをアタッチして、IAM ID がこれらのアクセス許可を取得できるようにします。
+ [タスク 2: EC2 Instance Connect サービスからインスタンスへのインバウンドトラフィックを許可する](#eic-tut1-task2)

  次に、EC2 Instance Connect サービスからインスタンスへのトラフィックを許可するセキュリティグループを作成します。これは、Amazon EC2 コンソールで EC2 Instance Connect を使用してインスタンスに接続するときに必要です。
+ [タスク 3: インスタンスを起動する](#eic-tut1-task3)

  次に、EC2 Instance Connect にあらかじめインストールされている AMI を使用して EC2 インスタンスを起動し、前のステップで作成したセキュリティグループを追加します。
+ [タスク 4: インスタンスに接続する](#eic-tut1-task4)

  最後に、Amazon EC2 コンソールで EC2 Instance Connect を使用してインスタンスに接続します。接続できたら、タスク 1、2、3 で完了した前提条件の設定が成功したことを確認できます。

## タスク 1: EC2 Instance Connect を使用するために必要なアクセス許可を付与する
<a name="eic-tut1-task1"></a>

EC2 Instance Connect を使用してインスタンスに接続すると、EC2 Instance Connect API から SSH パブリックキーが[インスタンスメタデータ](ec2-instance-metadata.md)にプッシュされ、60 秒間保持されます。パブリックキーをインスタンスメタデータにプッシュするために必要なアクセス許可を付与するには、IAM ID (ユーザー、ユーザーグループ、またはロール) にアタッチされた IAM ポリシーが必要です。

**タスクの目標**

パブリックキーをインスタンスにプッシュするアクセス許可を付与する IAM ポリシーを作成します。許可する具体的なアクションは `ec2-instance-connect:SendSSHPublicKey` です。Amazon EC2 コンソールでインスタンスを表示して選択できるように、`ec2:DescribeInstances` アクションを許可する必要もあります。

ポリシーを作成したら、そのポリシーを IAM ID (ユーザー、ユーザーグループ、またはロール) にアタッチして、IAM ID にアクセス許可が付与されるようにします。

以下のように構成されたポリシーを作成します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": "ec2-instance-connect:SendSSHPublicKey",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:DescribeInstances",
            "Resource": "*"
        }
    ]
}
```

------

**重要**  
このチュートリアルで作成した IAM ポリシーは非常に強力なアクセス許可を持つポリシーで、任意の AMI ユーザー名を使用して任意のインスタンスに接続できます。チュートリアルをシンプルにし、このチュートリアルで説明する特定の設定に焦点を当てるために、この非常に強力なアクセス許可を持つポリシーを使用しています。ただし、本番環境では、[最小権限のアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)を付与するように IAM ポリシーを設定することをお勧めします。IAM ポリシーの例は [IAM への EC2 Instance Connect のアクセス許可の付与](ec2-instance-connect-configure-IAM-role.md) を参照してください。

**EC2 Instance Connect を使用してインスタンスに接続することを許可する IAM ポリシーを作成してアタッチするには**

1. **まず、IAM ポリシーを作成します**

   1. IAM コンソールの [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) を開いてください。

   1. ナビゲーションペインで、**ポリシー** を選択してください。

   1. [**ポリシーの作成**] を選択してください。

   1. **[アクセス許可の指定]** ページで、以下を実行します。

      1. **[サービス]** で、**[EC2 Instance Connect]** を選択してください。

      1. **[許可されたアクション]** の検索フィールドに **send** を入力すると関連するアクションが表示されるので、**[SendSSHPublicKey]** を選択してください。

      1. **[リソース]** で、**[すべて]** を選択してください。本番環境では、ARN でインスタンスを指定することをお勧めしますが、このチュートリアルではすべてのインスタンスを許可します。

      1. **[アクセス許可の追加]** を選択してください。

      1. **サービス**で **EC2** を選択してください。

      1. **[許可されたアクション]** の検索フィールドに **describein** を入力すると関連するアクションが表示されるので、**[DescribeInstances]** を選択してください。

      1. [**Next**] を選択してください。

   1. **[レビューと作成]** ページで、以下の操作を実行します。

      1. [**Policy Name**] にこのポリシーの名前を入力してください。

      1. [**Create policy**] を選択してください。

1. **次に、ポリシーを自分の ID にアタッチします。**

   1. IAM コンソールのナビゲーションペインから、[**ポリシー**] を選択してください。

   1. ポリシーのリストで、作成したポリシーの名前の横にあるラジオボックスをオンにします。検索ボックスを使用して、ポリシーのリストをフィルタリングできます。

   1. [**アクション**]、[**アタッチ**] の順にクリックしてください。

   1. **[IAM エンティティ]** で、ID (ユーザー、ユーザーグループ、ロール) の横にあるチェックボックスをオンにします。検索ボックスを使用して、エンティティのリストをフィルタリングできます。

   1. **Attach policy]** (ポリシーのアタッチ) を選択してください。

### アニメーションを表示: IAM ポリシーの作成
<a name="eic-tut1-task1-animation1"></a>

![\[このアニメーションは、IAM ポリシーの作成方法を示します。このアニメーションのテキストバージョンについては、前述の手順のステップを参照してください。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/eic-tut1-task1-create-iam-policy.gif)


### アニメーションを表示: IAM ポリシーのアタッチ
<a name="eic-tut1-task1-animation2"></a>

![\[このアニメーションでは、IAM ポリシーを IAM ID にアタッチする方法を説明します。このアニメーションのテキストバージョンについては、前述の手順のステップを参照してください。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/eic-tut1-task1-attach-iam-policy.gif)


## タスク 2: EC2 Instance Connect サービスからインスタンスへのインバウンドトラフィックを許可する
<a name="eic-tut1-task2"></a>

Amazon EC2 コンソールで EC2 Instance Connect を使用してインスタンスに接続する場合、インスタンスに到達できるようにする必要があるトラフィックは、EC2 Instance Connect サービスからのトラフィックです。これはローカルコンピュータからインスタンスへの接続とは異なります。その場合は、ローカルコンピュータからインスタンスへのトラフィックを許可する必要があります。EC2 Instance Connect サービスからのトラフィックを許可するには、EC2 Instance Connect サービスの IP アドレス範囲からのインバウンド SSH トラフィックを許可するセキュリティグループを作成する必要があります。

AWS はプレフィックスリストを使用して IP アドレス範囲を管理します。EC2 Instance Connect プレフィックスリストの名前は次のとおりです。*リージョン* はリージョンコードに置き換えられます。
+ IPv4 プレフィックスリスト名: `com.amazonaws.region.ec2-instance-connect`
+ IPv6 プレフィックスリスト名: `com.amazonaws.region.ipv6.ec2-instance-connect`

**タスクの目標**

インスタンスが配置されているリージョンの IPv4 プレフィックスリストからポート 22 のインバウンド SSH トラフィックを許可するセキュリティグループを作成します。

**EC2 Instance Connect サービスからインスタンスへのインバウンドトラフィックを許可するセキュリティグループを作成する方法**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、[**Security Groups**] を選択してください。

1. **[セキュリティグループの作成]** を選択してください。

1. [**基本的な詳細**] で、次の操作を行います。

   1. **[セキュリティグループ名]** に、セキュリティグループのわかりやすい名前を入力してください。

   1. **[説明]** に、セキュリティグループのわかりやすい説明を入力してください。

1. **[インバウンドルール]** で、次の操作を行います。

   1. [**ルールを追加**] を選択してください。

   1. **[タイプ]** で **SSH]** を選択してください。

   1. **[ソース]** は **[カスタム]** のままにします。

   1. **[ソース]** の横にあるフィールドで、EC2 Instance Connect のプレフィックスリストを選択してください。

      例えば、インスタンスが米国東部 (バージニア北部) `us-east-1`リージョンにあり、ユーザーがパブリック IPv4 アドレスに接続する場合は、**[com.amazonaws.us-east-1.ec2-instance-connect]** というプレフィックスリストを選択してください。

1. **[セキュリティグループの作成]** を選択してください。

### アニメーションを表示: セキュリティグループを作成する
<a name="eic-tut1-task2-animation"></a>

![\[このアニメーションでは、セキュリティグループを設定する方法を説明します。このアニメーションのテキストバージョンについては、前述の手順のステップを参照してください。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/tut1-task2-eic-security-group.gif)


## タスク 3: インスタンスを起動する
<a name="eic-tut1-task3"></a>

インスタンスを起動するときは、インスタンスの起動に必要な情報を含む AMI を指定する必要があります。EC2 Instance Connect があらかじめインストールされているかどうかにかかわらず、インスタンスの起動を選択できます。このタスクでは、EC2 Instance Connect にあらかじめインストールされている AMI を指定します。

EC2 Instance Connect のプリインストール無しでインスタンスを起動し、EC2 Instance Connect を使用してインスタンスに接続する場合は、追加の設定手順を実行する必要があります。これらの手順は、このチュートリアルの範囲外です。

**タスクの目標**

EC2 Instance Connect がプリインストールされている Amazon Linux 2023 AMI を使用してインスタンスを起動します。Amazon EC2 コンソールで EC2 Instance Connect を使用してインスタンスに接続できるように、前に作成したセキュリティグループも指定します。EC2 Instance Connect を使用してインスタンスに接続することで、パブリックキーをインスタンスのメタデータにプッシュするため、インスタンスを起動するときに SSH キーを指定する必要はありません。

**Amazon EC2 コンソールで EC2 Instance Connect を使用できるインスタンスを起動するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 画面の上のナビゲーションバーに、現在の AWS リージョンが表示されます (**アイルランド**など)。インスタンスを起動するリージョンを選択してください。特定のリージョンのトラフィックを許可するセキュリティグループを作成したため、インスタンスを起動するのと同じリージョンを選択する必要があり、この選択が重要となります。

1. Amazon EC2 コンソールダッシュボードで、[**インスタンスを起動**] を選択してください。

1. (オプション) **[Names and tags]**(名前とタグ) における **[Name]** (名前) では、インスタンス用にわかりやすい名前を入力してください。

1. **[アプリケーションと OS イメージ (Amazon マシンイメージ)]** で、**[クイックスタート]** を選択してください。**[Amazon Linux]** がデフォルトで選択されています。**[Amazon マシンイメージ (AMI)]** ではデフォルトで、**[Amazon Linux 2023 AMI]** が選択されています。このタスクは既定の選択のままにします。

1. **[インスタンスタイプ]**で、**[インスタンスタイプ]** のデフォルトの選択状態のままにするか、別のインスタンスタイプを選択してください。

1. **[キーペア (ログイン)]** の **[キーペア名]** で、**[キーペアなしで続行 (非推奨)]** を選択してください。EC2 Instance Connect を使用してインスタンスに接続すると、EC2 Instance Connect はキーペアをインスタンスのメタデータにプッシュします。接続に使用されるのはこのキーペアです。

1. **[Network settings]** (ネットワーク設定) で、次の操作を行います：

   1. **[自動割り当てパブリック IP]** は、**[有効]** のままにします。
**注記**  
Amazon EC2 コンソールで EC2 Instance Connect を使用してインスタンスに接続するには、そのインスタンスにパブリック IPv4 または IPv6 アドレスが必要です。

   1. **[ファイアウォール (セキュリティグループ)]** で、**[既存のセキュリティグループを選択する]** を選択してください。

   1. **[共通セキュリティグループ]** で、先ほど作成したセキュリティグループを選択してください。

1. **[Summary]** (サマリー) パネルで、**[Launch instance]** (インスタンスの起動) を選択してください。

### アニメーションを表示: インスタンスを起動する
<a name="eic-tut1-task3-animation"></a>

![\[このアニメーションでは、インスタンスを起動する方法を示します。このアニメーションのテキストバージョンについては、前述の手順のステップを参照してください。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/tut1-task3-launch-an-instance.gif)


## タスク 4: インスタンスに接続する
<a name="eic-tut1-task4"></a>

EC2 Instance Connect を使用してインスタンスに接続すると、EC2 Instance Connect API から SSH パブリックキーが[インスタンスメタデータ](ec2-instance-metadata.md)にプッシュされ、60 秒間保持されます。SSH デーモンは、`AuthorizedKeysCommand` および `AuthorizedKeysCommandUser` を使用して、インスタンスメタデータからパブリックキーを見つけて認証を行い、ユーザーをインスタンスに接続します。

**タスクの目標**

このタスクでは、Amazon EC2 コンソールで EC2 Instance Connect を使用してインスタンスに接続します。前提条件となるタスク 1、2、3 を完了していれば、接続は成功するはずです。

**インスタンスに接続する手順**

インスタンスに接続するには、次の手順に従ってください。手順のアニメーションを見る場合は、「[アニメーションを表示: インスタンスに接続する](#eic-tut1-task4-animation)」を参照してください。

**Amazon EC2 コンソールで EC2 Instance Connect を使用してインスタンスを起動するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 画面の上のナビゲーションバーに、現在の AWS リージョンが表示されます (**アイルランド**など)。インスタンスが存在するリージョンを選択してください。

1. ナビゲーションペインで、[**インスタンス**] を選択してください。

1. インスタンスを選択し、**[接続]** を選択してください。

1. **[EC2 Instance Connect]** タブを選択してください。

1. **[パブリック IP を使用して接続]** を選択します。

1. **[接続]**を選択してください。

   ブラウザでターミナルウィンドウが開き、インスタンスに接続されます。

### アニメーションを表示: インスタンスに接続する
<a name="eic-tut1-task4-animation"></a>

![\[このアニメーションでは、EC2 Instance Connect を使用してインスタンスに接続する方法を説明します。このアニメーションのテキストバージョンについては、前述の手順のステップを参照してください。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/eic-tut1-task4-connect.gif)


# EC2 Instance Connect の前提条件
<a name="ec2-instance-connect-prerequisites"></a>

**Topics**
+ [EC2 Instance Connect のインストール](#eic-prereqs-install-eic-on-instance)
+ [ネットワーク接続を確立する](#eic-prereqs-network-access)
+ [インバウンド SSH トラフィックを許可する](#ec2-instance-connect-setup-security-group)
+ [許可を付与する](#eic-prereqs-grant-permissions)
+ [使用するローカルコンピュータに SSH クライアントをインストールする](#eic-prereqs-install-ssh-client)
+ [ユーザー名の要件を満たす](#eic-prereqs-username)

## EC2 Instance Connect のインストール
<a name="eic-prereqs-install-eic-on-instance"></a>

EC2 Instance Connect を使用してインスタンスに接続するには、インスタンスに EC2 Instance Connect がインストールされている必要があります。EC2 Instance Connect にプリインストールされている AMI を使用してインスタンスを起動することも、サポートされている AMI で起動されたインスタンスに EC2 Instance Connect をインストールすることもできます。詳細については、「[EC2 インスタンスでの EC2 Instance Connect のインストール](ec2-instance-connect-set-up.md)」を参照してください。

## ネットワーク接続を確立する
<a name="eic-prereqs-network-access"></a>

インスタンスは、ユーザーがインターネットまたはインスタンスのプライベート IP アドレスを介してインスタンスに接続できるように設定できます。ユーザーが EC2 Instance Connect を使用してインスタンスに接続する方法によって、次のネットワークアクセスを設定する必要があります。
+ ユーザーがインターネット経由でインスタンスに接続する場合、インスタンスはパブリック IPv4または IPv6 アドレスを持ち、インターネットへのルートが設定されたパブリックサブネット内に配置されている必要があります。デフォルトのパブリックサブネットを変更していない場合、IPv4専用のインターネットへのルートが含まれており、IPv6用のルートは含まれていません。詳細については、「*Amazon VPC ユーザーガイド*」の「[インターネットゲートウェイを使用して VPC インターネットアクセスを有効にする](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html#vpc-igw-internet-access)」を参照してください。
+ ユーザーがインスタンスのプライベート IP アドレスを介してインスタンスに接続する場合は、AWS Direct Connect、AWS Site-to-Site VPN、または VPC ピアリングを使用して VPC へのプライベートネットワーク接続を確立し、ユーザーがインスタンスのプライベート IPv4 アドレスに到達できるようにする必要があります。

インスタンスにパブリック IPv4 または IPv6 アドレスがなく、上記のようにネットワークアクセスを設定しない場合は、EC2 Instance Connect エンドポイントを EC2 Instance Connect の代わりとして検討できます。EC2 Instance Connect エンドポイントを使用すると、インスタンスにパブリック IPv4 または IPv6 アドレスがない場合でも、SSH または RDP を使用してインスタンスに接続できます。詳細については、「[Amazon EC2 コンソールを使用した Linux インスタンスへの接続](connect-using-eice.md#connect-using-the-ec2-console)」を参照してください。

## インバウンド SSH トラフィックを許可する
<a name="ec2-instance-connect-setup-security-group"></a>

**Amazon EC2 コンソールを使用してインスタンスに接続するには**  
ユーザーが Amazon EC2 コンソールでインスタンスに接続する場合、インスタンスに到達できるようにする必要があるトラフィックは、EC2 Instance Connect サービスからのトラフィックです。サービスは、プレフィックスリストを通じて AWS を管理する特定の IP アドレス範囲によって識別されます。EC2 Instance Connect サービスからインバウンド SSH トラフィックを許可するセキュリティグループを作成する必要があります。これを設定するには、インバウンドルールの **[ソース]** の横にあるフィールドで、EC2 Instance Connect プレフィックスリストを選択してください。

AWS は、各リージョンの IPv4 アドレスと IPv6 アドレスの異なる管理されたプレフィックスリストを提供します。EC2 Instance Connect プレフィックスリストの名前は次のとおりです。*リージョン* はリージョンコードに置き換えられます。
+ IPv4 プレフィックスリスト名: `com.amazonaws.region.ec2-instance-connect`
+ IPv6 プレフィックスリスト名: `com.amazonaws.region.ipv6.ec2-instance-connect`

セキュリティグループの作成方法については、「[タスク 2: EC2 Instance Connect サービスからインスタンスへのインバウンドトラフィックを許可する](ec2-instance-connect-tutorial.md#eic-tut1-task2)」を参照してください。詳細については、「*Amazon VPC ユーザーガイド*」の「[AWS 管理されたプレフィックスリストの提供](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-aws-managed-prefix-lists.html#available-aws-managed-prefix-lists)」を参照してください。

**CLI または SSH を使用してインスタンスに接続するには**  
インスタンスに関連付けられているセキュリティグループで、IP アドレスまたはネットワークからの[インバウンド SSH トラフィック](security-group-rules-reference.md#sg-rules-local-access)がポート 22 で許可されることを確認します。VPC のデフォルトのセキュリティグループでは、着信 SSH トラフィックはデフォルトでは許可されません。インスタンス起動ウィザードで作成されたセキュリティグループは、デフォルトで受信 SSH トラフィックを許可します。詳細については、「[コンピュータからのインスタンスへの接続ルール](security-group-rules-reference.md#sg-rules-local-access)」を参照してください。

## 許可を付与する
<a name="eic-prereqs-grant-permissions"></a>

EC2 Instance Connect を使用してインスタンスに接続するすべての IAM ユーザーに、必要なアクセス許可を付与する必要があります。詳細については、「[IAM への EC2 Instance Connect のアクセス許可の付与](ec2-instance-connect-configure-IAM-role.md)」を参照してください。

## 使用するローカルコンピュータに SSH クライアントをインストールする
<a name="eic-prereqs-install-ssh-client"></a>

ユーザーが SSH を使用して接続する場合、ローカルコンピュータに SSH クライアントがあることを確認する必要があります。

ほとんどの場合、ユーザーのローカルコンピュータにはデフォルトで SSH クライアントがインストールされています。SSH クライアントがあるかどうかを確認するには、コマンドラインで **ssh** と入力してください。使用するローカルコンピュータでこのコマンドが認識されない場合、SSH クライアントをインストールできます。Linux または macOS X に SSH クライアントをインストールする詳細については、[http://www.openssh.com](http://www.openssh.com/)を参照してください。Windows 10 に SSH クライアントをインストールする詳細については、[Windows の OpenSSH](https://learn.microsoft.com/en-us/windows-server/administration/OpenSSH/openssh-overview)を参照してください。

ユーザーが Amazon EC2 コンソールのみを使用してインスタンスに接続する場合、ローカルコンピュータに SSH クライアントをインストールする必要はありません。

## ユーザー名の要件を満たす
<a name="eic-prereqs-username"></a>

EC2 Instance Connect を使用してインスタンスに接続する場合、ユーザー名は次の要件を満たす必要があります。
+ 1 字目: アルファベット (`A-Z`、`a-z`)、数字 (`0-9`)、下線 `_`のいずれか。
+ 後続には、アルファベット (`A-Z`、`a-z`)、数字 (`0-9`)、または以下の文字を使用できます: `@ . _ -`
+ 最小長: 1 文字
+ 最大長: 31 文字

# IAM への EC2 Instance Connect のアクセス許可の付与
<a name="ec2-instance-connect-configure-IAM-role"></a>

EC2 Instance Connect を使用してインスタンスに接続するには、以下のアクションと条件に対するアクセス許可をユーザーに付与する IAM ポリシーを作成する必要があります。
+ `ec2-instance-connect:SendSSHPublicKey` アクション – パブリックキーをインスタンスにプッシュするためのアクセス許可を付与します。
+ `ec2:osuser` 条件 – パブリックキーをインスタンスにプッシュできる OS ユーザーの名前を指定します。インスタンスの起動に使用した AMI のデフォルトのユーザー名を使用します。デフォルトのユーザー名は AL2023 と Amazon Linux 2 では `ec2-user`、Ubuntu では `ubuntu` です。
+ `ec2:DescribeInstances` アクション — ラッパーがこのアクションを呼び出すため、EC2 コンソールを使用するときに必要です。ユーザーには、別のポリシーからこのアクションを呼び出すためのアクセス許可が既に付与されている場合があります。
+ `ec2:DescribeVpcs` アクション – IPv6 アドレスに接続するときに必要です。

特定の EC2 インスタンスへのアクセスを制限することを検討してください。それ以外の場合、`ec2-instance-connect:SendSSHPublicKey` アクションのアクセス許可を持つすべての IAM プリンシパルは、すべての EC2 インスタンスに接続できます。リソース ARN を指定するか、リソースタグを[条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2instanceconnect.html#amazonec2instanceconnect-policy-keys)として使用して、アクセスを制限することができます。

詳細については、[Amazon EC2 Instance Connect のアクション、リソース、および条件キー ](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2instanceconnect.html)を参照してください。

IAM ポリシーの作成について詳しくは、「*IAM ユーザーガイド*」の「[IAM ポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)」を参照してください。

## ユーザーに特定のインスタンスへの接続を許可
<a name="eic-permissions-allow-users-to-connect-to-specific-instances"></a>

次の IAM ポリシーは、リソース ARN で識別される特定のインスタンスに接続するアクセス許可を付与します。

次の IAM ポリシーの例では、以下のアクションと条件が指定されています。
+ `ec2-instance-connect:SendSSHPublicKey` アクションは、リソース ARN で指定された 2 つのインスタンスに接続するためのアクセス許可をユーザーに付与します。*すべての* EC2 インスタンスに接続するためのアクセス許可をユーザーに付与するには、リソース ARN を `*` (ワイルドカード) に置き換えます。
+ `ec2:osuser` 条件により、接続時に *ami-username* が指定されている場合にのみ、インスタンスに接続するためのアクセス許可が付与されます。
+ `ec2:DescribeInstances` アクションは、コンソールを使用してインスタンスに接続するユーザーにアクセス許可を付与するように指定されます。ユーザーが SSH クライアントのみを使用してインスタンスに接続する場合は、`ec2:DescribeInstances` を省略できます。`ec2:Describe*` API アクションはリソースレベルのアクセス許可をサポートしないことに注意してください。したがって、`Resource` の要素には、`*` (ワイルドカード) が必要です。
+ `ec2:DescribeVpcs` アクションは、IPv6 アドレスでインスタンスに接続するために、コンソールを使用してユーザーにアクセス許可を付与するように指定されます。ユーザーがパブリック IPv4 アドレスのみを使用する場合は、`ec2:DescribeVpcs` を省略できます。`ec2:Describe*` API アクションはリソースレベルのアクセス許可をサポートしないことに注意してください。したがって、`Resource` の要素には、`*` (ワイルドカード) が必要です。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": "ec2-instance-connect:SendSSHPublicKey",
            "Resource": [
                "arn:aws:ec2:us-east-1:111122223333:instance/i-1234567890abcdef0",
                "arn:aws:ec2:us-east-1:111122223333:instance/i-0598c7d356eba48d7"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:osuser": "ami-username"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeVpcs"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## ユーザーに特定のタグを持つインスタンスへの接続を許可
<a name="eic-permissions-allow-users-to-connect-to-instances-with-specific-tags"></a>

属性ベースのアクセス制御 (ABAC) は、ユーザーおよび AWS リソースにアタッチできるタグに基づいてアクセス許可を定義する認可戦略です。リソースタグを使用してインスタンスへのアクセスを制御することもできます。AWS リソースへのアクセスを制御するタグの使用の詳細については、「*IAM ユーザーガイド*」の「[AWS リソースへのアクセス制御](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-resources)」を参照してください。

次の IAM ポリシーの例では、`ec2-instance-connect:SendSSHPublicKey` アクションは、インスタンスに key=`tag-key` と value=`tag-value` が付いたリソースタグが割り当てられていることを条件に、(リソース ARN の `*` (ワイルドカード) で示される) 任意のインスタンスに接続するためのアクセス許可をユーザーに付与します。

`ec2:DescribeInstances` アクションは、コンソールを使用してインスタンスに接続するユーザーにアクセス許可を付与するように指定されます。ユーザーが SSH クライアントのみを使用してインスタンスに接続する場合は、`ec2:DescribeInstances` を省略できます。`ec2:Describe*` API アクションはリソースレベルのアクセス許可をサポートしないことに注意してください。したがって、`Resource` の要素には、`*` (ワイルドカード) が必要です。

`ec2:DescribeVpcs` アクションは、IPv6 アドレスでインスタンスに接続するために、コンソールを使用してユーザーにアクセス許可を付与するように指定されます。ユーザーがパブリック IPv4 アドレスのみを使用する場合は、`ec2:DescribeVpcs` を省略できます。`ec2:Describe*` API アクションはリソースレベルのアクセス許可をサポートしないことに注意してください。したがって、`Resource` の要素には、`*` (ワイルドカード) が必要です。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": "ec2-instance-connect:SendSSHPublicKey", 
            "Resource": "arn:aws:ec2:us-east-1:111122223333:instance/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/tag-key": "tag-value"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeVpcs"
            ],
            "Resource": "*"
        }
    ]
}
```

------

# EC2 インスタンスでの EC2 Instance Connect のインストール
<a name="ec2-instance-connect-set-up"></a>

EC2 Instance Connect を使用して Linux インスタンスに接続するには、EC2 Instance Connect がインストールされている必要があります。EC2 Instance Connect をインストールすると、インスタンスに SSH デーモンが設定されます。

EC2 Instance Connect パッケージの詳細については、GitHub ウェブサイトの「[aws/aws-ec2-instance-connect-config](https://github.com/aws/aws-ec2-instance-connect-config)」を参照してください。

**注記**  
SSH 認証の `AuthorizedKeysCommand` および `AuthorizedKeysCommandUser` 設定を構成した場合、EC2 Instance Connect をインストールしても更新されません。そのため、EC2 Instance Connect は使用できません。

## インストール条件
<a name="ec2-instance-connect-install-prerequisites"></a>

EC2 Instance Connect をインストールする前に、以下の前提条件を満たしていることを確認してください。
+ **インスタンスが以下のいずれかを使用していることを確認します。**
  + バージョン 2.0.20190618 より前の Amazon Linux 2 \$1
  + AL2023 最小 AMI または Amazon ECS 最適化 AMI
  + CentOS Stream 8 および 9
  + 14.2.1 より前の MacOS Sonoma、13.6.3 より前の Ventura、12.7.2 より前の Monterey \$1
  + Red Hat Enterprise Linux (RHEL) 8 および 9
  + Ubuntu 16.04 および 18.04
**ヒント**  
\$1 Amazon Linux 2、MacOS、Ubuntu の場合: 上記のバージョンよりも新しいバージョンを使用してインスタンスを起動した場合、EC2 Instance Connect はプリインストールされており、手動インストールは不要です。
+ **EC2 Instance Connect の一般的な前提条件を確認します。**

  詳細については、「[EC2 Instance Connect の前提条件](ec2-instance-connect-prerequisites.md)」を参照してください。
+ **ローカルマシン上の SSH クライアントを使用してインスタンスに接続するための前提条件を確認します。**

  詳細については、「[SSH を使用した Linux インスタンスへの接続](connect-to-linux-instance.md)」を参照してください。
+ **インスタンスの ID を取得します。**

  自分のインスタンスの ID は、Amazon EC2 コンソールを使用して ([**インスタンス ID**] 列から) 取得できます。その代わりに、[describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) AWS CLIまたは [Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) AWS Tools for Windows PowerShellコマンドを使用することもできます。

## EC2 Instance Connect を手動でインストールする
<a name="ec2-instance-connect-install"></a>

**注記**  
以下のいずれかの AMI を使用してインスタンスを起動した場合は、EC2 Instance Connect がプリインストールされているため、このステップをスキップできます。  
AL2023 標準 AMI
Amazon Linux 2 2.0.20190618 以降
macOS Sonoma 14.2.1 以降
macOS Ventura 13.6.3 以降
macOS Monterey 12.7.2 以降
Ubuntu 20.04 以降

インスタンスのオペレーティングシステムに応じて、以下のいずれかの手順を使用して EC2 Instance Connect をインストールします。

------
#### [ Amazon Linux 2 ]

**EC2 Instance Connect を Amazon Linux 2 で起動したインスタンスにインストールするには**

1. SSH を使用してインスタンスに接続します。

   次のコマンド内のサンプル値を独自の値に置き換えます。インスタンスの起動時にインスタンスに割り当てた SSH キーペアと、インスタンスを起動するために使用した AMI のデフォルトのユーザー名を使用します。Amazon Linux 2 の場合、デフォルトのユーザー名は `ec2-user` です。

   ```
   $ ssh -i my_ec2_private_key.pem ec2-user@ec2-a-b-c-d.us-west-2.compute.amazonaws.com
   ```

   インスタンスへの接続の詳細については[SSH クライアントを使用して Linux インスタンスに接続する](connect-linux-inst-ssh.md)を参照してください。

1. インスタンスに EC2 Instance Connect パッケージをインストールします。

   ```
   [ec2-user ~]$ sudo yum install ec2-instance-connect
   ```

   3 つの新しいスクリプトが `/opt/aws/bin/` フォルダに表示されます。

   ```
   eic_curl_authorized_keys
   eic_parse_authorized_keys
   eic_run_authorized_keys
   ```

1. (オプション) EC2 Instance Connect がインスタンスに正常にインストールされたことを確認します。

   ```
   [ec2-user ~]$ sudo less /etc/ssh/sshd_config
   ```

   `AuthorizedKeysCommand` 行と `AuthorizedKeysCommandUser` 行に以下の値が含まれていれば、EC2 Instance Connect は正常にインストールされています。

   ```
   AuthorizedKeysCommand /opt/aws/bin/eic_run_authorized_keys %u %f
   AuthorizedKeysCommandUser ec2-instance-connect
   ```
   + `AuthorizedKeysCommand` は、インスタンスメタデータからキーを探すように `eic_run_authorized_keys` スクリプトを設定します。
   + `AuthorizedKeysCommandUser` は、システムユーザーを `ec2-instance-connect` として設定します。
**注記**  
`AuthorizedKeysCommand` や `AuthorizedKeysCommandUser` を設定済みである場合は、EC2 Instance Connect をインストールしても値は変更されないため、EC2 Instance Connect は使用できません。

------
#### [ CentOS ]

**EC2 Instance Connect を CentOS で起動したインスタンスにインストールするには**

1. SSH を使用してインスタンスに接続します。

   次のコマンド内のサンプル値を独自の値に置き換えます。インスタンスの起動時にインスタンスに割り当てた SSH キーペアと、インスタンスを起動するために使用した AMI のデフォルトのユーザー名を使用します。CentOS の場合、デフォルトのユーザー名は `centos` または `ec2-user` です。

   ```
   $ ssh -i my_ec2_private_key.pem centos@ec2-a-b-c-d.us-west-2.compute.amazonaws.com
   ```

   インスタンスへの接続の詳細については[SSH クライアントを使用して Linux インスタンスに接続する](connect-linux-inst-ssh.md)を参照してください。

1. HTTP または HTTPS プロキシを使用する場合は、現在のシェルセッションで `http_proxy` または `https_proxy` の環境変数を設定する必要があります。

   プロキシを使用していない場合は、この手順を省略できます。
   + HTTP プロキシサーバーの場合は、次のコマンドを実行します。

     ```
     $ export http_proxy=http://hostname:port
     $ export https_proxy=http://hostname:port
     ```
   + HTTPS プロキシサーバーの場合は、次のコマンドを実行します。

     ```
     $ export http_proxy=https://hostname:port
     $ export https_proxy=https://hostname:port
     ```

1. 次のコマンドを実行して、インスタンスに EC2 Instance Connect パッケージをインストールします。

   CentOS 用の EC2 Instance Connect 設定ファイルは Red Hat Package Manager (RPM) パッケージで提供され、CentOS 8 と CentOS 9 用の異なる RPM パッケージ、および Intel/AMD (x86\$164) または ARM (AArch64) で実行されるインスタンスタイプ用の異なる RPM パッケージが含まれています。

   オペレーティングシステムと CPU アーキテクチャに合ったコマンドブロックを使用してください。
   + CentOS 8

     Intel/AMD (x86\$164)

     ```
     [ec2-user ~]$ mkdir /tmp/ec2-instance-connect
     [ec2-user ~]$ curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_amd64/ec2-instance-connect-2.0.0-5.rhel8.x86_64.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect.rpm
     [ec2-user ~]$ curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_amd64/ec2-instance-connect-selinux-2.0.0-5.noarch.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
     [ec2-user ~]$ sudo yum install -y /tmp/ec2-instance-connect/ec2-instance-connect.rpm /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
     ```

     ARM (AArch64)

     ```
     [ec2-user ~]$ mkdir /tmp/ec2-instance-connect
     [ec2-user ~]$ curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_arm64/ec2-instance-connect-2.0.0-5.rhel8.aarch64.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect.rpm
     [ec2-user ~]$ curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_arm64/ec2-instance-connect-selinux-2.0.0-5.noarch.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
     [ec2-user ~]$ sudo yum install -y /tmp/ec2-instance-connect/ec2-instance-connect.rpm /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
     ```
   + CentOS 9

     Intel/AMD (x86\$164)

     ```
     [ec2-user ~]$ mkdir /tmp/ec2-instance-connect
     [ec2-user ~]$ curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_amd64/ec2-instance-connect-2.0.0-5.rhel9.x86_64.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect.rpm
     [ec2-user ~]$ curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_amd64/ec2-instance-connect-selinux-2.0.0-5.noarch.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
     [ec2-user ~]$ sudo yum install -y /tmp/ec2-instance-connect/ec2-instance-connect.rpm /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
     ```

     ARM (AArch64)

     ```
     [ec2-user ~]$ mkdir /tmp/ec2-instance-connect
     [ec2-user ~]$ curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_arm64/ec2-instance-connect-2.0.0-5.rhel9.aarch64.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect.rpm
     [ec2-user ~]$ curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_arm64/ec2-instance-connect-selinux-2.0.0-5.noarch.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
     [ec2-user ~]$ sudo yum install -y /tmp/ec2-instance-connect/ec2-instance-connect.rpm /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
     ```

   次の新しいスクリプトが `/opt/aws/bin/` フォルダに表示されます。

   ```
   eic_run_authorized_keys
   ```

1. (オプション) EC2 Instance Connect がインスタンスに正常にインストールされたことを確認します。
   + CentOS 8 の場合:

     ```
     [ec2-user ~]$ sudo less /lib/systemd/system/sshd.service.d/ec2-instance-connect.conf
     ```
   + CentOS 9 の場合:

     ```
     [ec2-user ~]$ sudo less /etc/ssh/sshd_config.d/60-ec2-instance-connect.conf
     ```

   `AuthorizedKeysCommand` 行と `AuthorizedKeysCommandUser` 行に以下の値が含まれていれば、EC2 Instance Connect は正常にインストールされています。

   ```
   AuthorizedKeysCommand /opt/aws/bin/eic_run_authorized_keys %u %f
   AuthorizedKeysCommandUser ec2-instance-connect
   ```
   + `AuthorizedKeysCommand` は、インスタンスメタデータからキーを探すように `eic_run_authorized_keys` スクリプトを設定します。
   + `AuthorizedKeysCommandUser` は、システムユーザーを `ec2-instance-connect` として設定します。
**注記**  
`AuthorizedKeysCommand` や `AuthorizedKeysCommandUser` を設定済みである場合は、EC2 Instance Connect をインストールしても値は変更されないため、EC2 Instance Connect は使用できません。

------
#### [ macOS ]

**EC2 Instance Connect を macOS で起動したインスタンスにインストールするには**

1. SSH を使用してインスタンスに接続します。

   次のコマンド内のサンプル値を独自の値に置き換えます。インスタンスの起動時にインスタンスに割り当てた SSH キーペアと、インスタンスを起動するために使用した AMI のデフォルトのユーザー名を使用します。macOS インスタンスの場合、デフォルトのユーザー名は `ec2-user` です。

   ```
   $ ssh -i my_ec2_private_key.pem ec2-user@ec2-a-b-c-d.us-west-2.compute.amazonaws.com
   ```

   インスタンスへの接続の詳細については[SSH クライアントを使用して Linux インスタンスに接続する](connect-linux-inst-ssh.md)を参照してください。

1. 次のコマンドを使用して Homwbrew を更新します。このアップデートでは、Homebrew が認識しているソフトウェアが一覧表示されます。EC2 Instance Connect パッケージは、macOS インスタンスでは Homebrew 経由で提供されます。詳細については、「[Amazon EC2 Mac インスタンス上のオペレーティングシステムとソフトウェアの更新](mac-instance-updates.md)」を参照してください。

   ```
   [ec2-user ~]$ brew update
   ```

1. インスタンスに EC2 Instance Connect パッケージをインストールします。これによりソフトウェアがインストールされ、sshd がそれを使用するように設定されます。

   ```
   [ec2-user ~]$ brew install ec2-instance-connect
   ```

   次の新しいスクリプトが `/opt/aws/bin/` フォルダに表示されます。

   ```
   eic_run_authorized_keys
   ```

1. (オプション) EC2 Instance Connect がインスタンスに正常にインストールされたことを確認します。

   ```
   [ec2-user ~]$ sudo less /etc/ssh/sshd_config.d/60-ec2-instance-connect.conf
   ```

   `AuthorizedKeysCommand` 行と `AuthorizedKeysCommandUser` 行に以下の値が含まれていれば、EC2 Instance Connect は正常にインストールされています。

   ```
   AuthorizedKeysCommand /opt/aws/bin/eic_run_authorized_keys %u %f
   AuthorizedKeysCommandUser ec2-instance-connect
   ```
   + `AuthorizedKeysCommand` は、インスタンスメタデータからキーを探すように `eic_run_authorized_keys` スクリプトを設定します。
   + `AuthorizedKeysCommandUser` は、システムユーザーを `ec2-instance-connect` として設定します。
**注記**  
`AuthorizedKeysCommand` や `AuthorizedKeysCommandUser` を設定済みである場合は、EC2 Instance Connect をインストールしても値は変更されないため、EC2 Instance Connect は使用できません。

------
#### [ RHEL ]

**EC2 Instance Connect を Red Hat Enterprise Linux (RHEL) で起動したインスタンスにインストールするには**

1. SSH を使用してインスタンスに接続します。

   次のコマンド内のサンプル値を独自の値に置き換えます。インスタンスの起動時にインスタンスに割り当てた SSH キーペアと、インスタンスを起動するために使用した AMI のデフォルトのユーザー名を使用します。RHEL の場合、デフォルトのユーザー名は `ec2-user` または `root` です。

   ```
   $ ssh -i my_ec2_private_key.pem ec2-user@ec2-a-b-c-d.us-west-2.compute.amazonaws.com
   ```

   インスタンスへの接続の詳細については[SSH クライアントを使用して Linux インスタンスに接続する](connect-linux-inst-ssh.md)を参照してください。

1. HTTP または HTTPS プロキシを使用する場合は、現在のシェルセッションで `http_proxy` または `https_proxy` の環境変数を設定する必要があります。

   プロキシを使用していない場合は、この手順を省略できます。
   + HTTP プロキシサーバーの場合は、次のコマンドを実行します。

     ```
     $ export http_proxy=http://hostname:port
     $ export https_proxy=http://hostname:port
     ```
   + HTTPS プロキシサーバーの場合は、次のコマンドを実行します。

     ```
     $ export http_proxy=https://hostname:port
     $ export https_proxy=https://hostname:port
     ```

1. 次のコマンドを実行して、インスタンスに EC2 Instance Connect パッケージをインストールします。

   RHEL 用の EC2 Instance Connect 設定ファイルは Red Hat Package Manager (RPM) パッケージで提供され、RHEL 8 と RHEL 9 用の異なる RPM パッケージ、および Intel/AMD (x86\$164) または ARM (AArch64) で実行されるインスタンスタイプ用の異なる RPM パッケージが含まれています。

   オペレーティングシステムと CPU アーキテクチャに合ったコマンドブロックを使用してください。
   + RHEL 8

     Intel/AMD (x86\$164)

     ```
     [ec2-user ~]$ mkdir /tmp/ec2-instance-connect
     [ec2-user ~]$ curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_amd64/ec2-instance-connect-2.0.0-5.rhel8.x86_64.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect.rpm
     [ec2-user ~]$ curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_amd64/ec2-instance-connect-selinux-2.0.0-5.noarch.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
     [ec2-user ~]$ sudo yum install -y /tmp/ec2-instance-connect/ec2-instance-connect.rpm /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
     ```

     ARM (AArch64)

     ```
     [ec2-user ~]$ mkdir /tmp/ec2-instance-connect
     [ec2-user ~]$ curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_arm64/ec2-instance-connect-2.0.0-5.rhel8.aarch64.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect.rpm
     [ec2-user ~]$ curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_arm64/ec2-instance-connect-selinux-2.0.0-5.noarch.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
     [ec2-user ~]$ sudo yum install -y /tmp/ec2-instance-connect/ec2-instance-connect.rpm /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
     ```
   + RHEL 9

     Intel/AMD (x86\$164)

     ```
     [ec2-user ~]$ mkdir /tmp/ec2-instance-connect
     [ec2-user ~]$ curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_amd64/ec2-instance-connect-2.0.0-5.rhel9.x86_64.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect.rpm
     [ec2-user ~]$ curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_amd64/ec2-instance-connect-selinux-2.0.0-5.noarch.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
     [ec2-user ~]$ sudo yum install -y /tmp/ec2-instance-connect/ec2-instance-connect.rpm /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
     ```

     ARM (AArch64)

     ```
     [ec2-user ~]$ mkdir /tmp/ec2-instance-connect
     [ec2-user ~]$ curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_arm64/ec2-instance-connect-2.0.0-5.rhel9.aarch64.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect.rpm
     [ec2-user ~]$ curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_arm64/ec2-instance-connect-selinux-2.0.0-5.noarch.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
     [ec2-user ~]$ sudo yum install -y /tmp/ec2-instance-connect/ec2-instance-connect.rpm /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
     ```

   次の新しいスクリプトが `/opt/aws/bin/` フォルダに表示されます。

   ```
   eic_run_authorized_keys
   ```

1. (オプション) EC2 Instance Connect がインスタンスに正常にインストールされたことを確認します。
   + RHEL 8 の場合:

     ```
     [ec2-user ~]$ sudo less /lib/systemd/system/sshd.service.d/ec2-instance-connect.conf
     ```
   + RHEL 9 の場合:

     ```
     [ec2-user ~]$ sudo less /etc/ssh/sshd_config.d/60-ec2-instance-connect.conf
     ```

   `AuthorizedKeysCommand` 行と `AuthorizedKeysCommandUser` 行に以下の値が含まれていれば、EC2 Instance Connect は正常にインストールされています。

   ```
   AuthorizedKeysCommand /opt/aws/bin/eic_run_authorized_keys %u %f
   AuthorizedKeysCommandUser ec2-instance-connect
   ```
   + `AuthorizedKeysCommand` は、インスタンスメタデータからキーを探すように `eic_run_authorized_keys` スクリプトを設定します。
   + `AuthorizedKeysCommandUser` は、システムユーザーを `ec2-instance-connect` として設定します。
**注記**  
`AuthorizedKeysCommand` や `AuthorizedKeysCommandUser` を設定済みである場合は、EC2 Instance Connect をインストールしても値は変更されないため、EC2 Instance Connect は使用できません。

------
#### [ Ubuntu ]

**EC2 Instance Connect を Ubuntu 16.04 で起動したインスタンスにインストールするには**

1. SSH を使用してインスタンスに接続します。

   次のコマンド内のサンプル値を独自の値に置き換えます。インスタンスの起動時にインスタンスに割り当てた SSH キーペアを使用し、インスタンスを起動するために使用した AMI のデフォルトのユーザー名を使用します。Ubuntu AMI の場合、ユーザー名は `ubuntu` です。

   ```
   $ ssh -i my_ec2_private_key.pem ubuntu@ec2-a-b-c-d.us-west-2.compute.amazonaws.com
   ```

   インスタンスへの接続の詳細については[SSH クライアントを使用して Linux インスタンスに接続する](connect-linux-inst-ssh.md)を参照してください。

1. (オプション) インスタンスに最新の Ubuntu AMI があることを確認します。

   次のコマンドを実行して、インスタンスのすべてのパッケージを更新します。

   ```
   ubuntu:~$ sudo apt-get update
   ```

   ```
   ubuntu:~$ sudo apt-get upgrade
   ```

1. インスタンスに EC2 Instance Connect パッケージをインストールします。

   ```
   ubuntu:~$ sudo apt-get install ec2-instance-connect
   ```

   3 つの新しいスクリプトが `/usr/share/ec2-instance-connect/` フォルダに表示されます。

   ```
   eic_curl_authorized_keys
   eic_parse_authorized_keys
   eic_run_authorized_keys
   ```

1. (オプション) EC2 Instance Connect がインスタンスに正常にインストールされたことを確認します。

   ```
   ubuntu:~$ sudo less /lib/systemd/system/ssh.service.d/ec2-instance-connect.conf
   ```

   `AuthorizedKeysCommand` 行と `AuthorizedKeysCommandUser` 行に以下の値が含まれていれば、EC2 Instance Connect は正常にインストールされています。

   ```
   AuthorizedKeysCommand /usr/share/ec2-instance-connect/eic_run_authorized_keys %%u %%f
   AuthorizedKeysCommandUser ec2-instance-connect
   ```
   + `AuthorizedKeysCommand` は、インスタンスメタデータからキーを探すように `eic_run_authorized_keys` スクリプトを設定します。
   + `AuthorizedKeysCommandUser` は、システムユーザーを `ec2-instance-connect` として設定します。
**注記**  
`AuthorizedKeysCommand` や `AuthorizedKeysCommandUser` を設定済みである場合は、EC2 Instance Connect をインストールしても値は変更されないため、EC2 Instance Connect は使用できません。

------

# EC2 Instance Connect を使用して Linux インスタンスに接続する
<a name="ec2-instance-connect-methods"></a>

以下の手順では、Amazon EC2 コンソール、AWS CLI、または SSH クライアントから EC2 Instance Connect を使用して Linux インスタンスに接続する方法について説明します。

EC2 Instance Connect を使用してインスタンスに接続するとAWS CLI、EC2 Instance Connect API [ から SSH パブリック](ec2-instance-metadata.md)キーがインスタンスメタデータにプッシュされ、60 秒間保持されます。ユーザーにアタッチされた IAM ポリシーは、このアクションを承認します。独自の SSH キーを使用する場合は、SSH クライアントを使用し、EC2 Instance Connect を使用して SSH キーをインスタンスに明示的にプッシュできます。

**考慮事項**  
EC2 Instance Connect を使用してインスタンスに接続した後、接続は SSH セッションが終了するまで維持されます。接続の期間は、IAM 認証情報の期間によって決定されません。IAM 認証情報の有効期限が切れても、接続は維持されます。EC2 Instance Connect コンソールエクスペリエンスを使用しているときに IAM 認証情報の有効期限が切れた場合は、ブラウザページを閉じて接続を終了します。独自の SSH クライアントと EC2 Instance Connect を使用してキーをプッシュする場合は、SSH タイムアウト値を設定して SSH セッションを自動的に終了できます。

**要件**  
始める前に、[前提条件](ec2-instance-connect-prerequisites.md)を確認してください。

**Topics**
+ [Amazon EC2 コンソールを使用した接続](#ec2-instance-connect-connecting-console)
+ [AWS CLI を使用して接続する](#connect-linux-inst-eic-cli-ssh)
+ [独自のキーと SSH クライアントを使用して接続する](#ec2-instance-connect-connecting-aws-cli)
+ [トラブルシューティング](#ic-troubleshoot)

## Amazon EC2 コンソールを使用した接続
<a name="ec2-instance-connect-connecting-console"></a>

Amazon EC2 コンソールから EC2 Instance Connect を使用してインスタンスに接続できます。

**要件**  
Amazon EC2 コンソールを使用して接続するには、インスタンスにパブリック IPv4 または IPv6 アドレスが必要です。インスタンスにプライベート IPv4 アドレスのみが存在する場合は、[ec2-instance-connectAWS CLIコマンド](#connect-linux-inst-eic-cli-ssh) を使用して接続できます。

**Amazon EC2 コンソールを使用して Linux インスタンスに接続するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、[**インスタンス**] を選択してください。

1. インスタンスを選択し、[**接続**] を選択してください。

1. **[EC2 Instance Connect]** タブを選択してください。

1. **[パブリック IP を使用して接続]** を選択します。

1. 選択する場合は、接続する IP アドレスを選択してください。それ以外の場合は、IP アドレスが自動的に選択されます。

1. **[ユーザー名]** でユーザー名を確認します。

1. **コネクト** を選択して接続を確立します。ブラウザ内ターミナルウィンドウが開きます。

## AWS CLI を使用して接続する
<a name="connect-linux-inst-eic-cli-ssh"></a>

[ec2-instance-connect](https://docs.aws.amazon.com/cli/latest/reference/ec2-instance-connect/index.html) AWS CLI コマンドを使用すると、SSH クライアントを使用してインスタンスに接続できます。EC2 Instance Connect は、指定された接続タイプに基づいて、事前定義された順序で使用可能な IP アドレスを使用して接続を確立しようとします。IP アドレスが使用できない場合、次の IP アドレスを順番に自動的に試行します。接続タイプ

`auto` (デフォルト)  
EC2 は、次の順序でインスタンスの IP アドレスを使用し、対応する接続タイプを使用して接続を試みます。  

1. パブリック IPv4: `direct`

1. プライベート IPv4: `eice`

1. IPv6: `direct`

`direct`  
EC2 は、次の順序でインスタンスの IP アドレスを使用して接続を試みます。  

1. パブリック IPv4

1. IPv6

1. プライベート IPv4 (EC2 Instance Connect エンドポイント経由で接続しない）

`eice`  
EC2 Instance Connect は、インスタンスのプライベート IPv4 アドレスと [EC2 Instance Connect エンドポイント](connect-with-ec2-instance-connect-endpoint.md) を使用して接続を試みます。

**注記**  
将来的には、`auto` 接続タイプの動作を変更する可能性があります。希望する接続タイプが確実に使用されるようにするには、`--connection-type` を `direct` または `eice` のいずれかに明示的に設定することをお勧めします。

**要件**  
AWS CLI バージョン 2 を使用する必要があります。詳細については、「[AWS CLI の最新バージョンを使用してインストールまたは更新を行う](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」を参照してください。

**インスタンス ID を使用してインスタンスに接続するには**  
インスタンス ID のみがわかっていて、インスタンスへの接続時に使用する接続タイプを EC2 Instance Connect に決定させる場合、インスタンス ID に [ec2-instance-connect ssh](https://docs.aws.amazon.com/cli/latest/reference/ec2-instance-connect/ssh.html) の CLI コマンドを使用します。

```
aws ec2-instance-connect ssh --instance-id i-1234567890example
```

**インスタンス ID と EC2 Instance Connect エンドポイントを使用してインスタンスに接続するには**  
[EC2 Instance Connect エンドポイント](connect-with-ec2-instance-connect-endpoint.md) を介してインスタンスに接続する場合は、前述のコマンドを使用し、`--connection-type` パラメータと `eice` 値も指定します。

```
aws ec2-instance-connect ssh --instance-id i-1234567890example --connection-type eice
```

**インスタンス ID と独自のプライベートキーファイルを使用してインスタンスに接続するには**  
独自のプライベートキーを使用して EC2 Instance Connect エンドポイント経由でインスタンスに接続する場合は、インスタンス ID とプライベートキーファイルへのパスを指定します。パスに *file://*を含めないでください。次のようなパスは失敗します: *file:///path/to/key*。

```
aws ec2-instance-connect ssh --instance-id i-1234567890example --private-key-file /path/to/key.pem
```

**ヒント**  
このコマンドの使用時にエラーが発生した場合は、`ssh` パラメータがこのメジャーバージョンでのみ使用できるため、AWS CLI バージョン 2 を使用していることを確認してください。また、AWS CLI バージョン 2 の最新マイナーバージョンに定期的に更新して、最新の機能にアクセスすることをお勧めします。詳細については、「*AWS Command Line Interface ユーザーガイド*」の「[AWS CLI バージョン 2 について](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html#welcome-versions-v2)」を参照してください。

## 独自のキーと SSH クライアントを使用して接続する
<a name="ec2-instance-connect-connecting-aws-cli"></a>

EC2 Instance Connect API の使用中に、独自の SSH キーを使用して、選択した SSH クライアントからインスタンスに接続できます。これは、インスタンスにパブリックキーをプッシュする EC2 Instance Connect 機能からメリットを得ることを可能にします。この接続方法は、パブリック IP アドレスとプライベート IP アドレスを持つインスタンスに対して機能します。

**要件**
+ キーペアの要件
  + サポートされているタイプ: RSA (OpenSSH および SSH2) および ED25519
  + サポートされている長さ: 2048 および 4096
  + 詳細については、「[サードパーティー製のツールを使用してキーペアを作成し、Amazon EC2 にパブリックキーをインポートする](create-key-pairs.md#how-to-generate-your-own-key-and-import-it-to-aws)」を参照してください。
+ プライベート IP アドレスのみがあるインスタンスに接続する場合、SSH セッションを開始するローカルコンピュータには、EC2 Instance Connect サービスエンドポイントへの接続 (SSH パブリックキーをインスタンスにプッシュするため) と、SSH セッションを確立するためのインスタンスのプライベート IP アドレスへのネットワーク接続が必要です。EC2 Instance Connect のサービスエンドポイントには、インターネットまたは Direct Connect パブリック仮想インターフェイス経由で到達が可能です。インスタンスのプライベート IP アドレスに接続するには、[Direct Connect](https://aws.amazon.com/directconnect/)、[AWS Site-to-Site VPN](https://aws.amazon.com/vpn/) や [VPC ピアリング](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)などのサービスを利用できます。

**独自のキーと任意の SSH クライアントを使用してインスタンスに接続するには**

1. 

**(オプション) 新しい SSH プライベートキーとパブリックキーを生成する**

   新しい SSH プライベートキーとパブリックキー (`my_key` および `my_key.pub`) は、次のコマンドを使用して生成できます。

   ```
   ssh-keygen -t rsa -f my_key
   ```

1. 

**SSH パブリックキーをインスタンスにプッシュする**

   [https://docs.aws.amazon.com/cli/latest/reference/ec2-instance-connect/send-ssh-public-key.html](https://docs.aws.amazon.com/cli/latest/reference/ec2-instance-connect/send-ssh-public-key.html) コマンドを使用して、SSH パブリックキーをインスタンスにプッシュします。AL2023 または Amazon Linux 2 を使用してインスタンスを起動した場合、AMI のデフォルトのユーザー名は `ec2-user` です。Ubuntu を使用してインスタンスを起動した場合、AMI のデフォルトのユーザー名は `ubuntu` です。

   以下に、`ec2-user` を認証するために、指定されたアベイラビリティーゾーンで指定されたインスタンスにパブリックキーをプッシュする例を示しています。

   ```
   aws ec2-instance-connect send-ssh-public-key \
       --region us-west-2 \
       --availability-zone us-west-2b \
       --instance-id i-001234a4bf70dec41EXAMPLE \
       --instance-os-user ec2-user \
       --ssh-public-key file://my_key.pub
   ```

1. 

**プライベートキーを使用してインスタンスに接続する**

   パブリックキーがインスタンスメタデータから削除される前に (削除されるまでの時間は 60 秒です)、プライベートキーを使用してインスタンスに接続するには、**ssh** コマンドを使用します。パブリックキーに対応するプライベートキー、インスタンスを起動するために使用した AMI のデフォルトのユーザー名、およびインスタンスのパブリック DNS 名を指定します (プライベートネットワーク経由で接続する場合は、プライベート DNS 名または IP アドレスを指定します)。`IdentitiesOnly=yes` オプションを追加し、ssh config 内のファイルと指定したキーのみが接続に使用されるようにします。

   ```
   ssh -o "IdentitiesOnly=yes" -i my_key ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com
   ```

   次の例では、`timeout 3600` を使用して SSH セッションが 1 時間後に終了するように設定します。セッション中に開始されたプロセスは、セッション終了後もインスタンスで実行し続ける場合があります。

   ```
   timeout 3600 ssh -o “IdentitiesOnly=yes” -i my_key ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com
   ```

## トラブルシューティング
<a name="ic-troubleshoot"></a>

インスタンスへの接続を試みた際にエラーが発生した場合は、以下を参照してください。
+ [Amazon EC2 Linux インスタンスへの接続に関する問題のトラブルシューティング](TroubleshootingInstancesConnecting.md)
+ [EC2 Instance Connect を使用して EC2 インスタンスへ接続しようとしたときの問題をトラブルシューティングするにはどうすればよいですか?](https://repost.aws/knowledge-center/ec2-instance-connect-troubleshooting)

# EC2 Instance Connect のアンインストール
<a name="ec2-instance-connect-uninstall"></a>

EC2 Instance Connect を無効にするには、Linux インスタンスに接続し、Linux にインストールされている `ec2-instance-connect` パッケージをアンインストールします。`sshd` 設定が EC2 Instance Connect をインストールしたときのまま変更されていない場合、`ec2-instance-connect` をアンインストールすると、`sshd` 設定も削除されます。`sshd` 設定が EC2 Instance Connect のインストール後に変更されている場合は、それを手動で更新する必要があります。

------
#### [ Amazon Linux ]

EC2 Instance Connect が事前設定されている AL2023 および Amazon Linux 2 2.0.20190618 以降では EC2 Instance Connect をアンインストールできます。

**Amazon Linux を使用して起動したインスタンスから EC2 Instance Connect をアンインストールするには**

1. SSH を使用してインスタンスに接続します。インスタンスの起動時に使用した SSH キーペアと AL2023 または Amazon Linux 2 AMI のデフォルトのユーザー名 `ec2-user`を指定します。

   例えば、次の **ssh** コマンドは、キーペア `ec2-a-b-c-d.us-west-2.compute.amazonaws.com` を使用して、パブリック DNS 名 `my_ec2_private_key.pem` でインスタンスに接続します。

   ```
   $ ssh -i my_ec2_private_key.pem ec2-user@ec2-a-b-c-d.us-west-2.compute.amazonaws.com
   ```

1. **yum** コマンドを使用して `ec2-instance-connect` パッケージをアンインストールします。

   ```
   [ec2-user ~]$ sudo yum remove ec2-instance-connect
   ```

------
#### [ Ubuntu ]

**Ubuntu AMI を使用して起動したインスタンスから EC2 Instance Connect をアンインストールするには**

1. SSH を使用してインスタンスに接続します。インスタンスの起動時に使用した SSH キーペアと、Ubuntu AMI のデフォルトのユーザー名 `ubuntu`を指定します。

   例えば、次の **ssh** コマンドは、キーペア `ec2-a-b-c-d.us-west-2.compute.amazonaws.com` を使用して、パブリック DNS 名 `my_ec2_private_key.pem` でインスタンスに接続します。

   ```
   $ ssh -i my_ec2_private_key.pem ubuntu@ec2-a-b-c-d.us-west-2.compute.amazonaws.com
   ```

1. **apt-get** コマンドを使用して `ec2-instance-connect` パッケージをアンインストールします。

   ```
   ubuntu:~$ sudo apt-get remove ec2-instance-connect
   ```

------