授權您的裝置在資料平面上安全地使用 AWS IoT 任務 - AWS IoT Core

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

授權您的裝置在資料平面上安全地使用 AWS IoT 任務

若要授權您的裝置與資料平面上的 AWS IoT 任務安全地互動,您必須使用 AWS IoT Core policies. AWS IoT Core policies for job 是包含政策陳述式的 JSON 文件。這些政策也使用效果動作以及資源元素,並遵循與 IAM 政策類似的慣例。如需這些元素的詳細資訊,請參閱《IAM 使用者指南》中的 IAM JSON 政策元素參考

這些政策可以與 MQTT 和 HTTPS 通訊協定搭配使用,並且必須使用 TCP 或 TLS 相互驗證對裝置進行身分驗證。以下介紹如何跨不同的通訊協定使用這些政策。

警告

我們建議您不要使用萬用字元許可,例如"Action": ["iot:*"]在 IAM 政策中 AWS IoT Core 。使用萬用字元許可不是推薦的安全最佳實務。如需詳細資訊,請參閱AWS IoT 過度寬鬆的政策

AWS IoT Core MQTT 通訊協定的 政策

AWS IoT Core MQTT 通訊協定的 政策授予您使用任務裝置 MQTT API 動作的許可。MQTT API 操作用於處理為任務命令保留的 MQTT 主題。如需有關這些 API 操作的詳細資訊,請參閱 任務裝置 MQTT API 操作

MQTT 政策使用政策動作 (例如 iot:Connectiot:Publishiot:Subscribe 以及 iot:Receieve) 以處理任務主題。這些政策可讓您連線至訊息代理程式、訂閱任務 MQTT 主題,以及在您的裝置和雲端之間傳送和接收 MQTT 訊息。如需這些動作的詳細資訊,請參閱《AWS IoT Core 政策動作》。

如需 AWS IoT 任務主題的詳細資訊,請參閱 任務主題

以下範例說明如何使用 iot:Publishiot:Subscribe 發佈和訂閱任務和任務執行。

在該範例中,替換:

  • 區域 AWS 區域,例如 us-east-1

  • account-id 與您的 AWS 帳戶 數字,例如 57EXAMPLE833

  • thing-name換成您目標任務的 IoT 物件名稱,例如 MyIoTThing

JSON
{ "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/events/job/*", "arn:aws:iot:region:account-id:topic/$aws/events/jobExecution/*", "arn:aws:iot:region:account-id:topic/$aws/things/thing-name/jobs/*" ] } ], "Version": "2012-10-17" }

AWS IoT Core HTTPS 通訊協定的 政策

AWS IoT Core 資料平面上的 政策也可以使用 HTTPS 通訊協定搭配 TLS 身分驗證機制來授權您的裝置。資料平面上的政策使用 iotjobsdata: 字首來授權您的裝置可以執行的任務 API 操作。例如 iotjobsdata:DescribeJobExecution 政策動作會授予使用者許可使用 DescribeJobExecution API。

注意

資料平面政策動作必須使用 iotjobsdata: 字首。在控制平面上,動作必須使用 iot: 字首。有關同時使用控制平面和資料平面政策動作時的 IAM 政策範例,請參閱 控制平面和資料平面的 IAM 政策範例

下表顯示授權裝置使用 API 動作 AWS IoT Core 的政策動作和許可清單。如需您可以在資料平面中執行的 API 操作清單,請參閱 任務裝置 HTTP API

注意

任務執行政策動作僅適用於 HTTP TLS 端點。如果您使用 MQTT 端點,必須使用前述所定義的 MQTT 政策動作。

AWS IoT Core 資料平面上的政策動作
政策動作 API 操作 資源類型 描述
iotjobsdata:DescribeJobExecution DescribeJobExecution
  • job

  • 物件

代表可擷取任務執行的許可。每次發出擷取任務執行的要求時,就會檢查一次 iotjobsdata:DescribeJobExecution 許可。
iotjobsdata:GetPendingJobExecutions GetPendingJobExecutions 物件 代表可擷取任務 (對物件來說並非結束狀態) 之清單的許可。每次發出擷取清單的要求時,就會檢查一次 iotjobsdata:GetPendingJobExecutions 許可。
iotjobsdata:StartNextPendingJobExecution StartNextPendingJobExecution 物件 代表可取得並啟動物件之下一個待定任務執行的許可。也就是將任務執行狀態由 QUEUED 更新為 IN_PROGRESS。每次發出啟動下一個待定任務執行的要求時,就會檢查一次 iotjobsdata:StartNextPendingJobExecution 許可。
iotjobsdata:UpdateJobExecution UpdateJobExecution 物件 代表可更新任務執行的許可。每次發出更新任務執行狀態的要求時,就會檢查一次 iotjobsdata:UpdateJobExecution 許可。

以下顯示 AWS IoT Core 政策的範例,該政策授予對任何資源的資料平面 API 操作執行動作的許可。您可以將政策範圍限定為特定資源,例如 IoT 物件。在您的範例中,替換:

  • 區域, AWS 區域 例如 us-east-1

  • account-id 與您的 AWS 帳戶 數字,例如 57EXAMPLE833

  • thing-name 換成 IoT 物件名稱,例如 MyIoTthing

JSON
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "iotjobsdata:GetPendingJobExecutions", "iotjobsdata:StartNextPendingJobExecution", "iotjobsdata:DescribeJobExecution", "iotjobsdata:UpdateJobExecution" ], "Effect": "Allow", "Resource": "arn:aws:iot:region:account-id:thing/thing-name" } ] }

對於必須使用這些政策的時機,一個範例是當 IoT 裝置使用 AWS IoT Core 政策來存取這些 API 操作的其中之一時,例如以下的 DescribeJobExecution API 範例:

GET /things/thingName/jobs/jobId?executionNumber=executionNumber&includeJobDocument=includeJobDocument&namespaceId=namespaceId HTTP/1.1