

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用公有 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)，這樣您就可以稽核連接請求。

可以使用 Amazon EC2 主控台或您選擇的 SSH 用戶端，透過 EC2 Instance Connect 連線到執行個體。

當您使用 EC2 Instance Connect 連接至執行個體時，EC2 Instance Connect API 會將 SSH 公有金鑰推送至[執行個體中繼資料](ec2-instance-metadata.md)，此金鑰可保留 60 秒。連接至使用者的 IAM 政策會授權使用者將公有金鑰推送至執行個體中繼資料。SSH 常駐程式使用安裝 EC2 Instance Connect 時設定的 `AuthorizedKeysCommand` 和 `AuthorizedKeysCommandUser`，從執行個體中繼資料查詢身分驗證所用的公有金鑰並將您連接至執行個體。

**提示**  
EC2 Instance Connect 是連線到 Linux 執行個體的其中一個選項。如需有關其他選項的詳細資訊，請參閱 [使用 SSH 連線至您的 Linux 執行個體](connect-to-linux-instance.md)。連線至 Windows 執行個體，請參閱 [使用 RDP 連線至您的 Windows 執行個體](connecting_to_windows_instance.md)。

**定價**  
EC2 Instance Connect 可免費使用。

**區域可用性**  
EC2 Instance Connect 適用於所有 AWS 區域，但亞太區域 （台北） 除外。本地區域不支援。

**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 連線到執行個體，您必須先完成先決條件設定，才能成功連線至執行個體。本教學課程的目的是指導您完成任務以完成先決條件設定。

**教學課程概觀**

在本教學課程中，您將完成下列四項任務：
+ [任務 1：授予使用 EC2 Instance Connect 所需的許可](#eic-tut1-task1)

  首先，您將建立包含 IAM 許可的 IAM 政策，允許您將公有金鑰推送至執行個體中繼資料。您可以將此政策連接至您的 IAM 身分 (使用者、使用者群組或角色)，以便您的 IAM 身分取得這些許可。
+ [任務 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 政策連接至 IAM 身分 (使用者、使用者群組或角色)，才能授予您將公有金鑰推送至執行個體中繼資料所需的許可。

**任務目標**

您將建立 IAM 政策，授予將公有金鑰推送至執行個體的許可。要允許的特定動作是 `ec2-instance-connect:SendSSHPublicKey`。您還必須允許 `ec2:DescribeInstances` 動作，以便在 Amazon EC2 主控台檢視及選取執行個體。

建立政策後，您將政策連接至您的 IAM 身分 (使用者、使用者群組或角色)，以便您的 IAM 身分取得許可。

您要建立的政策設定如下：

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

****  

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

------

**重要**  
本教學課程建立的 IAM 政策是高度寬鬆政策，可讓您使用任何 AMI 使用者名稱連線到任何執行個體。我們使用此高度寬鬆政策，讓教學課程保持簡單，並專注於本教學課程所教導的特定組態。不過，在生產環境，建議將 IAM 政策設定為提供[最低權限許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。如需 IAM 政策的範例，請參閱[為 EC2 Instance Connect 授予 IAM 許可](ec2-instance-connect-configure-IAM-role.md)。

**建立並連接可讓您使用 EC2 Instance Connect 連線至執行個體的 IAM 政策**

1. **首先建立 IAM 政策**

   1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

   1. 在導覽窗格中，選擇**政策**。

   1. 選擇 **Create policy** (建立政策)。

   1. 在**新增許可**頁面，執行以下作業：

      1. 針對**服務類別**，請選擇 **EC2 Instance Connect**。

      1. 在**允許的動作**下方，在搜尋欄位輸入 **send** 以顯示相關動作，然後選取 **SendSSHPublicKey**。

      1. 在**資源**，選擇**全部**。對於生產環境，我們建議您依其 ARN 指定執行個體，但在本教學課程，您允許所有執行個體。

      1. 選擇**新增其他許可**。

      1. 針對**服務**，選擇 **EC2**。

      1. 在**允許的動作**下，在搜尋欄位中開始輸入 **describein** 以顯示相關動作，然後選取 **DescribeInstances**。

      1. 選擇**下一步**。

   1. 在**檢閱和建立**頁面，執行以下作業：

      1. 針對 **Policy Name (政策名稱)**，請輸入政策的名稱。

      1. 選擇**建立政策**。

1. **然後將政策連接至您的身分**

   1. 在 IAM 主控台的導覽窗格中，選擇 **Policies (政策)**。

   1. 在政策清單中，選取您建立的政策名稱旁的選項按鈕。您可以使用搜尋方塊來篩選政策清單。

   1. 選擇 **Actions** (動作)、**Attach** (連接)。

   1. 在 **IAM 實體**，選取身分 (使用者、使用者群組或角色) 旁的核取方塊。您可以使用搜尋方塊來篩選實體清單。

   1. 選擇**連接政策**。

### 檢視動畫：建立 IAM 政策
<a name="eic-tut1-task1-animation1"></a>

![\[此動畫展示如何建立 IAM 政策。如需此動畫的文字版本，請參閱前面程序中的步驟。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/eic-tut1-task1-create-iam-policy.gif)


### 檢視動畫：連接 IAM 政策
<a name="eic-tut1-task1-animation2"></a>

![\[此動畫說明如何將 IAM 政策連接至 IAM 身分。如需此動畫的文字版本，請參閱前面程序中的步驟。\]](http://docs.aws.amazon.com/zh_tw/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. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Security Groups** (安全群組)。

1. 選擇 **Create Security Group** (建立安全群組)。

1. 在 **Basic details (基本詳細資料)** 下，執行下列動作：

   1. 在**安全群組名稱**，輸入有意義的安全群組名稱。

   1. 為**描述**輸入有意義的安全群組說明。

1. 在**輸入規則**，執行下列動作：

   1. 選擇**新增規則**。

   1. 針對 **Type** (類型)，選擇 **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/zh_tw/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 連線到執行個體，則需要執行其他組態步驟。這些步驟已超出本教學課程範圍。

**任務目標**

您將使用 Amazon Linux 2023 AMI 啟動執行個體，該 AMI 已預先安裝 EC2 Instance Connect。您也將指定您先前建立的安全群組，以便可以在 Amazon EC2 主控台使用 EC2 Instance Connect 連線到執行個體。由於您將使用 EC2 Instance Connect 連線至執行個體，將公有金鑰推送至執行個體的中繼資料，因此啟動執行個體時不需要指定 SSH 金鑰。

**啟動可在 Amazon EC2 主控台使用 EC2 Instance Connect 進行連線的執行個體**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在畫面頂端的導覽列中，會顯示目前的 AWS 區域 （例如**愛爾蘭**)。選取要在其中啟動執行個體的區域。此選項非常重要，因為您建立了允許特定區域流量的安全群組，因此您必須選取要啟動執行個體的相同區域。

1. 從 Amazon EC2 主控台儀表板選擇 **Launch Instance (啟動執行個體)**。

1. (選用) 在 **Name and tags** (名稱和標籤) 下，針對 **Name** (名稱)，輸入執行個體的描述性名稱。

1. 在**應用程式和作業系統映像 (Amazon Machine Image)** 下，選擇**快速啟動**。預設會選取 **Amazon Linux**。在 **Amazon Machine Image (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/zh_tw/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. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon 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/zh_tw/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)。
+ 如果您的使用者將透過執行個體的私有 IPv4 地址連線到您的執行個體，則您必須建立與 VPC 的私有網路連線，例如使用 AWS Direct Connect AWS Site-to-Site VPN或 VPC 對等互連，以便您的使用者可以連線到執行個體的私有 IP 地址。

如果您的執行個體沒有公有 IPv4 或 IPv6 位址，且您不想按上述說明設定網路存取權，則可將 EC2 Instance Connect 端點視為 EC2 Instance Connect 的替代方案。透過 EC2 Instance Connect 端點，您可以使用 SSH 或 RDP 連線到執行個體，即使執行個體沒有公有 IPv4 或 IPv6 位址。如需詳細資訊，請參閱[使用 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 服務。該服務由特定的 IP 地址範圍識別，該範圍透過字首清單進行 AWS 管理。您必須建立允許來自 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 連線到執行個體時**  
請確認與執行個體關聯的安全群組在連接埠 22 上[允許來自您 IP 地址或網路的傳入 SSH 流量](security-group-rules-reference.md#sg-rules-local-access)。VPC 的預設安全群組根據預設並不允許傳入 SSH 流量。啟動執行個體精靈建立的安全群組預設會允許傳入 SSH 流量。如需詳細資訊，請參閱[從您電腦連線到執行個體的規則](security-group-rules-reference.md#sg-rules-local-access)。

## 授予許可
<a name="eic-prereqs-grant-permissions"></a>

您必須將所需許可授予給每個將使用 EC2 Instance Connect 連線到執行個體的 IAM 使用者。如需詳細資訊，請參閱[為 EC2 Instance Connect 授予 IAM 許可](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 連線至執行個體時，使用者名稱必須符合下列先決條件：
+ 第一個字元：必須是字母 (`A-Z`、`a-z`)、數字 (`0-9`) 或底線 (`_`)
+ 後續字元：可以是字母 (`A-Z`、`a-z`)、數字 (`0-9`) 或 `@ . _ -` 這些字元
+ 長度下限：1 個字元
+ 長度上限：31 個字元

# 為 EC2 Instance Connect 授予 IAM 許可
<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 指定。若要准許使用者連線至*所有* EC2 執行個體，請以 `*` 萬用字元取代資源 ARN。
+ 只有在連線時指定 *ami-username*，`ec2:osuser` 條件才會准許連線至執行個體。
+ 指定 `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` 動作准許使用者連線至任何執行個體 (由資源 ARN 中的 `*` 萬用字元表示)，條件是執行個體的資源標記中 key=`tag-key` 和 value=`tag-value`。

指定 `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 之前，請確定您符合下列先決條件。
+ **確認執行個體使用下列其中一項：**
  + Amazon Linux 2 在 2.0.20190618 之前的版本 \$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
**提示**  
\$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。**

  您可以使用 Amazon EC2 主控台取得執行個體的 ID (從**執行個體 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 ]

**若要在使用 Amazon Linux 2 啟動的執行個體上安裝 EC2 Instance Connect**

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
   ```

   您應會在 `/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 ]

**若要在使用 CentOS 啟動的執行個體上安裝 EC2 Instance Connect**

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 代理伺服器，則必須在目前的 Shell 工作階段中設定 `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 執行個體 Connect 組態檔案是以 Red Hat Package Manager (RPM) 套件提供，搭配以下項目適用的不同 RPM 套件：CentOS 8 和 CentOS 9，以及在 Intel /AMD (x86\$164) 或 ARM (AArch64) 上執行的執行個體類型。

   為您的作業系統和 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 ]

**若要在使用 macOS 啟動的執行個體上安裝 EC2 Instance Connect**

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. 使用以下命令更新 Homebrew。更新將列出 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 ]

**若要在使用 Red Hat Enterprise Linux (RHEL) 啟動的執行個體上安裝 EC2 Instance Connect**

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 代理伺服器，則必須在目前的 Shell 工作階段中設定 `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 執行個體 Connect 組態檔案是以 Red Hat Package Manager (RPM) 套件提供，搭配以下項目適用的不同 RPM 套件：RHEL 8 和 RHEL 9，以及在 Intel /AMD (x86\$164) 或 ARM (AArch64) 上執行的執行個體類型。

   為您的作業系統和 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 ]

**若要在使用 Ubuntu 16.04 或更新版本啟動的執行個體上安裝 EC2 Instance Connect**

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
   ```

   您應會在 `/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 執行個體。 Amazon EC2 

當您透過主控台或 使用 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**
+ [使用 Connect Amazon EC2 主控台進行連線](#ec2-instance-connect-connecting-console)
+ [使用 連線 AWS CLI](#connect-linux-inst-eic-cli-ssh)
+ [使用您自己的金鑰和 SSH 用戶端來進行連接](#ec2-instance-connect-connecting-aws-cli)
+ [疑難排解](#ic-troubleshoot)

## 使用 Connect Amazon EC2 主控台進行連線
<a name="ec2-instance-connect-connecting-console"></a>

您可以透過 Amazon EC2 主控台使用 EC2 Instance Connect 連線到執行個體。

**要求**  
若要使用 Amazon EC2 主控台進行連線，執行個體必須具有公用 IPv4 或 IPv6 位址。如果執行個體只有私有 IPv4 地址，您可以使用 [ec2-instance-connect AWS CLI](#connect-linux-inst-eic-cli-ssh) 進行連線。

**要使用 Amazon EC2 主控台連線至執行個體**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Instances** (執行個體)。

1. 選取執行個體，然後選取 **Connect (連線)**。

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` (default)  
EC2 Instance Connect 會嘗試依下列順序使用執行個體的 IP 位址並使用對應的連線類型進行連線：  

1. 公有 IPv4：`direct`

1. 私有 IPv4：`eice`

1. IPv6：`direct`

`direct`  
EC2 Instance Connect 會嘗試依下列順序使用執行個體的 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`。

**要求**  
您必須使用第 2 AWS CLI 版。如需詳細資訊，請參閱[安裝或更新最新版本的 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)連線到執行個體，則請使用上述命令並指定具有 `eice` 值的 `--connection-type` 參數。

```
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
```

**提示**  
如果您在使用這些命令時發生錯誤，請確定您使用的是第 2 AWS CLI 版，因為該`ssh`命令僅適用於此主要版本。我們也建議定期更新至 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 地址的執行個體。

**要求**
+ 金鑰對的需求
  + 支援的類型：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 公有金鑰推送至執行個體)，以及透過網路連線到執行個體私有 IP 位址的能力，以建立 SSH 工作階段。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. 

**使用私有金鑰連線至執行個體**

   使用 **ssh** 命令，來使用私有金鑰連接至執行個體，之後系統會將公有金鑰從執行個體中繼資料中移除 (在系統移除金鑰前您有 60 秒的時間)。指定對應於公有金鑰應的私有金鑰、用於啟動執行個體之 AMI 的預設使用者名稱，以及執行個體的公有 DNS 名稱 (如果透過私有網路連線，請指定私有 DNS 名稱或 IP 位址)。新增該 `IdentitiesOnly=yes` 選項以確保連線只使用 ssh 組態中的檔案和指定的金鑰。

   ```
   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 執行個體並解除安裝在 OS 上的 `ec2-instance-connect` 套件。如果 `sshd` 組態與您安裝在 EC2 Instance Connect 設定的內容相符，解除安裝 `ec2-instance-connect` 也會移除 `sshd` 組態。如果您在安裝 EC2 Instance Connect 之後修改 `sshd` 組態，您必須手動更新。

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

您可以在 AL2023 和 Amazon Linux 2 2.0.20190618 或更新版本中 (EC2 Instance Connect 已預先設定) 解除安裝 EC2 Instance Connect。

**若要在使用 Amazon Linux 啟動的執行個體解除安裝 EC2 Instance Connect**

1. 使用 SSH 連接至您的執行個體。指定啟動執行個體時所使用的 SSH 金鑰對，以及 AL2023 或 Amazon Linux 2 AMI 的預設使用者名稱，即 `ec2-user`。

   例如，以下 **ssh** 命令會使用 `my_ec2_private_key.pem` 金鑰對連接到公有 DNS 名稱為 `ec2-a-b-c-d.us-west-2.compute.amazonaws.com` 的執行個體。

   ```
   $ 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 連接至您的執行個體。當您啟動且為 Ubuntu AMI 為預設使用者名稱時，為您的執行個體指定您所使用的 SSH 金鑰對 `ubuntu`。

   例如，以下 **ssh** 命令會使用 `my_ec2_private_key.pem` 金鑰對連接到公有 DNS 名稱為 `ec2-a-b-c-d.us-west-2.compute.amazonaws.com` 的執行個體。

   ```
   $ 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
   ```

------