EC2 Instance Connect セットアップ - Amazon Elastic Compute Cloud

EC2 Instance Connect セットアップ

EC2 Instance Connect を使用してインスタンスに接続するには、Instance Connect の使用をサポートするすべてのインスタンスを設定する必要があります (これは各インスタンスの 1 回限りの要件です)。さらに、Instance Connect を使用するすべての IAM プリンシパルにアクセス許可を付与する必要があります。次のセットアップタスクを完了したら、EC2 Instance Connect を使用してインスタンスに接続できます。

EC2 Instance Connect の設定の詳細については、Securing your bastion hosts with Amazon EC2 Instance Connect を参照してください。

Limitations

  • 以下に挙げた、サポートされている Linux ディストリビューションに対し、EC2 Instance Connect をインストールできます。

    • Amazon Linux 2 (すべてのバージョン)

    • Ubuntu 16.04 以降

  • SSH 認証の AuthorizedKeysCommand および AuthorizedKeysCommandUser 設定を構成した場合、EC2 Instance Connect をインストールしても更新されません。その結果、Instance Connect を使用することはできません。

EC2 Instance Connect インストールの前提条件

  • SSH を使用してインスタンスに接続するための一般的な前提条件を確認します。

    詳細については、「インスタンスに接続するための一般的な前提条件」を参照してください。

  • 使用するローカルコンピュータに SSH クライアントをインストールします。

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

  • ローカルコンピュータに AWS CLI をインストールします。

    IAM アクセス許可を設定するには、AWS CLI を使用する必要があります。AWS CLI のインストールの詳細については、AWS Command Line Interface ユーザーガイドの「AWS CLI のインストール」を参照してください。

  • [Ubuntu] AWS CLI をインスタンスにインストールします。

    EC2 Instance Connect を Ubuntu インスタンスにインストールするには、インスタンスで AWS CLI を使用する必要があります。AWS CLI のインストールの詳細については、AWS Command Line Interface ユーザーガイドの「AWS CLI のインストール」を参照してください。

タスク 1: インスタンスへのネットワークアクセスを設定する

ユーザーが EC2 Instance Connect を使用してインスタンスに接続できるように、次のネットワークアクセスを設定する必要があります。

  • ユーザーがインターネット経由でインスタンスにアクセスする場合、インスタンスにパブリック IP アドレスがあり、パブリックサブネット内にある必要があります。詳細については、Amazon VPC ユーザーガイドの「インターネットアクセスを有効にする」を参照してください。

  • ユーザーがインスタンスのプライベート IP アドレスを介してインスタンスにアクセスする場合は、AWS Direct Connect、AWS Site-to-Site VPN、または VPC ピアリングを使用して VPC へのプライベートネットワーク接続を確立し、ユーザーがインスタンスのプライベート IP アドレスに到達できるようにする必要があります。

  • インスタンスに関連付けられているセキュリティグループで、IP アドレスまたはネットワークからのインバウンド SSH トラフィックがポート 22 で許可されることを確認します。VPC のデフォルトのセキュリティグループでは、着信 SSH トラフィックはデフォルトでは許可されません。起動ウィザードで作成されたセキュリティグループは、デフォルトで受信 SSH トラフィックを許可します。詳細については、「」を参照してくださいLinux インスタンス用のインバウンドトラフィックの承認

  • (Amazon EC2 コンソールのブラウザベースのクライアント) インスタンスに関連付けられているセキュリティグループで、このサービスの IP アドレス範囲からのインバウンド SSH トラフィックが許可されていることを確認します。アドレス範囲を特定するには、AWS が提供する JSON ファイルをダウンロードした上で、EC2_INSTANCE_CONNECT をサービス値として使用しながら EC2 Instance Connect 用のサブセットをフィルタリングします。JSON ファイルのダウンロードおよびサービスを使用したフィルタリングの詳細については、Amazon Web Services 全般のリファレンスの「AWS IP アドレスの範囲」を参照してください。

タスク 2: (条件付き) EC2 Instance Connect をインスタンスにインストールする

以下に挙げる AMI は、EC2 Instance Connect に事前インストールされており、いずれかを使用してインスタンスを起動する場合には、このタスクはスキップできます。

  • Amazon Linux 2 2.0.20190618 以降

  • Ubuntu 20.04 以降

これらより前のバージョンの AMI により起動したインスタンスで、Instance Connect を使用した接続をサポートさせる場合には、インスタンスごとに Instance Connect をインストールする必要があります。

Instance Connect をインストールすると、インスタンスに SSH デーモンが設定されます。Instance Connect をインストールする手順は、インスタンスの起動に使用した Amazon Linux 2 と Ubuntu に応じて異なります。

Amazon Linux 2

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

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

    インスタンスの起動時にインスタンスに割り当てた SSH キーペアと、インスタンスを起動するために使用した AMI のデフォルトのユーザー名を使用します。Amazon Linux 2 の場合、デフォルトのユーザー名は ec2-user です。

    たとえば、Amazon Linux 2 を使用してインスタンスを起動した場合、インスタンスのパブリック DNS 名は ec2-a-b-c-d.us-west-2.compute.amazonaws.com、キーペアは my_ec2_private_key.pem です。次のコマンドを使用して SSH 経由でインスタンスに接続します。

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

    インスタンスへの接続の詳細については、SSH を使用した Linux インスタンスへの接続 を参照してください。

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

    Amazon Linux 2 では、yum install コマンドを使用します。

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

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

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

    sudo less コマンドを使用して /etc/ssh/sshd_config ファイルが以下のとおりに正しく更新されたことを確認します。

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

    AuthorizedKeysCommand ファイルの AuthorizedKeysCommandUser 行と /etc/ssh/sshd_config 行に以下の値が含まれていれば、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

    注記

    AuthorizedKeysCommandAuthorizedKeysCommandUser を設定済みである場合は、Instance Connect をインストールしても値は変更されないため、Instance Connect は使用できません。

Ubuntu

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

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

    インスタンスの起動時にインスタンスに割り当てた SSH キーペアと、インスタンスを起動するために使用した AMI のデフォルトのユーザー名を使用します。Ubuntu AMI の場合、ユーザー名は ubuntu です。

    Ubuntu を使用してインスタンスを起動した場合、インスタンスのパブリック DNS 名は ec2-a-b-c-d.us-west-2.compute.amazonaws.com、キーペアは my_ec2_private_key.pem です。次のコマンドを使用して SSH 経由でインスタンスに接続します。

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

    インスタンスへの接続の詳細については、SSH を使用した Linux インスタンスへの接続 を参照してください。

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

    Ubuntu では、次のコマンドを使用して、インスタンスのすべてのパッケージを更新します。

    ubuntu:~$ sudo apt-get update
    ubuntu:~$ sudo apt-get upgrade
  3. インスタンスに Instance Connect パッケージをインストールします。

    Ubuntu では、sudo apt-get コマンドを使用します。

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

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

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

    sudo less コマンドを使用して /lib/systemd/system/ssh.service.d/ec2-instance-connect.conf ファイルが以下のとおりに正しく更新されたことを確認します。

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

    AuthorizedKeysCommand ファイルの AuthorizedKeysCommandUser 行と /lib/systemd/system/ssh.service.d/ec2-instance-connect.conf 行に以下の値が含まれていれば、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

    注記

    AuthorizedKeysCommandAuthorizedKeysCommandUser を設定済みである場合は、Instance Connect をインストールしても値は変更されないため、Instance Connect は使用できません。

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

タスク 3: (オプション) EC2 Instance Connect CLI をお使いのコンピューターにインストールする

EC2 Instance Connect CLI では、シンプルな操作で 1 つのコマンド (mssh instance_id) を使って EC2 インスタンスに接続できます。詳細については、「EC2 Instance Connect CLI を使用して接続する」を参照してください。

注記

ユーザーが Amazon EC2 コンソール (ブラウザベースのクライアント) または SSH クライアントのみを使用してインスタンスに接続する場合は、EC2 Instance Connect CLI をインストールする必要はありません。

EC2 Instance Connect CLI パッケージをインストールするには

pip を使用して、ec2instanceconnectcli パッケージをインストールします。詳細については、GitHub ウェブサイトの「aws/aws-ec2-instance-connect-cli」、および Python Package Index (PyPI) ウェブサイトの「https://pypi.org/project/ec2instanceconnectcli/」を参照してください。

$ pip install ec2instanceconnectcli

タスク 4: EC2 Instance Connect の IAM アクセス許可を設定する

IAM プリンシパルが EC2 Instance Connect を使用してインスタンスに接続できるように、パブリックキーをインスタンスにプッシュするアクセス許可を付与する必要があります。アクセス許可を付与するには、IAM ポリシーを作成し、アクセス許可を必要とする IAM プリンシパルに、このポリシーをアタッチします。詳細については、「Amazon EC2 Instance Connect のアクション、リソース、および条件キー 」を参照してください。

次の手順では、AWS CLI を使用してポリシーを作成し、IAM ユーザーにアタッチする方法を示します。IAM ロールなどの他の IAM プリンシパルにも同じポリシーを適用できます。AWS Management Console を使用する手順については、IAM ユーザーガイド の「IAM ポリシーを作成する (コンソール)」、「ポリシーをユーザーに直接アタッチすることによるアクセス権限の追加」および「IAM ロールの作成」を参照してください。

IAM プリンシパルに EC2 Instance Connect へのアクセス許可を付与するには (AWS CLI)

  1. 以下を含む JSON ポリシードキュメントを作成します。

    • ec2-instance-connect:SendSSHPublicKey アクション。これにより、パブリックキーをインスタンスにプッシュするためのアクセス許可を IAM プリンシパルに付与します。ec2-instance-connect:SendSSHPublicKey では、特定の EC2 インスタンスへのアクセスを制限することを検討してください。それ以外の場合、このアクセス許可を持つすべての IAM プリンシパルは、すべての EC2 インスタンスに接続できます。リソース ARN を指定するか、リソースタグを条件キーとして使用して、アクセスを制限することもできます。

    • ec2:osuser 条件。これは、パブリックキーをインスタンスにプッシュできる OS ユーザーの名前を指定します。インスタンスの起動に使用した AMI のデフォルトのユーザー名を使用します。デフォルトのユーザー名は Amazon Linux 2 では ec2-user、Ubuntu では ubuntu です。

    • ec2:DescribeInstances アクション。これは、ラッパーがこのアクションを呼び出すため、EC2 Instance Connect CLI を使用するときに必要です。IAM プリンシパルには、別のポリシーからこのアクションを呼び出すアクセス許可がすでに付与されている場合があります。

    以下に、ポリシードキュメントの例を示します。ユーザーが SSH クライアントのみを使用してインスタンスに接続する場合は、ec2:DescribeInstances アクションのステートメントを省略できます。EC2 Instance Connect を使用してすべての EC2 インスタンスへのアクセスをユーザーに許可するには、Resource の指定されたインスタンスをワイルドカード * に置き換えます。

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

    前述のポリシーでは、インスタンス ID で識別される特定のインスタンスへのアクセスを許可します。または、リソースタグを使用してインスタンスへのアクセスを制御することもできます。属性ベースアクセス制御は、ユーザーおよび AWS リソースにアタッチできるタグに基づいてアクセス権限を定義する認証戦略です。たとえば、次のポリシーでは、インスタンスに key=tag-key と value=tag-value のリソースタグがある場合にのみ、IAM ユーザーがインスタンスにアクセスすることを許可します。AWS リソースへのアクセスを制御するタグの使用の詳細については、IAM ユーザーガイドの「AWS リソースへのアクセス制御」を参照してください。

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"ec2-instance-connect:SendSSHPublicKey", "Resource": "arn:aws:ec2:region:account-id:instance/*", "Condition":{ "StringEquals":{ "aws:ResourceTag/tag-key":"tag-value" } } }, { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" } ] }
  2. create-policy コマンドを使用して新しい管理ポリシーを作成し、新しいポリシーの内容として使用するために作成した JSON ドキュメントを指定します。

    $ aws iam create-policy --policy-name my-policy --policy-document file://JSON-file-name
  3. attach-user-policy コマンドを使用して、管理ポリシーを指定した IAM ユーザーにアタッチします。--user-name パラメータで、IAM ユーザーのわかりやすい名前 (ARN ではなく) を指定します。

    $ aws iam attach-user-policy --policy-arn arn:aws:iam::account-id:policy/my-policy --user-name IAM-friendly-name