將用戶端裝置連線至核心裝置 - AWS IoT Greengrass

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

將用戶端裝置連線至核心裝置

您可以將雲端探索設定為將用戶端裝置連線到核心裝置。設定雲端探索時,用戶端裝置可以連線到AWS IoT Greengrass雲端服務,以擷取可連線的核心裝置相關資訊。然後,用戶端裝置可以嘗試連線到每個核心裝置,直到它們成功連線為止。

若要使用雲端探索,您必須執行下列動作:

  • 將用戶端裝置與可連線的核心裝置建立關聯。

  • 指定用戶端裝置可連線至每個核心裝置的 MQTT 代理程式端點。

  • 將元件部署到可支援用戶端裝置的核心裝置。

    您也可以部署選用元件來執行下列作業:

    • 在AWS IoT Core用戶端裝置、Greengrass 元件和雲端服務之間轉送訊息。

    • 自動為您管理核心裝置 MQTT 代理程式端點。

    • 管理本機用戶端裝置陰影,並與AWS IoT Core雲端服務同步陰影。

您也必須檢閱並更新核心裝置的AWS IoT原則,以確認其具有連線用戶端裝置所需的權限。如需詳細資訊,請參閱 需求

設定雲端探索之後,您可以測試用戶端裝置與核心裝置之間的通訊。如需詳細資訊,請參閱 測試用戶端裝置通訊

需求

若要將用戶端裝置連線到核心裝置,您必須具備下列項目:

設定綠色服務角色

Greengrass 服務角色是一種 AWS Identity and Access Management (IAM) 服務角色,可授權代表AWS IoT Greengrass您從服AWS務存取資源。此角色可讓AWS IoT Greengrass您驗證用戶端裝置的身分識別,並管理核心裝置連線資訊。

如果您先前尚未在此區域中設定 Greengrass 服務角色,則必須將 Greengrass 服務角色與AWS IoT Greengrass您在此區域中的服務角色建立關聯。AWS 帳戶

使用AWS IoT Greengrass主控台中的 [設定核心裝置探索] 頁面時,請為您AWS IoT Greengrass設定 Greengrass 服務角色。否則,您可以使用AWS IoT控制台或 AWS IoT Greengrass API 手動設置它。

在本節中,您會檢查 Greengrass 服務角色是否已設定。如果未設定,您可以建立新的 Greengrass 服務角色,以便與AWS IoT Greengrass此區AWS 帳戶域中的您建立關聯。

  1. 檢查 Greengrass 服務角色是否與您在此AWS 帳戶區域中AWS IoT Greengrass的相關聯。請執行下列操作:

    1. 導覽至 AWS IoT主控台

    2. 在導覽窗格中,選擇設定

    3. Greengrass 服務角色區段中,尋找目前的服務角色,以查看 Greengrass 服務角色是否已關聯。

      如果您有相關聯的 Greengrass 服務角色,則您符合使用 IP 偵測器元件的此需求。跳至 設定物AWS IoT件原則

  2. 如果 Greengrass 服務角色與您AWS 帳戶在此區域中沒有AWS IoT Greengrass關聯,請建立 Greengrass 服務角色並將其關聯。請執行下列操作:

    1. 導覽至 IAM 主控台

    2. 選擇角色

    3. 選擇建立角色

    4. 在 [建立角色] 頁面上,執行下列動作:

      1. 在 [信任的實體類型] 下,選擇AWS 服務

      2. 使用案例,其他用例下AWS 服務,選擇 Greengrass,選擇 Greengrass此選項會指定新增AWS IoT Greengrass為可擔任此角色的受信任實體。

      3. 選擇下一步

      4. 在 [權限原則] 下,選取AWSGreengrassResourceAccessRolePolicy要附加至角色的。

      5. 選擇下一步

      6. 角色名稱中,輸入角色的名稱,例如Greengrass_ServiceRole

      7. 選擇建立角色

    5. 導覽至 AWS IoT主控台

    6. 在導覽窗格中,選擇設定

    7. 在 [Greengrass 服務角色] 區段中,選擇 [附加角色]。

    8. 在 [更新 Greengrass 服務角色模式] 中,選取您建立的 IAM 角色,然後選擇 [連接角色]。

  1. 檢查 Greengrass 服務角色是否與您在此AWS 帳戶區域中AWS IoT Greengrass的相關聯。

    aws greengrassv2 get-service-role-for-account

    如果 Greengrass 服務角色相關聯,則作業會傳回包含角色相關資訊的回應。

    如果您有相關聯的 Greengrass 服務角色,則您符合使用 IP 偵測器元件的此需求。跳至 設定物AWS IoT件原則

  2. 如果 Greengrass 服務角色與您AWS 帳戶在此區域中沒有AWS IoT Greengrass關聯,請建立 Greengrass 服務角色並將其關聯。請執行下列操作:

    1. 使用允許 AWS IoT Greengrass 擔任角色之信任政策的角色。此範例會建立名為 Greengrass_ServiceRole 的角色,但您可以使用不同的名稱。我們建議您也在信任原則中加入aws:SourceArnaws:SourceAccount全域條件內容金鑰,以協助避免混淆的副安全性問題。條件內容索引鍵會限制存取權,只允許來自指定帳戶和 Greengrass 工作區的要求。如需有關混淆代理人問題的詳細資訊,請參閱 預防跨服務混淆代理人

      Linux or Unix
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "greengrass.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:greengrass:region:account-id:*" }, "StringEquals": { "aws:SourceAccount": "account-id" } } } ] }'
      Windows Command Prompt (CMD)
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document "{\\"Version\\":\\"2012-10-17\\",\\"Statement\\":[{\\"Effect\\":\\"Allow\\",\\"Principal\\":{\\"Service\\":\\"greengrass.amazonaws.com\\"},\\"Action\\":\\"sts:AssumeRole\\",\\"Condition\\":{\\"ArnLike\\":{\\"aws:SourceArn\\":\\"arn:aws:greengrass:region:account-id:*\\"},\\"StringEquals\\":{\\"aws:SourceAccount\\":\\"account-id\\"}}}]}"
      PowerShell
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "greengrass.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:greengrass:region:account-id:*" }, "StringEquals": { "aws:SourceAccount": "account-id" } } } ] }'
    2. 從輸出中的角色中繼資料,複製角色 ARN。您使用 ARN 將角色與您的帳戶相關聯。

    3. AWSGreengrassResourceAccessRolePolicy 政策連接到角色。

      aws iam attach-role-policy --role-name Greengrass_ServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy
    4. 將 Greengrass 服務角色與AWS IoT Greengrass您的. AWS 帳戶 將角色 arn 取代為服務角色的 ARN。

      aws greengrassv2 associate-service-role-to-account --role-arn role-arn

      如果成功,作業會傳回下列回應。

      { "associatedAt": "timestamp" }

設定物AWS IoT件原則

核心裝置使用 X.509 裝置憑證來授權連線。AWS您可以將AWS IoT原則附加至裝置憑證,以定義核心裝置的權限。如需詳細資訊,請參閱 資料平面操作的AWS IoT 政策支援用戶端裝置的最低AWS IoT原則

若要將用戶端裝置連線到核心裝置,核心裝置的AWS IoT策略必須允許下列權限:

在本節中,您可以檢閱核心裝置的AWS IoT原則,並新增任何遺失的必要權限。如果您使用 AWS IoT GreengrassCore 軟體安裝程式佈建資源,您的核心裝置會有允許存取所有AWS IoT Greengrass動作的AWS IoT原則 (greengrass:*)。在此情況下,只有當您計劃部署陰影管理員元件以同步處理裝置陰影時,才必須更新AWS IoT原則AWS IoT Core。否則,您可以跳過此部分。

  1. AWS IoT Greengrass主控台瀏覽功能表中,選擇 [核心裝置]。

  2. 在 [核心裝置] 頁面上,選擇要更新的核心裝置。

  3. 在核心裝置詳細資料頁面上,選擇核心裝置物件的連結。此連結會在AWS IoT主控台中開啟物件詳細資訊頁面。

  4. 在物件詳細資訊頁面上,選擇 [憑證]。

  5. 在「憑證」索引標籤中,選擇物件的使用中憑證。

  6. 在憑證詳細資料頁面上,選擇 [原則]。

  7. 在「略」索引標籤中,選擇要檢閱和更新的AWS IoT策略。您可以將必要的權限新增至任何附加至核心裝置作用中憑證的原則。

    注意

    如果您使用 AWS IoT GreengrassCore 軟體安裝程式佈建資源,則有兩個AWS IoT原則。建議您選擇名為GreengrassV2IoTThingPolicy的策略 (如果存在的話)。依預設,您使用快速安裝程式建立的核心裝置會使用此原則名稱。如果您將權限新增至此原則,也會將這些權限授與使用此原則的其他核心裝置。

  8. 在策略概觀中,選擇編輯作用中的版本

  9. 檢閱所需權限的原則,並新增任何遺失的必要權限。

  10. (選擇性) 若要允許核心裝置與陰影同步處理AWS IoT Core,請將下列陳述式新增至原則。如果您打算與用戶端裝置陰影互動,但不與其同步AWS IoT Core,請略過此步驟。將地區帳戶 ID 替換為您使用的地區和您的AWS 帳戶號碼。

    • 此範例陳述式允許存取所有物件的裝置陰影。若要遵循最佳安全性做法,您可以限制只有核心裝置和連線至核心裝置的用戶端裝置的存取權。如需詳細資訊,請參閱 支援用戶端裝置的最低AWS IoT原則

    { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow" ], "Resource": [ "arn:aws:iot:region:account-id:thing/*" ] }

    在您新增這個陳述式之後,原則文件看起來可能會類似下列範例。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect", "iot:Publish", "iot:Subscribe", "iot:Receive", "greengrass:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow" ], "Resource": [ "arn:aws:iot:region:account-id:thing/*" ] } ] }
  11. 若要將新的原則版本設定為作用中版本,請在 [原則版本狀態] 下選取 [將編輯的版本設定為此原則的作用中版本]。

  12. 選擇「另存為新版本」。

  1. 列出核心裝置物AWS IoT件的主體。物件主參與者可以是 X.509 裝置憑證或其他識別。執行下列命令,並MyGreengrassCore以核心裝置的名稱取代。

    aws iot list-thing-principals --thing-name MyGreengrassCore

    作業會傳回列出核心裝置物件主參與者的回應。

    { "principals": [ "arn:aws:iot:us-west-2:123456789012:cert/certificateId" ] }
  2. 識別核心裝置的作用中憑證。執行下列命令,並將 certific ateId 取代為上一個步驟中每個憑證的 ID,直到找到作用中的憑證為止。憑證 ID 是位於憑證 ARN 結尾的十六進位字串。引--query數指定僅輸出憑證的狀態。

    aws iot describe-certificate --certificate-id certificateId --query 'certificateDescription.status'

    作業會以字串形式傳回憑證狀態。例如,如果憑證處於作用中狀態,則此作業會輸出"ACTIVE"

  3. 列出附加至憑證的AWS IoT原則。執行下列命令,並以憑證的 ARN 取代憑證 ARN。

    aws iot list-principal-policies --principal arn:aws:iot:us-west-2:123456789012:cert/certificateId

    作業會傳回回應,列出附加至憑證的AWS IoT原則。

    { "policies": [ { "policyName": "GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias" }, { "policyName": "GreengrassV2IoTThingPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy" } ] }
  4. 選擇要檢視和更新的原則。

    注意

    如果您使用 AWS IoT GreengrassCore 軟體安裝程式佈建資源,則有兩個AWS IoT原則。建議您選擇名為GreengrassV2IoTThingPolicy的策略 (如果存在的話)。依預設,您使用快速安裝程式建立的核心裝置會使用此原則名稱。如果您將權限新增至此原則,也會將這些權限授與使用此原則的其他核心裝置。

  5. 取得政策的文件。執行下列命令,並以原則的名稱取代 GreenGrassv2IoT ThingPolicy

    aws iot get-policy --policy-name GreengrassV2IoTThingPolicy

    作業會傳回回應,其中包含原則的文件和其他有關原則的資訊。政策文件是序列化為字串的 JSON 物件。

    { "policyName": "GreengrassV2IoTThingPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy", "policyDocument": "{\ \\"Version\\": \\"2012-10-17\\",\ \\"Statement\\": [\ {\ \\"Effect\\": \\"Allow\\",\ \\"Action\\": [\ \\"iot:Connect\\",\ \\"iot:Publish\\",\ \\"iot:Subscribe\\",\ \\"iot:Receive\\",\ \\"greengrass:*\\"\ ],\ \\"Resource\\": \\"*\\"\ }\ ]\ }", "defaultVersionId": "1", "creationDate": "2021-02-05T16:03:14.098000-08:00", "lastModifiedDate": "2021-02-05T16:03:14.098000-08:00", "generationId": "f19144b798534f52c619d44f771a354f1b957dfa2b850625d9f1d0fde530e75f" }
  6. 使用線上轉換器或其他工具將原則文件字串轉換為 JSON 物件,然後將其儲存至名為的檔案iot-policy.json

    例如,如果您已安裝 jq 工具,您可以執行下列命令來取得原則文件、將其轉換為 JSON 物件,並將原則文件儲存為 JSON 物件。

    aws iot get-policy --policy-name GreengrassV2IoTThingPolicy --query 'policyDocument' | jq fromjson >> iot-policy.json
  7. 檢閱所需權限的原則,並新增任何遺失的必要權限。

    例如,在 Linux 系統上,您可以執行下列命令來使用 GNU nano 來開啟檔案。

    nano iot-policy.json
  8. 將變更儲存為策略的新版本。執行下列命令,並以原則的名稱取代 GreenGrassv2IoT ThingPolicy

    aws iot create-policy-version --policy-name GreengrassV2IoTThingPolicy --policy-document file://iot-policy.json --set-as-default

    如果成功,作業會傳回類似下列範例的回應。

    { "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy", "policyDocument": "{\ \\"Version\\": \\"2012-10-17\\",\ \\"Statement\\": [\ {\ \\"Effect\\": \\"Allow\\",\ \\"Action\\": [\ \\t\\t\\"iot:Connect\\",\ \\t\\t\\"iot:Publish\\",\ \\t\\t\\"iot:Subscribe\\",\ \\t\\t\\"iot:Receive\\",\ \\t\\t\\"greengrass:*\\"\ ],\ \\"Resource\\": \\"*\\"\ }\ ]\ }", "policyVersionId": "2", "isDefaultVersion": true }

用於客戶端設備支持的 Greengrass 組件

重要

核心裝置必須執行 Greengrass 核心 v2.2.0 或更新版本,才能支援用戶端裝置。

若要讓用戶端裝置能夠連線並與核心裝置通訊,請將下列 Greengrass 元件部署到核心裝置:

  • 用戶端裝置驗證 (aws.greengrass.clientdevices.Auth)

    部署用戶端裝置驗證元件以驗證用戶端裝置並授權用戶端裝置動作。這個組件允許你的AWS IoT東西連接到一個核心設備。

    此組件需要一些配置才能使用它。您必須指定用戶端裝置群組,以及每個群組獲授權執行的作業,例如透過 MQTT 進行連線和通訊。如需詳細資訊,請參閱用戶端裝置驗證元件組態

  • MQTT 3.1.1 經紀商 (平均) (aws.greengrass.clientdevices.mqtt.Moquette)

    部署 Moquette MQTT 代理程式元件以執行輕量型 MQTT 代理程式。Moquette MQTT 代理程式符合 MQTT 3.1.1 規範,並包含對 QoS 0、QoS 1、QoS 2、保留訊息、最後將訊息和持續訂閱的本機支援。

    您不需要配置此組件即可使用它。不過,您可以設定此元件操作 MQTT 代理程式的連接埠。依預設,它會使用連接埠 8883。

  • MQTT 5 經紀商 (aws.greengrass.clientdevices.mqtt.EMQX)

    注意

    若要使用 EMQX MQTT 5 代理程式,您必須使用 Greengrass 核心 v2.6.0 或更新版本,以及用戶端裝置驗證 v2.2.0 或更新版本。

    部署 EMQX MQTT 代理程式元件,以便在用戶端裝置與核心裝置之間的通訊中使用 MQTT 5.0 功能。EMQX MQTT 代理程式符合 MQTT 5.0 規範,並包含工作階段和訊息到期間隔、使用者屬性、共用訂閱、主題別名等支援。

    您不需要配置此組件即可使用它。不過,您可以設定此元件操作 MQTT 代理程式的連接埠。依預設,它會使用連接埠 8883。

  • MQTT 大橋 (aws.greengrass.clientdevices.mqtt.Bridge)

    (選擇性) 部署 MQTT 橋接器元件,以在用戶端裝置 (本機 MQTT)、本機發佈/訂閱和 MQTT 之間轉送訊息。AWS IoT Core設定此元件,以便與 Greengrass 元件的用戶端裝置同步處理用戶端裝置,AWS IoT Core並與其互動。

    此元件需要組態才能使用。您必須指定此元件轉送訊息的主題對映。如需詳細資訊,請參閱 MQTT 橋接器元件組態

  • IP 偵測器 (aws.greengrass.clientdevices.IPDetector)

    (選擇性) 部署 IP 偵測器元件,以自動向AWS IoT Greengrass雲端服務報告核心裝置的 MQTT 代理程式端點。如果您有複雜的網路設定,例如路由器將 MQTT 代理程式連接埠轉送至核心裝置的網路設定,則無法使用此元件。

    您不需要配置此組件即可使用它。

  • 陰影管理 (aws.greengrass.ShadowManager)

    (選擇性) 部署陰影管理員元件,以管理核心裝置上的用戶端裝置陰影。Greengrass 組件可以獲取,更新和刪除客戶端設備陰影以與客戶端設備進行交互。您也可以設定陰影管理員元件,以同步處理用戶端裝置陰影與AWS IoT Core雲端服務。

    若要將此元件與用戶端裝置陰影搭配使用,您必須設定 MQTT 橋接器元件,以便在用戶端裝置和陰影管理員 (使用本機發佈/訂閱) 之間轉送訊息。否則,此組件不需要配置即可使用,但確實需要配置才能同步設備陰影。

注意

我們建議您只部署一個 MQTT 代理程式元件。MQTT 橋接器和 IP 偵測器元件一次只能搭配一個 MQTT 代理程式元件使用。如果您部署多個 MQTT 代理程式元件,則必須將它們設定為使用不同的連接埠。

設定雲端探索 (主控台)

您可以使用AWS IoT Greengrass主控台來關聯用戶端裝置、管理核心裝置端點,以及部署元件以啟用用戶端裝置支援。如需詳細資訊,請參閱 步驟 2:啟用用戶端裝置支援

設定雲端探索 (AWS CLI)

您可以使用 AWS Command Line Interface (AWS CLI) 來關聯用戶端裝置、管理核心裝置端點,以及部署元件以啟用用戶端裝置支援。如需詳細資訊,請參閱下列內容: