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

EC2 Instance Connect のセットアップ

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

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

制約事項

  • 以下の Linux ディストリビューションがサポートされています。

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

    • Ubuntu 16.04 以降

  • SSH 認証の AuthorizedKeysCommand および AuthorizedKeysCommandUser 設定を構成した場合、EC2 Instance Connect をインストールしても更新されません。その結果、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 アドレスからのインバウンド SSH トラフィックがポート 22 で許可されることを確認します。VPC のデフォルトのセキュリティグループでは、着信 SSH トラフィックはデフォルトでは許可されません。起動ウィザードで作成されたセキュリティグループは、デフォルトで受信 SSH トラフィックを許可します。詳細については、「Linux インスタンス用の受信トラフィックの認可」を参照してください。

  • (ブラウザベースのクライアント) サービスに発行された推奨される IP ブロックからのインバウンド SSH トラフィックをインスタンスで許可することをお勧めします。EC2 Instance Connect サブネットの IP 範囲を取得するには、service パラメータの EC2_INSTANCE_CONNECT フィルタを使用します。詳細については、アマゾン ウェブ サービス全般のリファレンスの「AWS IP アドレスの範囲」を参照してください。

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

Amazon Linux 2 2.0.20190618 以降および Ubuntu 20.04 以降は、EC2 Instance Connect で事前設定されています。これらの AMI のいずれかを使用してインスタンスを起動した場合は、このタスクをスキップできます。その他のサポートされている Linux ディストリビューションでは、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

    /etc/ssh/sshd_config ファイルの AuthorizedKeysCommand 行と AuthorizedKeysCommandUser 行に以下の値が含まれていれば、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 コマンドを使用して .deb パッケージをインストールします。

    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

    /lib/systemd/system/ssh.service.d/ec2-instance-connect.conf ファイルの AuthorizedKeysCommand 行と AuthorizedKeysCommandUser 行に以下の値が含まれていれば、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 は、標準の SSH 呼び出しと似たようなインターフェイスを提供します。このインターフェイスでは、EC2 インスタンス情報へのクエリの実行、一時的なパブリックキーの生成と発行、単一のコマンド mssh instance_id を介しての SSH 接続の確立を行います。

注記

ユーザーがブラウザベースのクライアントまたは 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 ユーザーに、このポリシーをアタッチします。詳細については、IAM ユーザーガイドの「Amazon EC2 Instance Connect のアクション、リソース、および条件キー」を参照してください。

次の手順では、AWS CLI を使用してポリシーを作成し、アタッチする方法を示します。AWS マネジメントコンソール を使用する手順については、IAM ユーザーガイド の「IAM ポリシーを作成する (コンソール)」と「ポリシーをユーザーに直接アタッチすることによるアクセス権限の追加」を参照してください。

EC2 Instance Connect に対するアクセス許可を IAM ユーザーに付与するには (AWS CLI)

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

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

    • 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