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

AWS IoT Greengrass Version 1 於 2023 年 6 月 30 日進入延長使用壽命階段。如需詳細資訊,請參閱AWS IoT Greengrass V1 維護政策。在此日期之後, AWS IoT Greengrass V1 將不會發行提供功能、增強功能、錯誤修正或安全性修補程式的更新。在上運行的設備 AWS IoT Greengrass V1 不會中斷,並將繼續運行並連接到雲。我們強烈建議您移轉至 AWS IoT Greengrass Version 2,這會增加重要的新功能,並支援其他平台

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

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將組態資訊、Lambda 函數、連接器和受管訂閱部署到核心裝置。

  • 用戶端裝置。客戶端設備(也稱為連接的設備Greengrass 設備或設)是通過 MQTT 連接到 Greengrass 內核的設備。他們使用憑證和原則來連線到AWS IoT Core和AWS IoT Greengrass服務。這可讓用戶端裝置使用AWS IoT Greengrass探索服務尋找並連線至核心裝置。用戶端裝置使用相同的憑證連線至AWS IoT Core裝置閘道和核心裝置。用戶端裝置也會使用探索資訊與核心裝置進行相互驗證。如需詳細資訊,請參閱 裝置連線工作流程使用 Greengrass 核心管理裝置身分驗證

X.509 憑證

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

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

  • Greengrass 核心上的 AWS IoT 用戶端元件透過網際網路連接到 AWS IoT Core 和 AWS IoT Greengrass。

  • 用戶端裝置連線AWS IoT Greengrass至以透過網際網路取得核心探索資訊。

  • Greengrass 核心上的 MQTT 伺服器元件,透過區域網路連線至群組中的用戶端裝置。

AWS IoT Greengrass核心裝置會將憑證儲存在兩個位置:

  • /greengrass-root/certs 中的核心裝置憑證 核心裝置憑證通常命名為 hash.cert.pem (例如, 86c84488a5.cert.pem)。當核心連接到 AWS IoT Core 和 AWS IoT Greengrass 服務時,AWS IoT 用戶端會使用此憑證進行相互驗證。

  • /greengrass-root/ggc/var/state/server 中的 MQTT 伺服器憑證。MQTT 伺服器憑證的名稱為 server.crt。此憑證用於本機 MQTT 伺服器 (位於 Greengrass 核心) 和 Greengrass 裝置之間的相互驗證。

    注意

    greengrass-root 代表 AWS IoT Greengrass 核心軟體在裝置上安裝所在的路徑。通常,這是 /greengrass 目錄。

如需詳細資訊,請參閱 AWS IoT Greengrass 核心安全性主體

憑證授權機構 (CA) 憑證

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

注意

您的根 CA 憑證類型必須與您的端點相符。使用 ATS 根 CA 憑證搭配 ATS 端點 (慣用) 或具有舊版端點的 VeriSign 根 CA 憑證。只有部分 Amazon Web Services 區域支援傳統端點。如需詳細資訊,請參閱 服務端點必須符合根 CA 憑證類型

用戶端裝置也會下 Greengrass 組 CA 憑證。這是在相互驗證期間用來驗證 Greengrass 核心上的 MQTT 伺服器憑證。如需詳細資訊,請參閱 裝置連線工作流程。MQTT 伺服器憑證的預設到期日為七天。

本機 MQTT 伺服器上的憑證輪換

用戶端裝置會使用本機 MQTT 伺服器憑證與 Greengrass 核心裝置進行相互驗證。根據預設,此憑證會在七天後到期。此有限期間是依據安全最佳實務。MQTT 伺服器憑證是由儲存在雲端的群組憑證授權機構憑證簽署的。

若要進行憑證輪替,您的 Greengrass 核心裝置必須處於線上狀態,並且能夠定期直接存取AWS IoT Greengrass服務。憑證過期時,核心裝置會嘗試連線至AWS IoT Greengrass服務以取得新憑證。如果連線成功,核心裝置會下載新的 MQTT 伺服器憑證並重新啟動本機 MQTT 服務。此時,連線至核心的所有用戶端裝置都會中斷連線。如果核心裝置在到期時處於離線狀態,則不會收到替換憑證。任何連接至核心裝置的新嘗試都會遭到拒絕。現有的連線不受影響。在恢復與服務的連接並且可以下載新的 MQTT AWS IoT Greengrass 服務器證書之前,客戶端設備無法連接到核心設備。

您可以根據需求將過期日設為 7 到 30 天。更頻繁的輪換也需要更頻繁的雲端連線。不常輪換可能會造成安全問題。如果您想要將憑證到期時間設定為超過 30 天的值,請聯絡AWS Support。

在AWS IoT主控台中,您可以在群組的 [設定] 頁面上管理憑證。在 AWS IoT Greengrass API 中,您可以使用UpdateGroupCertificateConfiguration動作。

當 MQTT 伺服器憑證過期,驗證憑證都會失敗。用戶端裝置必須能夠偵測到失敗並終止連線。

資料平面操作的AWS IoT 政策

使用 AWS IoT 政策授權對 AWS IoT Core 和 AWS IoT Greengrass 資料平面的存取權。AWS IoT Core 資料平面包含裝置、使用者和應用程式的操作,例如連接到 AWS IoT Core 和訂閱主題。AWS IoT Greengrass 資料平面包含 Greengrass 裝置的操作,例如擷取部署和更新連線資訊。

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

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

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

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

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

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

注意

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

AWS IoT Greengrass 政策動作

Greengrass 核心動作

AWS IoT Greengrass 定義 Greengrass 核心裝置可在 AWS IoT 政策中使用的下列政策動作:

greengrass:AssumeRoleForGroup

允許 Greengrass 核心裝置使用權杖交換服務 (TES) 系統 Lambda 函數擷取認證。繫結到擷取的登入資料的許可是依據已連接到設定的群組角色的政策。

當 Greengrass 核心裝置嘗試擷取登入資料 (假設登入資料未快取在本機) 時,會檢查此許可。

greengrass:CreateCertificate

讓 Greengrass 核心裝置建立自身伺服器憑證的許可。

當 Greengrass 核心裝置建立憑證時,會檢查此許可。Greengrass 核心裝置會在第一次執行、核心的連線資訊有所變更時及指定的輪換期間,嘗試建立伺服器憑證。

greengrass:GetConnectivityInfo

讓 Greengrass 核心裝置擷取自身連線資訊的許可。

當 Greengrass 核心裝置嘗試從 AWS IoT Core 中擷取其連線資訊時,會檢查此許可。

greengrass:GetDeployment

讓 Greengrass 核心裝置擷取部署的許可。

當 Greengrass 核心裝置嘗試從雲端擷取部署和部署狀態時,會檢查此許可。

greengrass:GetDeploymentArtifacts

允許 Greengrass 核心裝置擷取部署成品,例如群組資訊或 Lambda 函數。

當 Greengrass 核心裝置收到部署,然後嘗試擷取部署成品時,會檢查此許可。

greengrass:UpdateConnectivityInfo

讓 Greengrass 核心裝置使用 IP 或主機名稱資訊更新自身連線資訊的許可。

當 Greengrass 核心裝置嘗試在雲端更新其連線資訊時,會檢查此許可。

greengrass:UpdateCoreDeploymentStatus

讓 Greengrass 核心裝置更新部署狀態的許可。

當 Greengrass 核心裝置收到部署,然後嘗試更新部署狀態時,會檢查此許可。

 

Greengrass 裝置動作

AWS IoT Greengrass定義用戶端裝置可在策略中AWS IoT使用的下列策略處理行動:

greengrass:Discover

用戶端裝置可使用探索 API 擷取其群組的核心連線資訊和群組憑證授權單位的權限。

當用戶端裝置呼叫具有 TLS 相互驗證的探索 API 時,會檢查此權限。

AWS IoT Greengrass 核心裝置的最低 AWS IoT 政策

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

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

  • 該政策包含允許 AWS IoT Core 取得、更新和刪除核心裝置陰影的區段。若要允許 Greengrass 群組中的用戶端裝置進行陰影同步,請在Resource清單中指定目標 Amazon 資源名稱 (ARN) (例如)。arn:aws:iot:region:account-id:thing/device-name

  • 不支援在核心裝置的AWS IoT原iot:Connection.Thing.*則中使用物件原則變數 ()。核心使用相同的裝置憑證來建立多個連線,AWS IoT Core但連線中的用戶端 ID 可能與核心物件名稱不完全相符。

  • 針對 greengrass:UpdateCoreDeploymentStatus 許可,Resource ARN 中的最終區段為核心裝置的 URL 編碼 ARN。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:region:account-id:client/core-name-*" ] }, { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/core-name-*" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account-id:topicfilter/$aws/things/core-name-*" ] }, { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow" ], "Resource": [ "arn:aws:iot:region:account-id:thing/core-name-*" ] }, { "Effect": "Allow", "Action": [ "greengrass:AssumeRoleForGroup", "greengrass:CreateCertificate" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "greengrass:GetDeployment" ], "Resource": [ "arn:aws:greengrass:region:account-id:/greengrass/groups/group-id/deployments/*" ] }, { "Effect": "Allow", "Action": [ "greengrass:GetDeploymentArtifacts" ], "Resource": [ "arn:aws:greengrass:region:account-id:/greengrass/groups/group-id/deployments/*" ] }, { "Effect": "Allow", "Action": [ "greengrass:UpdateCoreDeploymentStatus" ], "Resource": [ "arn:aws:greengrass:region:account-id:/greengrass/groups/group-id/deployments/*/cores/arn%3Aaws%3Aiot%3Aregion%3Aaccount-id%3Athing%2Fcore-name" ] }, { "Effect": "Allow", "Action": [ "greengrass:GetConnectivityInfo", "greengrass:UpdateConnectivityInfo" ], "Resource": [ "arn:aws:iot:region:account-id:thing/core-name-*" ] } ] }
注意

AWS IoT用戶端裝置的策略通常需要iot:Connectiot:Publishiot:Receive和中毒處理iot:Subscribe行動類似的權限。

若要允許用戶端裝置自動偵測裝置所屬 Greengrass 群組中核心的連線資訊,用戶端裝置的AWS IoT規則必須包含該處理行動。greengrass:Discover在此Resource區段中,指定用戶端裝置的 ARN,而不是 Greengrass 核心裝置的 ARN。例如:

{ "Effect": "Allow", "Action": [ "greengrass:Discover" ], "Resource": [ "arn:aws:iot:region:account-id:thing/device-name" ] }

用戶端裝置的AWS IoT原則通常不需要、或iot:DeleteThingShadow動作的權限 iot:GetThingShadowiot:UpdateThingShadow,因為 Greengrass 核心會處理用戶端裝置的陰影同步作業。在此情況下,請確定核心AWS IoT原則中陰影動作的Resource區段包含用戶端裝置的 ARN。

 

在AWS IoT主控台中,您可以檢視和編輯附加至核心憑證的原則。

  1. 在功能窗格的 [管理] 下,展開 [所有裝置],然後選擇 [物件]。

  2. 選擇您的核心。

  3. 在核心的組態頁面上,選擇 [憑證] 索引標籤。

  4. 憑證索引標籤中,選擇您的憑證。

  5. 在憑證的組態頁面上,選擇 Policies (政策),然後選擇政策。

    如果您要編輯策略,請選擇 [編輯作用中的版本]。

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

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

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