本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將用戶端裝置連接至核心裝置
您可以設定雲端探索,將用戶端裝置連線至核心裝置。當您設定雲端探索時,用戶端裝置可以連線至 AWS IoT Greengrass 雲端服務,以擷取他們可以連線的核心裝置相關資訊。然後,用戶端裝置可以嘗試連線到每個核心裝置,直到成功連線為止。
若要使用雲端探索,您必須執行下列動作:
-
將用戶端裝置與其可連線的核心裝置建立關聯。
-
指定用戶端裝置可以連線到每個核心裝置的 MQTT 代理程式端點。
-
將元件部署到支援用戶端裝置的核心裝置。
您也可以部署選用元件來執行下列動作:
-
在用戶端裝置、Greengrass 元件和 AWS IoT Core 雲端服務之間轉送訊息。
-
為您自動管理核心裝置 MQTT 代理程式端點。
-
管理本機用戶端裝置影子,並將影子與 AWS IoT Core 雲端服務同步。
-
您也必須檢閱和更新核心裝置 AWS IoT 的政策,以確認其具有連線用戶端裝置所需的許可。如需詳細資訊,請參閱需求。
設定雲端探索之後,您可以測試用戶端裝置與核心裝置之間的通訊。如需詳細資訊,請參閱測試用戶端裝置通訊。
主題
需求
若要將用戶端裝置連接至核心裝置,您必須具有下列項目:
-
核心裝置必須執行 Greengrass 核 v2.2.0 或更新版本。
-
在核心裝置運作 AWS 帳戶 的 AWS 區域中,與 AWS IoT Greengrass 相關聯的 Greengrass 服務角色。如需詳細資訊,請參閱設定 Greengrass 服務角色。
-
核心裝置的 AWS IoT 政策必須允許下列許可:
-
greengrass:PutCertificateAuthorities
-
greengrass:VerifyClientDeviceIdentity
-
greengrass:VerifyClientDeviceIoTCertificateAssociation
-
greengrass:GetConnectivityInfo
-
greengrass:UpdateConnectivityInfo
– (選用) 需要此許可才能使用 IP 偵測器元件,該元件會將核心裝置的網路連線資訊報告給 AWS IoT Greengrass 雲端服務。 -
iot:GetThingShadow
、iot:UpdateThingShadow
和iot:DeleteThingShadow
– (選用) 需要這些許可才能使用影子管理員元件來同步用戶端裝置影子 AWS IoT Core。此功能需要 Greengrass 核 v2.6.0 或更新版本、陰影管理員 v2.2.0 或更新版本,以及 MQTT 橋接器 v2.2.0 或更新版本。
如需詳細資訊,請參閱設定 AWS IoT 物件政策。
注意
如果您在安裝 AWS IoT Greengrass Core 軟體時使用預設 AWS IoT 政策,則核心裝置具有允許存取所有 AWS IoT Greengrass 動作 AWS IoT 的政策 (
greengrass:*
)。 -
-
AWS IoT 可以做為用戶端裝置連線的物件。如需詳細資訊,請參閱《 AWS IoT Core 開發人員指南》中的建立 AWS IoT 資源。
-
用戶端裝置必須使用用戶端 ID 連線。用戶端 ID 是物件名稱。不會接受其他用戶端 ID。
-
每個用戶端裝置的 AWS IoT 政策都必須允許
greengrass:Discover
許可。如需詳細資訊,請參閱用戶端裝置的最低 AWS IoT 政策。
設定 Greengrass 服務角色
Greengrass 服務角色是 AWS Identity and Access Management (IAM) 服務角色,授權 代表您 AWS IoT Greengrass 從 AWS 服務存取資源。此角色可讓 AWS IoT Greengrass 驗證用戶端裝置的身分,並管理核心裝置連線資訊。
如果您先前尚未在此區域中設定 Greengrass 服務角色,則必須在此區域中 AWS IoT Greengrass 為 建立 Greengrass 服務角色與 AWS 帳戶 的關聯。
當您使用AWS IoT Greengrass 主控台
在本節中,您將檢查 Greengrass 服務角色是否已設定。如果未設定,您會在此 AWS 帳戶 區域中為 建立新的 Greengrass AWS IoT Greengrass 服務角色,以與 建立關聯。
-
檢查 Greengrass 服務角色是否 AWS 帳戶 與此區域中 AWS IoT Greengrass 的 相關聯。請執行下列操作:
-
導覽至 AWS IoT 主控台
。 -
在導覽窗格中,選擇設定。
-
在 Greengrass 服務角色區段中,尋找目前的服務角色,以查看 Greengrass 服務角色是否相關聯。
如果您有相關聯的 Greengrass 服務角色,則需符合此要求才能使用 IP 偵測器元件。跳至 設定 AWS IoT 物件政策。
-
-
如果 Greengrass 服務角色與此 AWS 帳戶 區域中 AWS IoT Greengrass 的 沒有關聯,請建立 Greengrass 服務角色並將其關聯。請執行下列操作:
-
導覽至 IAM 主控台
。 -
選擇角色。
-
選擇建立角色。
-
在建立角色頁面上,執行下列動作:
-
在信任的實體類型下,選擇 AWS 服務。
-
在使用案例、其他 的使用案例 AWS 服務下,選擇 Greengrass,選取 Greengrass。此選項指定 將 新增 AWS IoT Greengrass 為可擔任此角色的信任實體。
-
選擇下一步。
-
在許可政策下,選取要AWSGreengrassResourceAccessRolePolicy連接至角色的 。
-
選擇下一步。
-
在角色名稱中,輸入角色的名稱,例如
Greengrass_ServiceRole
。 -
選擇建立角色。
-
-
導覽至 AWS IoT 主控台
。 -
在導覽窗格中,選擇設定。
-
在 Greengrass 服務角色區段中,選擇連接角色。
-
在更新 Greengrass 服務角色模態中,選取您建立的 IAM 角色,然後選擇連接角色。
-
-
檢查 Greengrass 服務角色是否 AWS 帳戶 與此區域中 AWS IoT Greengrass 的 相關聯。
aws greengrassv2 get-service-role-for-account
如果 Greengrass 服務角色相關聯,操作會傳回包含角色相關資訊的回應。
如果您有相關聯的 Greengrass 服務角色,則需符合此要求才能使用 IP 偵測器元件。跳至 設定 AWS IoT 物件政策。
-
如果 Greengrass 服務角色與此 AWS 帳戶 區域中 AWS IoT Greengrass 的 沒有關聯,請建立 Greengrass 服務角色並將其關聯。請執行下列操作:
-
建立具有信任政策的角色, AWS IoT Greengrass 允許 擔任該角色。此範例會建立名為
Greengrass_ServiceRole
的角色,但您可以使用不同的名稱。我們建議您也在信任政策中包含aws:SourceArn
和aws:SourceAccount
全域條件內容金鑰,以協助防止混淆代理人安全問題。條件內容索引鍵會限制存取,只允許來自指定帳戶和 Greengrass 工作區的請求。如需有關混淆代理人問題的詳細資訊,請參閱 預防跨服務混淆代理人。 -
從輸出中的角色中繼資料,複製角色 ARN。您使用 ARN 將角色與您的帳戶相關聯。
-
將
AWSGreengrassResourceAccessRolePolicy
政策連接到角色。aws iam attach-role-policy --role-name Greengrass_ServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy
-
將 Greengrass 服務角色與 AWS IoT Greengrass 建立關聯 AWS 帳戶。將
role-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 政策必須允許下列許可:
-
greengrass:PutCertificateAuthorities
-
greengrass:VerifyClientDeviceIdentity
-
greengrass:VerifyClientDeviceIoTCertificateAssociation
-
greengrass:GetConnectivityInfo
-
greengrass:UpdateConnectivityInfo
– (選用) 需要此許可才能使用 IP 偵測器元件,該元件會將核心裝置的網路連線資訊報告給 AWS IoT Greengrass 雲端服務。 -
iot:GetThingShadow
、iot:UpdateThingShadow
和iot:DeleteThingShadow
– (選用) 需要這些許可才能使用影子管理員元件來同步用戶端裝置影子 AWS IoT Core。此功能需要 Greengrass 核 v2.6.0 或更新版本、陰影管理員 v2.2.0 或更新版本,以及 MQTT 橋接器 v2.2.0 或更新版本。
在本節中,您將檢閱核心裝置 AWS IoT 的政策,並新增任何缺少的必要許可。如果您使用 AWS IoT Greengrass Core 軟體安裝程式佈建資源,您的核心裝置具有允許存取所有 AWS IoT Greengrass 動作 () AWS IoT 的政策greengrass:*
。在此情況下,只有在您計劃部署影子管理員元件以同步裝置影子時,才必須更新 AWS IoT 政策 AWS IoT Core。否則,您可以略過本節。
-
在AWS IoT Greengrass 主控台
導覽功能表中,選擇核心裝置。 -
在核心裝置頁面上,選擇要更新的核心裝置。
-
在核心裝置詳細資訊頁面上,選擇核心裝置物件的連結。此連結會在 主控台中 AWS IoT 開啟物件詳細資訊頁面。
-
在物件詳細資訊頁面上,選擇憑證。
-
在憑證索引標籤中,選擇物件的作用中憑證。
-
在憑證詳細資訊頁面上,選擇政策。
-
在政策索引標籤中,選擇要檢閱和更新 AWS IoT 的政策。您可以將必要的許可新增至連接到核心裝置作用中憑證的任何政策。
注意
如果您使用 AWS IoT Greengrass Core 軟體安裝程式佈建資源,則有兩個 AWS IoT 政策。如果GreengrassV2IoTThingPolicy存在,我們建議您選擇名為 的政策。您使用快速安裝程式建立的核心裝置預設會使用此政策名稱。如果您將許可新增至此政策,您也會將這些許可授予使用此政策的其他核心裝置。
-
在政策概觀中,選擇編輯作用中版本。
-
檢閱必要許可的政策,並新增任何缺少的必要許可。
-
greengrass:PutCertificateAuthorities
-
greengrass:VerifyClientDeviceIdentity
-
greengrass:VerifyClientDeviceIoTCertificateAssociation
-
greengrass:GetConnectivityInfo
-
greengrass:UpdateConnectivityInfo
– (選用) 需要此許可才能使用 IP 偵測器元件,該元件會將核心裝置的網路連線資訊報告給 AWS IoT Greengrass 雲端服務。 -
iot:GetThingShadow
、iot:UpdateThingShadow
和iot:DeleteThingShadow
– (選用) 需要這些許可才能使用影子管理員元件來同步用戶端裝置影子 AWS IoT Core。此功能需要 Greengrass 核 v2.6.0 或更新版本、陰影管理員 v2.2.0 或更新版本,以及 MQTT 橋接器 v2.2.0 或更新版本。
-
-
(選用) 若要允許核心裝置與 同步陰影 AWS IoT Core,請將下列陳述式新增至政策。如果您計劃與用戶端裝置影子互動,但未與之同步 AWS IoT Core,請略過此步驟。將
region
和account-id
取代為您使用的區域和您的 AWS 帳戶 號碼。-
此範例陳述式允許存取所有物件的裝置影子。若要遵循最佳安全實務,您可以限制只能存取您連接至核心裝置的核心裝置和用戶端裝置。如需詳細資訊,請參閱支援用戶端裝置的最低 AWS IoT 政策。
{ "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow" ], "Resource": [ "arn:aws:iot:
region
:account-id
:thing/*" ] }新增此陳述式後,政策文件看起來可能會類似下列範例。
-
-
若要將新的政策版本設定為作用中版本,請在政策版本狀態下,選取將編輯的版本設定為此政策的作用中版本。
-
選擇儲存為新版本。
-
列出核心裝置 AWS IoT 物件的主體。物件主體可以是 X.509 裝置憑證或其他識別符。執行下列命令,並以核心裝置的名稱取代
MyGreengrassCore
。aws iot list-thing-principals --thing-name
MyGreengrassCore
操作會傳回回應,列出核心裝置的物件主體。
{ "principals": [ "arn:aws:iot:us-west-2:123456789012:cert/
certificateId
" ] } -
識別核心裝置的作用中憑證。執行下列命令,並將
certificateId
取代為上一個步驟中每個憑證的 ID,直到您找到作用中憑證為止。憑證 ID 是憑證 ARN 結尾的十六進位字串。--query
引數指定 僅輸出憑證的狀態。aws iot describe-certificate --certificate-id
certificateId
--query 'certificateDescription.status'操作會以字串的形式傳回憑證狀態。例如,如果憑證處於作用中狀態,此操作會輸出
"ACTIVE"
。 -
列出連接到憑證 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" } ] }
-
選擇要檢視和更新的政策。
注意
如果您使用 AWS IoT Greengrass Core 軟體安裝程式佈建資源,則有兩個 AWS IoT 政策。如果GreengrassV2IoTThingPolicy存在,我們建議您選擇名為 的政策。您使用快速安裝程式建立的核心裝置預設會使用此政策名稱。如果您將許可新增至此政策,您也會將這些許可授予使用此政策的其他核心裝置。
-
取得政策的文件。執行下列命令,並以政策的名稱取代
GreengrassV2IoTThingPolicy
。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" }
-
使用線上轉換器或其他工具將政策文件字串轉換為 JSON 物件,然後將其儲存至名為 的檔案
iot-policy.json
。例如,如果您已安裝 jq
工具,您可以執行下列命令來取得政策文件、將其轉換為 JSON 物件,並將政策文件儲存為 JSON 物件。 aws iot get-policy --policy-name
GreengrassV2IoTThingPolicy
--query 'policyDocument' | jq fromjson >> iot-policy.json -
檢閱必要許可的政策,並新增任何缺少的必要許可。
例如,在以 Linux 為基礎的系統上,您可以執行下列命令來使用 GNU nano 來開啟檔案。
nano iot-policy.json
-
greengrass:PutCertificateAuthorities
-
greengrass:VerifyClientDeviceIdentity
-
greengrass:VerifyClientDeviceIoTCertificateAssociation
-
greengrass:GetConnectivityInfo
-
greengrass:UpdateConnectivityInfo
– (選用) 需要此許可才能使用 IP 偵測器元件,該元件會將核心裝置的網路連線資訊報告給 AWS IoT Greengrass 雲端服務。 -
iot:GetThingShadow
、iot:UpdateThingShadow
和iot:DeleteThingShadow
– (選用) 需要這些許可才能使用影子管理員元件來同步用戶端裝置影子 AWS IoT Core。此功能需要 Greengrass 核 v2.6.0 或更新版本、陰影管理員 v2.2.0 或更新版本,以及 MQTT 橋接器 v2.2.0 或更新版本。
-
-
將變更儲存為政策的新版本。執行下列命令,並以政策的名稱取代
GreengrassV2IoTThingPolicy
。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 代理程式 (Moquette) (
aws.greengrass.clientdevices.mqtt.Moquette
)部署 Moquette MQTT 代理程式元件以執行輕量型 MQTT 代理程式。Moquette MQTT 代理程式符合 MQTT 3.1.1,並包含 QoS 0、QoS 1、QoS 2、保留訊息、最後遺囑訊息和持久性訂閱的本機支援。
您不需要設定此元件即可使用它。不過,您可以設定此元件操作 MQTT 代理程式的連接埠。根據預設,它會使用連接埠 8883。
-
MQTT 5 代理程式 (EMQX) (
aws.greengrass.clientdevices.mqtt.EMQX
)注意
若要使用 EMQX MQTT 5 代理程式,您必須使用 Greengrass nucleus 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)、本機發佈/訂閱和 AWS IoT Core MQTT 之間轉送訊息。將此元件設定為從 Greengrass 元件同步用戶端裝置與用戶端裝置 AWS IoT Core ,以及與用戶端裝置互動。
此元件需要使用組態。您必須指定此元件轉送訊息的主題映射。如需詳細資訊,請參閱 MQTT 橋接器元件組態。
-
IP 偵測器 (
aws.greengrass.clientdevices.IPDetector
)(選用) 部署 IP 偵測器元件,以自動向 AWS IoT Greengrass 雲端服務報告核心裝置的 MQTT 代理程式端點。如果您有複雜的網路設定,例如路由器將 MQTT 代理程式連接埠轉送至核心裝置的網路設定,則無法使用此元件。
您不需要設定此元件即可使用它。
-
Shadow 管理員 (
aws.greengrass.ShadowManager
)注意
若要管理用戶端裝置影子,您必須使用 Greengrass 核 v2.6.0 或更新版本、影子管理員 v2.2.0 或更新版本,以及 MQTT 橋接器 v2.2.0 或更新版本。
(選用) 部署影子管理員元件,以管理核心裝置上的用戶端裝置影子。Greengrass 元件可以取得、更新和刪除用戶端裝置陰影,以與用戶端裝置互動。您也可以設定影子管理員元件,將用戶端裝置影子與 AWS IoT Core 雲端服務同步。
若要將此元件與用戶端裝置影子搭配使用,您必須設定 MQTT 橋接器元件,在用戶端裝置與使用本機發佈/訂閱的影子管理員之間轉送訊息。否則,此元件不需要組態即可使用,但需要組態才能同步裝置陰影。
注意
設定雲端探索 (主控台)
您可以使用 AWS IoT Greengrass 主控台來關聯用戶端裝置、管理核心裝置端點,以及部署元件以啟用用戶端裝置支援。如需詳細資訊,請參閱步驟 2:啟用用戶端裝置支援。
設定雲端探索 (AWS CLI)
您可以使用 AWS Command Line Interface (AWS CLI) 來關聯用戶端裝置、管理核心裝置端點,以及部署元件以啟用用戶端裝置支援。如需詳細資訊,請參閱下列內容: