使用手動設定開啟通道並連線至遠端裝置 - AWS IoT Core

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

使用手動設定開啟通道並連線至遠端裝置

開啟通道時,您可以選擇以快速設定或手動設定方法來開啟通道進入遠端裝置。本教學課程說明如何使用手動設定方法開啟通道,並設定及啟動本機代理以連線至遠端裝置。

若使用手動設定方法,則必須在建立通道時手動指定通道組態。創建隧道後,您可以在瀏覽器中使用 SSH 或在 AWS IoT 控制台外打開終端。本教學課程說明如何使用主控台外部的終端存取遠端裝置。您也將了解如何設定本機代理,然後連線至本機代理以與遠端裝置進行互動。若要連線至本機代理,您必須在建立通道時下載來源存取權杖。

在此設定方法中,您可以使用 SSH 以外的服務,例如透過 FTP 連線至遠端裝置。如需不同設定方法的詳細資訊,請參閱 通道設定方法

手動設定方法的先決條件

  • 遠端裝置所在的防火牆必須允許連接埠 443 上的傳出流量。您建立的通道將使用此通訊埠連線至遠端裝置。

  • 您有一個 IoT 裝置代理程式 (請參閱IoT Agent Snippet) 在連線至裝置閘道的遠端 AWS IoT 裝置上執行,且已設定 MQTT 主題訂閱。如需詳細資訊,請參閱將裝置連線至 AWS IoT 裝置閘道

  • 您必須具有一個在遠端裝置上執行的 SSH 常駐程式。

  • 您已經從中下載了本地代理源代碼,GitHub並為您選擇的平台構建了它。在本教學課程中,我們將建置的本機代理可執行檔案稱作 localproxy

開啟通道

您可以使用 AWS Management Console AWS IoT API 參考或 AWS CLI. 您可以選擇設定目的地名稱,但這並非本教學課程的必要步驟。如果您設定目的地,安全通道會使用 MQTT 自動將存取權杖傳遞至遠端裝置。如需詳細資訊,請參閱 AWS IoT 控制台中的隧道創建方法

如要在主控台中開啟通道
  1. 前往 AWS IoT 主控台的 Tunnels hub (通道中樞),然後選擇 Create job (建立通道)。

    AWS IoT 控制台顯示通道的空列表,其中包含創建,關閉或刪除隧道的選項。
  2. 在本教學課程中,請選擇 Manual setup (手動設定) 作為通道建立方法,然後選擇 Next (下一步)。如需了解如何使用快速設定方法建立通道,請參閱 開啟通道並使用瀏覽器型 SSH 來存取遠端裝置

    注意

    如果從建立物件的詳細資訊頁面建立安全通道,您可以選擇要建立新通道或使用現有通道。如需詳細資訊,請參閱 開啟遠端裝置的通道並使用瀏覽器型 SSH

    設定通道連線的兩個選項:快速設定 (SSH) 或手動設定,需要設定本機 Proxy 和管理存取權杖。
  3. (選擇性) 輸入通道的組態設定。您也可以略過此步驟,繼續進行下一個步驟來建立通道。

    輸入通道描述、通道逾時持續時間和資源標籤作為索引鍵值對,以協助您識別資源。在本教學課程中,您可以略過目的地組態。

    注意

    費用不會依據通道保持開放的持續時間進行計價。只有在建立新通道時會產生費用。如需定價資訊,請參閱 AWS IoT Device Management 定價中的安全通道

  4. 下載用戶端存取權杖,然後選擇 Done (完成)。選擇 Done (完成) 後,字符將無法下載。

    這些權杖只能用於連接通道一次。如果您誤置權杖或通道中斷連線,您可以產生新權杖並將其傳送到遠端裝置,以重新連線至通道。

    用於創建安全隧道連接的源和目標訪問令牌,並在需要時提供有關旋轉和重新發送令牌的說明。
若要使用主控台中開啟通道

若要開啟新的通道,您可以使用 OpenTunnelAPI 作業。您也可以使用 API 指定其他組態,例如通道持續時間和目的地組態。

aws iotsecuretunneling open-tunnel \ --region us-east-1 \ --endpoint https://api.us-east-1.tunneling.iot.amazonaws.com

執行此命令會建立新的通道,並提供您來源和目的地存取權杖。

{ "tunnelId": "01234567-89ab-0123-4c56-789a01234bcd", "tunnelArn": "arn:aws:iot:us-east-1:123456789012:tunnel/01234567-89ab-0123-4c56-789a01234bcd", "sourceAccessToken": "<SOURCE_ACCESS_TOKEN>", "destinationAccessToken": "<DESTINATION_ACCESS_TOKEN>" }

重新傳送通道存取權杖

建立通道時取得的權杖,只能用來連接通道一次。如果您放錯了訪問令牌或隧道斷開連接,則可以使用 MQTT 重新發送新的訪問令牌到遠程設備,無需額外付費。 AWS IoT 安全隧道將撤銷當前令牌並返回用於重新連接到隧道的新訪問令牌。

從主控台輪換權杖
  1. 前往AWS IoT 主控台的「通道」中樞,然後選擇您建立的通道。

  2. 在通道詳細資訊頁面中,選擇 Generate new access tokens (產生新存取權杖),然後選擇 Next (下一步)。

  3. 請為您的通道下載新的存取權杖,然後選擇 Done (完成)。這些權杖只能使用一次。如果誤置這些權杖或通道連線中斷,您可以重新傳送新的存取權杖。

    訪問源和目標設備的令牌,並提供複製或下載它們的選項。Text 解釋了旋轉令牌會撤銷當前令牌,並生成用於重新連接斷開連接的隧道的新的單次使用令牌。
使用 API 輪換存取權杖

要旋轉隧道訪問令牌,您可以使用 RotateTunnelAccessTokenAPI 操作撤銷當前令牌並返回新的訪問令牌以重新連接到隧道。例如,下列指令會輪換目的地裝置的存取權杖:RemoteThing1

aws iotsecuretunneling rotate-tunnel-access-token \ --tunnel-id <tunnel-id> \ --client-mode DESTINATION \ --destination-config thingName=<RemoteThing1>,services=SSH \ --region <region>

執行此命令會產生新的存取權杖,如下所示。如果裝置代理程式設定正確,會使用 MQTT 將權杖傳遞到裝置以連接通道。

{ "destinationAccessToken": "destination-access-token", "tunnelArn": "arn:aws:iot:region:account-id:tunnel/tunnel-id" }

如需說明如何及何時輪換存取權杖的範例,請參閱 透過旋轉用戶端存取權杖來解決 AWS IoT 安全通道連線問題

配置並啟動本機代理

若要連線至遠端裝置,請在筆記型電腦上開啟終端,然後設定並啟動本機代理。本機 Proxy 會透過安全連線使用安全通道,傳輸來源裝置上執行的應用程式所傳送的資料。 WebSocket 您可以從下載本地代理源代理GitHub

設定完成本機代理後,請複製來源用戶端存取權杖,並使用它在來源模式下啟動本機代理。以下展示使用範例命令來啟動本機代理的步驟。在下列命令中,本機代理會設定為在連接埠 5555 上接聽新連線。在此命令中:

  • -r指定 AWS 區域,此區域必須與建立隧道的相同區域。

  • -s 指定代理應該連線的連接埠。

  • -t 指定用戶端權杖文字。

./localproxy -r us-east-1 -s 5555 -t source-client-access-token

若執行此命令,系統會以來源模式啟動本機代理。如果在執行命令後收到下列錯誤,請設定 CA 路徑。如需詳細資訊,請參閱開啟安全通道本機 Proxy。 GitHub

Could not perform SSL handshake with proxy server: certificate verify failed

下列會顯示以 source 模式執行本機代理的範例輸出。

... ... Starting proxy in source mode Attempting to establish web socket connection with endpoint wss://data.tunneling.iot.us-east-1.amazonaws.com:443 Resolved proxy server IP: 10.10.0.11 Connected successfully with proxy server Performing SSL handshake with proxy server Successfully completed SSL handshake with proxy server HTTP/1.1 101 Switching Protocols ... Connection: upgrade channel-id: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456 upgrade: websocket ... Web socket session ID: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456 Web socket subprotocol selected: aws.iot.securetunneling-2.0 Successfully established websocket connection with proxy server: wss://data.tunneling.iot.us-east-1.amazonaws.com:443 Setting up web socket pings for every 5000 milliseconds Scheduled next read: ... Starting web socket read loop continue reading... Resolved bind IP: 127.0.0.1 Listening for new connection on port 5555

啟動 SSH 工作階段

開啟另一個終端機並使用以下命令,透過連線至連接埠 5555 上的本機代理來啟動新的 SSH 工作階段。

ssh username@localhost -p 5555

系統可能會提示您輸入 SSH 工作階段的密碼。當您完成了 SSH 工作階段時,請輸入 exit 以關閉工作階段。

清除

  • 關閉通道

    我們建議您在使用完通道後關閉通道。如果開放時間超過指定的通道持續時間,通道也可能會關閉。通道一旦關閉就不能重新開放。您仍然可以開啟已關閉的通道,然後選擇 Duplicate tunnel (複製通道) 來複製通道。指定您要使用的通道持續時間,然後建立新通道。

    • 若要從 AWS IoT 主控台關閉個別通道或多個通道,請移至 Tunnels hub (通道中樞),選擇您要關閉的通道,然後選擇Close tunnel (關閉通道)。

    • 若要使用 AWS IoT API 參考 API 關閉個別通道或多個通道,請使用 CloseTunnelAPI 作業。

      aws iotsecuretunneling close-tunnel \ --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd"
  • 刪除通道

    您可以從您的 AWS 帳戶.

    警告

    刪除動作為永久性動作,且無法還原。

    • 若要從 AWS IoT 主控台刪除個別通道或多個通道,請移至 Tunnels hub (通道中樞),選擇您要刪除的通道,然後選擇Delete tunnel (刪除通道)。

    • 若要使用 AWS IoT API 參考 API 刪除個別通道或多個通道,請使用 CloseTunnelAPI 作業。使用 API 時,請將 delete 旗標設定為 true

      aws iotsecuretunneling close-tunnel \ --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd" --delete true