AWS IoT Greengrass 的裝置身分驗證和授權 - AWS IoT Greengrass

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

AWS IoT Greengrass 的裝置身分驗證和授權

AWS IoT Greengrass 環境中的裝置會使用 X.509 憑證進行身分驗證以及 AWS IoT 政策進行授權。憑證和原則允許裝置彼此、與 AWS IoT Core 和 AWS IoT Greengrass 安全地連線。

X.509 憑證為數位憑證,採用 X.509 公有金鑰基礎架構標準,將公有金鑰與憑證內含的身分建立關聯。X.509 憑證是由稱為憑證授權機構 (CA) 的受信任實體所發行。CA 負責維護一個或多個稱為憑證授權機構憑證的特殊憑證,用以發行 X.509 憑證。僅憑證授權機構可存取憑證授權機構憑證。

AWS IoT 政策會定義允許 AWS IoT 裝置的操作集。具體而言,它們允許和拒絕對 AWS IoT Core 和 AWS IoT Greengrass 資料平面操作的存取,例如發佈 MQTT 訊息和擷取裝置陰影。

所有裝置在 AWS IoT Core 登錄中都需要有個項目,以及一個已連接 AWS IoT 政策且已啟動的 X.509 憑證。裝置可分為兩類:

  • Greengrass 核心器件

    Greengrass 核心裝置會使用憑證和AWS IoT原則來連線到和。AWS IoT Core AWS IoT Greengrass憑證和原則也允許AWS IoT Greengrass將元件和組態部署到核心裝置。

  • 用戶端裝置

    MQTT 用戶端裝置使用憑證和原則來連線AWS IoT Core和服務。AWS IoT Greengrass這可讓用戶端裝置使用AWS IoT Greengrass雲端探索來尋找 Greengrass 核心裝置並連線。用戶端裝置使用相同的憑證來連線至AWS IoT Core雲端服務和核心裝置。用戶端裝置也會使用探索資訊與核心裝置進行相互驗證。如需詳細資訊,請參閱 與本機 IoT 裝置互動

X.509 憑證

核心裝置與用戶端裝置之間以及裝置與AWS IoT Core或之間的通訊AWS IoT Greengrass必須經過驗證。此相互驗證是根據已註冊的 X.509 裝置憑證和加密金鑰。

在 AWS IoT Greengrass 環境中,裝置會針對下列 Transport Layer Security (TLS) 連線使用具有公有和私有金鑰的憑證:

  • Greengrass 核心裝置上連線AWS IoT Core並AWS IoT Greengrass透過網際網路連線的AWS IoT用戶端元件。

  • AWS IoT Greengrass透過網際網路連線以探索核心裝置的用戶端裝置。

  • Greengrass 核心上的 MQTT 代理程式元件,透過區域網路連接至群組中的 Greengrass 裝置。

AWS IoT Greengrass核心裝置會將憑證儲存在 Greengrass 根資料夾中。

憑證授權機構 (CA) 憑證

Greengrass 核心裝置和用戶端裝置會下載用於與服務驗證的根 CA 憑證。AWS IoT Core AWS IoT Greengrass我們建議您使用 Amazon Trust Service (ATS) 根憑證授權機構憑證,例如 Amazon 根 CA 1。如需詳細資訊,請參閱AWS IoT Core開發人員指南中的用於伺服器驗證的 CA 憑證

用戶端裝置也會下載 Greengrass 核心裝置 CA 憑證。他們使用此憑證在相互驗證期間驗證核心裝置上的 MQTT 伺服器憑證。

本機 MQTT 代理程式上的憑證輪替

當您啟用用戶端裝置支援時,Greengrass 核心裝置會產生用於相互驗證的本機 MQTT 伺服器憑證。此憑證由核心裝置 CA 憑證簽署,核心裝置會儲存在AWS IoT Greengrass雲端。用戶端裝置在探索核心裝置時擷取核心裝置 CA 憑證。當核心裝置連線至核心裝置時,他們會使用核心裝置 CA 憑證來驗證核心裝置的 MQTT 伺服器憑證。核心裝置 CA 憑證會在 5 年後到期。

根據預設,MQTT 伺服器憑證每 7 天到期一次,您可以將此持續時間設定為 2 到 10 天。此有限期間是依據安全最佳實務。此輪換有助於降低攻擊者竊取 MQTT 伺服器憑證和私密金鑰來模擬 Greengrass 核心裝置的威脅。

Greengrass 核心裝置會在到期前 24 小時旋轉 MQTT 伺服器憑證。Greengrass 核心裝置會產生新的憑證,並重新啟動本機 MQTT 代理程式。發生這種情況時,連接到 Greengrass 核心裝置的所有用戶端裝置都會中斷連線。用戶端裝置可以在短時間後重新連線到 Greengrass 核心裝置。

資料平面操作的AWS IoT 政策

使用AWS IoT政策授權存取AWS IoT Core和AWS IoT Greengrass資料平面。資AWS IoT Core料平面可為裝置、使用者和應用程式提供作業。這些操作包括連接AWS IoT Core和訂閱主題的功能。資AWS IoT Greengrass料平面提供 Greengrass 裝置的作業。如需詳細資訊,請參閱 AWS IoT Greengrass V2 政策動作。這些作業包括解決元件相依性和下載公用元件加工品的能力。

AWS IoT政策是類似於 IAM 政策的 JSON 文件。它包含一或多個指定下列屬性的政策陳述式:

  • Effect。 存取模式,可以是AllowDeny

  • Action。 策略允許或拒絕的處理行動清單。

  • Resource。 允許或拒絕動作的資源清單。

AWS IoT原則支援*為萬用字元,並將 MQTT 萬用字元 (+#) 視為常值字串。有關*萬用字元的詳細資訊,請參閱使用指南》中的〈在資源 ARN 中使用萬用字元〉。AWS Identity and Access Management

如需詳細資訊,請參閱AWS IoT Core開發人員指南中的AWS IoT政AWS IoT策和政策動作。

重要

核心裝置或 Greengrass 資料平面作業的原AWS IoT則中不支援物件原則變數 (iot:Connection.Thing.*)。相反地,您可以使用萬用字元來比對具有相似名稱的多個裝置。例如,您可以指定MyGreengrassDevice*要相符MyGreengrassDevice1MyGreengrassDevice2、等等。

注意

AWS IoT Core可讓您將AWS IoT原則附加至物件群組,以定義裝置群組的權限。物件群組原則不允許存取 AWS IoT Greengrass 資料平面操作。若要允許物件存取 AWS IoT Greengrass 資料平面操作,請將許可新增至您附加至實物憑證的 AWS IoT 政策。

AWS IoT Greengrass V2 政策動作

AWS IoT Greengrass V2定義 Greengrass 核心裝置和用戶端裝置可在策略中使用的下列策略處理行動。AWS IoT若要指定政策動作的資源,請使用資源的 Amazon 資源名稱 (ARN)。

核心裝置動作
greengrass:GetComponentVersionArtifact

授予取得預先簽署 URL 的權限,以下載公用元件成品或 Lambda 元件成品。

當核心裝置收到指定公用元件或含有成品的 Lambda 的部署時,就會評估此權限。如果核心設備已經具有成品,則不會再次下載成品。

資源類型:componentVersion

資源檔案格式:arn:aws:greengrass:region:account-id:components:component-name:versions:component-version

greengrass:ResolveComponentCandidates

授與識別符合部署元件、版本和平台需求之元件清單的權限。如果需求衝突,或沒有符合需求的元件,則此作業會傳回錯誤,且設備上的部署失敗。

當核心裝置收到指定元件的部署時,會評估此權限。

資源類型:無

資源檔案格式:*

greengrass:GetDeploymentConfiguration

授予取得預先簽署 URL 以下載大型部署文件的權限。

當核心裝置收到指定部署文件大於 7 KB (如果部署以物件為目標) 或 31 KB (如果部署以物件為目標) 的部署時,就會評估此權限。部署文件包括元件組態、部署原則和部署中繼資料。如需詳細資訊,請參閱 將AWS IoT Greengrass元件部署到裝置

此功能適用於 v2.3.0 及更高版 Greeng rass 核組件。

資源類型:無

資源檔案格式:*

greengrass:ListThingGroupsForCoreDevice

授予取得核心裝置物件群組階層的權限。

核心裝置從中接收部署時,會檢查此權限AWS IoT Greengrass。核心裝置會使用此動作來識別自上次部署之後是否已將其從物件群組中移除。如果核心裝置已從物件群組中移除,而該物件群組是核心裝置部署的目標,則核心裝置會移除該部署所安裝的元件。

此功能由 v2.5.0 和更高版本的 Greeng rass 件使用。

資源類型:thing(核心裝置)

資源檔案格式:arn:aws:iot:region:account-id:thing/core-device-thing-name

greengrass:VerifyClientDeviceIdentity

授予驗證連線至核心裝置之用戶端裝置身分識別的權限。

當核心裝置執行用戶端裝置驗證元件並從用戶端裝置接收 MQTT 連線時,會評估此權限。用戶端裝置會顯示其AWS IoT裝置憑證。然後,核心裝置會將裝置憑證傳送至AWS IoT Greengrass雲端服務,以驗證用戶端裝置的身分識別。如需詳細資訊,請參閱 與本機 IoT 裝置互動

資源類型:無

資源檔案格式:*

greengrass:VerifyClientDeviceIoTCertificateAssociation

授與驗證用戶端裝置是否與AWS IoT憑證相關聯的權限。

當核心裝置執行用戶端裝置驗證元件並授權用戶端裝置透過 MQTT 連線時,會評估此權限。如需詳細資訊,請參閱 與本機 IoT 裝置互動

注意

若要讓核心裝置使用此作業,Greengrass 服務角色必須與您的關聯AWS 帳戶並允許權限。iot:DescribeCertificate

資源類型:thing(用戶端裝置)

資源檔案格式:arn:aws:iot:region:account-id:thing/client-device-thing-name

greengrass:PutCertificateAuthorities

授與上傳憑證授權單位 (CA) 憑證的權限,供用戶端裝置下載以驗證核心裝置。

當核心設備安裝並運行客戶端設備身份驗證組件時,將評估此權限。此元件會建立本機憑證授權單位,並使用此作業上傳其 CA 憑證。用戶端裝置會在使用「探索」作業尋找可連線的核心裝置時,下載這些 CA 憑證。當用戶端裝置連線至核心裝置上的 MQTT 代理程式時,會使用這些 CA 憑證來驗證核心裝置的身分識別。如需詳細資訊,請參閱 與本機 IoT 裝置互動

資源類型:無

ARN 格式:*

greengrass:GetConnectivityInfo

授予取得核心裝置連線資訊的權限。此資訊說明用戶端裝置如何連線至核心裝置。

當核心設備安裝並運行客戶端設備身份驗證組件時,將評估此權限。此元件會使用連線資訊來產生有效的 CA 憑證,以便隨PutCertificateAuthories作業一起上傳至AWS IoT Greengrass雲端服務。用戶端裝置會使用這些 CA 憑證來驗證核心裝置的身分。如需詳細資訊,請參閱 與本機 IoT 裝置互動

您也可以在AWS IoT Greengrass控制平面上使用此操作來檢視核心裝置的連線資訊。如需詳細資訊,請參閱 AWS IoT Greengrass V1 API 參考中的 GetConnectivityInfo

資源類型:thing(核心裝置)

資源檔案格式:arn:aws:iot:region:account-id:thing/core-device-thing-name

greengrass:UpdateConnectivityInfo

授予更新核心裝置連線資訊的權限。此資訊說明用戶端裝置如何連線至核心裝置。

核心裝置執行 IP 偵測器元件時,會評估此權限。此元件可識別用戶端裝置連線至區域網路上的核心裝置所需的資訊。然後,此元件會使用此作業將連線資訊上傳至AWS IoT Greengrass雲端服務,以便用戶端裝置可以透過索作業擷取此資訊。如需詳細資訊,請參閱 與本機 IoT 裝置互動

您也可以在AWS IoT Greengrass控制平面上使用此作業,手動更新核心裝置的連線資訊。如需詳細資訊,請參閱 AWS IoT Greengrass V1 API 參考中的 UpdateConnectivityInfo

資源類型:thing(核心裝置)

資源檔案格式:arn:aws:iot:region:account-id:thing/core-device-thing-name

用戶端裝置動作
greengrass:Discover

授予探索用戶端裝置可連線之核心裝置連線資訊的權限。此資訊說明用戶端裝置如何連線至核心裝置。用戶端裝置只能使用此BatchAssociateClientDeviceWithCoreDevice作業探索與其關聯的核心裝置。如需詳細資訊,請參閱 與本機 IoT 裝置互動

資源類型:thing(用戶端裝置)

資源檔案格式:arn:aws:iot:region:account-id:thing/client-device-thing-name

更新核心裝置的AWS IoT政策

您可以使用AWS IoT Greengrass和AWS IoT主控台或 AWS IoT API 來檢視和更新核心裝置的AWS IoT政策。

注意

如果您使用 AWS IoT GreengrassCore 軟體安裝程式佈建資源,您的核心裝置會有允許存取所有AWS IoT Greengrass動作的AWS IoT原則 (greengrass:*)。您可以依照下列步驟,限制只存取核心裝置所使用的動作。

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

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

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

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

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

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

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

    注意

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

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

  9. 檢閱原則,並視需要新增、移除或編輯權限。

  10. 若要將新的原則版本設定為作用中版本,請在 [原則版本狀態] 下選取 [將編輯的版本設定為此原則的作用中版本]。

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

  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

    完成後,原則文件看起來可能類似於核心裝置的最小AWS IoT原則

  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 }

AWS IoT Greengrass V2核心裝置的最低AWS IoT原則

重要

較新版本的 Greengrass 核心元件需要最小原則的額外權限。AWS IoT您可能需要更新核心裝置的政AWS IoT策以授予其他權限。

  • 執行 Greengrass 核心核心 v2.5.0 及更新版本的核心裝置會在您從物件群組移除核心裝置時,使用greengrass:ListThingGroupsForCoreDevice權限解除安裝元件。

  • 執行 Greengrass 核心 v2.3.0 及更新版本的核心裝置會使用此greengrass:GetDeploymentConfiguration權限來支援大型部署設定文件。

以下範例政策包含支援核心裝置基本 Greengrass 功能所需的最少動作組合。

  • Connect原則會在核心裝置物件名稱之後包含*萬用字元 (例如,core-device-thing-name*)。核心裝置使用相同的裝置憑證來建立多個並行訂閱AWS IoT Core,但連線中的用戶端 ID 可能與核心裝置物件名稱不完全相符。在前 50 個訂閱之後,核心裝置會使用core-device-thing-name#number做為用戶端 ID,其中每number增加 50 個訂閱就會增加一次。例如,當名為的核心裝置MyCoreDevice建立 150 個並行訂閱時,它會使用下列用戶端 ID:

    • 訂閱項目 1 至 50:MyCoreDevice

    • 訂閱項目 51 到 100:MyCoreDevice#2

    • 訂閱項目 101 到 150:MyCoreDevice#3

    萬用字元可讓核心裝置在使用這些具有尾碼的用戶端 ID 時進行連線。

  • 政策會列出可供核心裝置發佈訊息、訂閱和接收訊息的 MQTT 主題和主題篩選條件,包括用於陰影狀態的主題。若要支援 Greengrass 元件和用戶端裝置之間AWS IoT Core的訊息交換,請指定您要允許的主題和主題篩選器。如需詳細資訊,請參閱開發人員指南中的AWS IoT Core發佈/訂閱政策範例

  • 此原則會授與發佈至下列遙測資料主題的權限。

    $aws/things/core-device-thing-name/greengrass/health/json

    您可以針對停用遙測的核心裝置移除此權限。如需詳細資訊,請參閱 從AWS IoT Greengrass核心裝置收集系統健康狀態遙測資料

  • 該政策授予透過角色別名假設 IAM 角AWS IoT色的權限。核心裝置會使用這個角色 (稱為 Token Exchange 角色) 來取得可用來驗證AWS要求的AWS認證。如需詳細資訊,請參閱 授權核心裝置與 AWS 服務互動

    當您安裝 AWS IoT Greengrass Core 軟體時,您會建立並附加僅包含此權限的第二個AWS IoT原則。如果您在核心裝置的主要AWS IoT原則中包含此權限,則可以卸離並刪除其他AWS IoT原則。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": "arn:aws:iot:region:account-id:client/core-device-thing-name*" }, { "Effect": "Allow", "Action": [ "iot:Receive", "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/core-device-thing-name/greengrass/health/json", "arn:aws:iot:region:account-id:topic/$aws/things/core-device-thing-name/greengrassv2/health/json", "arn:aws:iot:region:account-id:topic/$aws/things/core-device-thing-name/jobs/*", "arn:aws:iot:region:account-id:topic/$aws/things/core-device-thing-name/shadow/*" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account-id:topicfilter/$aws/things/core-device-thing-name/jobs/*", "arn:aws:iot:region:account-id:topicfilter/$aws/things/core-device-thing-name/shadow/*" ] }, { "Effect": "Allow", "Action": "iot:AssumeRoleWithCertificate", "Resource": "arn:aws:iot:region:account-id:rolealias/token-exchange-role-alias-name" }, { "Effect": "Allow", "Action": [ "greengrass:GetComponentVersionArtifact", "greengrass:ResolveComponentCandidates", "greengrass:GetDeploymentConfiguration", "greengrass:ListThingGroupsForCoreDevice" ], "Resource": "*" } ] }

支援用戶端裝置的最低AWS IoT原則

下列範例原則包含支援核心裝置上用戶端裝置互動所需的最低處理行動集。若要支援用戶端裝置,核心裝置除了基本作業的最小AWS IoT原則之外,還必須具有此AWS IoT原則中的權限。

  • 此原則可讓核心裝置更新自己的連線資訊。僅當您將 IP 偵測器元件部署到核心裝置時,才需要此權限 (greengrass:UpdateConnectivityInfo)。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/core-device-thing-name-gci/shadow/get" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account-id:topicfilter/$aws/things/core-device-thing-name-gci/shadow/update/delta", "arn:aws:iot:region:account-id:topicfilter/$aws/things/core-device-thing-name-gci/shadow/get/accepted" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/core-device-thing-name-gci/shadow/update/delta", "arn:aws:iot:region:account-id:topic/$aws/things/core-device-thing-name-gci/shadow/get/accepted" ] }, { "Effect": "Allow", "Action": [ "greengrass:PutCertificateAuthorities", "greengrass:VerifyClientDeviceIdentity" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "greengrass:VerifyClientDeviceIoTCertificateAssociation" ], "Resource": "arn:aws:iot:region:account-id:thing/*" }, { "Effect": "Allow", "Action": [ "greengrass:GetConnectivityInfo", "greengrass:UpdateConnectivityInfo" ], "Resource": [ "arn:aws:iot:region:account-id:thing/core-device-thing-name" ] } ] }

用戶端裝置的最低AWS IoT原則

下列範例原則包含用戶端裝置探索核心裝置所需的最低處理行動集,以便透過 MQTT 進行連線和通訊。用戶端裝置的AWS IoT策略必須包含該greengrass:Discover處理行動,以允許裝置探索其關聯 Greengrass 核心裝置的連線資訊。在此Resource區段中,指定用戶端裝置的 Amazon 資源名稱 (ARN),而不是 Greengrass 核心裝置的 ARN。

  • 此原則允許所有 MQTT 主題進行通訊。若要遵循最佳安全性做法,請將iot:Publishiot:Subscribe、和iot:Receive權限限制為用戶端裝置對您的使用案例所需的最小主題集合。

  • 該策略允許事物發現所有AWS IoT事情的核心設備。若要遵循最佳安全性做法,請限制對用戶端裝置物AWS IoT件的greengrass:Discover權限,或限制符合一組項目的萬用字元AWS IoT的權限。

    重要

    核心裝置或 Greengrass 資料平面作業的原AWS IoT則中不支援物件原則變數 (iot:Connection.Thing.*)。相反地,您可以使用萬用字元來比對具有相似名稱的多個裝置。例如,您可以指定MyGreengrassDevice*要相符MyGreengrassDevice1MyGreengrassDevice2、等等。

  • 用戶端裝置的AWS IoT原則通常不需要、或iot:DeleteThingShadow動作的權限 iot:GetThingShadowiot:UpdateThingShadow,因為 Greengrass 核心裝置會處理用戶端裝置的陰影同步作業。若要讓核心裝置處理用戶端裝置陰影,請檢查核心裝置的AWS IoT政策是否允許執行這些處理行動,以及Resource區段是否包含用戶端裝置的 ARN。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account-id:topic/*" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account-id:topicfilter/*" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account-id:topic/*" ] }, { "Effect": "Allow", "Action": [ "greengrass:Discover" ], "Resource": [ "arn:aws:iot:region:account-id:thing/*" ] } ] }