授權使用者和雲端服務使用 AWS IoT 任務 - AWS IoT Core

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

授權使用者和雲端服務使用 AWS IoT 任務

若要授權使用者和雲端服務,您必須在控制平面和資料平面上使用IAM政策。這些政策必須與HTTPS通訊協定搭配使用,且必須使用 AWS Signature 第 4 版身分驗證 (連接埠 443) 來驗證使用者。

注意

AWS IoT Core 政策不得用於控制平面。只有IAM政策會用來授權使用者或雲端服務。如需使用所需政策類型的詳細資訊,請參閱 AWS IoT 任務所需的政策類型

IAM 政策是包含政策陳述式JSON的文件。政策聲明使用效果動作以及資源元素來指定資源、允許或拒絕動作,以及在何種條件下允許或拒絕動作。如需詳細資訊,請參閱 IAM 使用者指南 中的IAMJSON政策元素參考

警告

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

IAM 控制平面上的政策

在控制平面上,IAM政策會使用 iot:字首搭配 動作來授權對應的任務API操作。例如,iot:CreateJob政策動作會授予使用者使用 CreateJob 的許可API。

下表顯示IAM政策動作和使用API動作的許可清單。如需資源類型的資訊,請參閱 定義的資源類型 AWS IoT。如需動作的詳細資訊 AWS IoT ,請參閱 定義的動作 AWS IoT

IAM 控制平面上的政策動作
政策動作 API 操作 資源類型 描述
iot:AssociateTargetsWithJob AssociateTargetsWithJob
  • job

  • 物件

  • thinggroup

代表將群組與連續任務關聯的許可。每次發出關聯目標的要求時,就會檢查一次 iot:AssociateTargetsWithJob 許可。
iot:CancelJob CancelJob job 代表取消任務的許可。每次發出取消任務的要求時,就會檢查一次 iot:CancelJob 許可。
iot:CancelJobExecution CancelJobExecution
  • job

  • 物件

代表可取消任務執行的許可。每次發出取消任務執行的要求時,就會檢查一次 iot: CancelJobExecution 許可。
iot:CreateJob CreateJob
  • job

  • 物件

  • thinggroup

  • jobtemplate

  • package

代表建立任務的許可。每次發出建立任務的要求時,就會檢查一次 iot: CreateJob 許可。
iot:CreateJobTemplate CreateJobTemplate
  • job

  • jobtemplate

  • package

代表建立任務範本的許可。每次發出建立任務範本的要求時,就會檢查一次 iot: CreateJobTemplate 許可。
iot:DeleteJob DeleteJob job 代表刪除任務的許可。每次發出刪除任務的要求時,就會檢查一次 iot: DeleteJob 許可。
iot:DeleteJobTemplate DeleteJobTemplate jobtemplate 代表刪除任務範本的許可。每次發出刪除任務範本的要求時,就會檢查一次 iot: CreateJobTemplate 許可。
iot:DeleteJobExecution DeleteJobTemplate
  • job

  • 物件

代表可刪除任務執行的許可。每次發出刪除任務執行的要求時,就會檢查一次 iot: DeleteJobExecution 許可。
iot:DescribeJob DescribeJob job 代表描述任務的許可。每次發出描述任務的要求時,就會檢查一次 iot: DescribeJob 許可。
iot:DescribeJobExecution DescribeJobExecution
  • job

  • 物件

代表描述任務執行的許可。每次發出描述任務執行的要求時,就會檢查一次 iot: DescribeJobExecution 許可。
iot:DescribeJobTemplate DescribeJobTemplate jobtemplate 代表描述任務範本的許可。每次發出描述任務範本的要求時,就會檢查一次 iot: DescribeJobTemplate 許可。
iot:DescribeManagedJobTemplate DescribeManagedJobTemplate jobtemplate 代表描述受管任務範本的許可。每次發出描述受管任務範本的要求時,就會檢查一次 iot: DescribeManagedJobTemplate 許可。
iot:GetJobDocument GetJobDocument job 代表取得任務之任務文件的許可。每次發出取得任務文件的要求時,就會檢查一次 iot:GetJobDocument 許可。
iot:ListJobExecutionsForJob ListJobExecutionsForJob job 代表列出任務之任務執行的許可。每次發出列出任務之任務執行的要求時,就會檢查一次 iot:ListJobExecutionsForJob 許可。
iot:ListJobExecutionsForThing ListJobExecutionsForThing 物件 代表列出任務之任務執行的許可。每次發出列出物件之任務執行的要求時,就會檢查一次 iot:ListJobExecutionsForThing 許可。
iot:ListJobs ListJobs 代表可列出任務的許可。每次發出列出任務的要求時,就會檢查一次 iot:ListJobs 許可。
iot:ListJobTemplates ListJobTemplates 代表可列出任務範本的許可。每次發出列出任務範本的要求時,就會檢查一次 iot:ListJobTemplates 許可。
iot:ListManagedJobTemplates ListManagedJobTemplates 代表可列出受管任務範本的許可。每次發出列出受管任務範本的要求時,就會檢查一次 iot:ListManagedJobTemplates 許可。
iot:UpdateJob UpdateJob job 代表可更新任務的許可。每次發出更新任務的要求時,就會檢查一次 iot:UpdateJob 許可。
iot:TagResource TagResource
  • job

  • jobtemplate

  • 物件

准許標記指定的資源。
iot:UntagResource UntagResource
  • job

  • jobtemplate

  • 物件

准許取消標記指定的資源。

下列範例顯示 IAM政策,允許使用者許可為您的 IoT 物件和物件群組執行下列動作。

在該範例中,替換:

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

  • account-id 您的 AWS 帳戶 號碼,例如 57EXAMPLE833

  • thing-group-name 包含您要鎖定任務的 IoT 物件群組名稱,例如 FirmwareUpdateGroup

  • thing-name 使用您要鎖定任務的 IoT 物件名稱,例如 MyIoTThing

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "iot:CreateJobTemplate", "iot:CreateJob", ], "Effect": "Allow", "Resource": "arn:aws:iot:region:account-id:thinggroup/thing-group-name" }, { "Action": [ "iot:DescribeJob", "iot:CancelJob", "iot:DeleteJob", ], "Effect": "Allow", "Resource": "arn:aws:iot:region:account-id:job/*" }, { "Action": [ "iot:DescribeJobExecution", "iot:CancelJobExecution", "iot:DeleteJobExecution", ], "Effect": "Allow", "Resource": [ "arn:aws:iot:region:account-id:thing/thing-name" "arn:aws:iot:region:account-id:job/*" ] } ] }

您可以限制主體從特定 IP 地址API呼叫控制平面端點。若要指定可允許的 IP 地址,請在IAM政策的條件元素中使用aws:SourceIp全域條件金鑰。

使用此條件金鑰也可以拒絕代表您進行這些API呼叫存取其他 AWS 服務,例如 AWS CloudFormation。若要允許存取這些服務,請使用aws:ViaAWSService全域條件金鑰搭配 aws:SourceIp key。這可確保來源 IP 地址存取限制僅適用於主體的直接請求。如需詳細資訊,請參閱AWS: AWS 根據來源 IP 拒絕對 的存取

下列範例顯示如何僅允許可API呼叫控制平面端點的特定 IP 地址。aws:ViaAWSService 金鑰設定為 true,允許其他 服務代您API撥打電話。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:CreateJobTemplate", "iot:CreateJob" ], "Resource": ["*"], "Condition": { "IpAddress": { "aws:SourceIp": "123.45.167.89" } }, "Bool": {"aws:ViaAWSService": "true"} } ], }

IAM 資料平面上的政策

IAM 資料平面上的 政策會使用 iotjobsdata: 字首來授權使用者可以執行的任務API操作。在資料平面上,您可以使用iotjobsdata:DescribeJobExecution政策動作授予使用者DescribeJobExecutionAPI使用 的許可。

警告

為您的裝置設定任務目標 AWS IoT 時,不建議在資料平面上使用IAM政策。我們建議您在控制平面上使用IAM政策,讓使用者建立和管理任務。在資料平面上,若要授權裝置擷取任務執行並更新執行狀態,請使用 AWS IoT Core HTTPS通訊協定的政策

您必須授權API的操作通常由您輸入CLI命令來執行。以下說明使用者執行 DescribeJobExecution 操作的範例。

在該範例中,替換:

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

  • account-id 您的 AWS 帳戶 號碼,例如 57EXAMPLE833

  • thing-name 使用您要鎖定任務的 IoT 物件名稱,例如 myRegisteredThing

  • job-id 是使用 的目標任務的唯一識別符API。

aws iot-jobs-data describe-job-execution \ --endpoint-url "https://account-id.jobs.iot.region.amazonaws.com" \ --job-id jobID --thing-name thing-name

以下顯示授權此動作的範例IAM政策:

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

您可以限制主體從特定 IP 地址API呼叫資料平面端點。若要指定可允許的 IP 地址,請在IAM政策的條件元素中使用aws:SourceIp全域條件索引鍵。

使用此條件金鑰也可以拒絕代表您進行這些API呼叫存取其他 AWS 服務,例如 AWS CloudFormation。若要允許存取這些服務,請使用 aws:ViaAWSServiceaws:SourceIp 條件金鑰的全域條件金鑰。這可確保 IP 地址存取限制僅適用於主體直接發出的要求。如需詳細資訊,請參閱AWS: AWS 根據來源 IP 拒絕對 的存取

下列範例顯示如何僅允許可API呼叫資料平面端點的特定 IP 地址。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["iotjobsdata:*"], "Resource": ["*"], "Condition": { "IpAddress": { "aws:SourceIp": "123.45.167.89" } }, "Bool": {"aws:ViaAWSService": "false"} } ], }

下列範例顯示如何限制特定 IP 地址或地址範圍,從API呼叫資料平面端點。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": ["iotjobsdata:*"], "Condition": { "IpAddress": { "aws:SourceIp": [ "123.45.167.89", "192.0.2.0/24", "203.0.113.0/24" ] } }, "Resource": ["*"], } ], }

如果您在控制平面和資料平面上執行 API操作,控制平面政策動作必須使用 iot: 字首,而資料平面政策動作必須使用 iotjobsdata:字首。

例如, DescribeJobExecutionAPI可以在控制平面和資料平面中使用。在控制平面上, DescribeJobExecution API 用於描述任務執行。在資料平面上, DescribeJobExecution API 用於取得任務執行的詳細資訊。

下列IAM政策授權使用者在控制平面和資料平面DescribeJobExecutionAPI上使用 的許可。

在該範例中,替換:

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

  • account-id 您的 AWS 帳戶 號碼,例如 57EXAMPLE833

  • thing-name 使用您要鎖定任務的 IoT 物件名稱,例如 MyIoTThing

{ "Version": "2012-10-17", "Statement": [ { "Action": ["iotjobsdata:DescribeJobExecution"], "Effect": "Allow", "Resource": "arn:aws:iot:region:account-id:thing/thing-name" }, { "Action": [ "iot:DescribeJobExecution", "iot:CancelJobExecution", "iot:DeleteJobExecution", ], "Effect": "Allow", "Resource": [ "arn:aws:iot:region:account-id:thing/thing-name" "arn:aws:iot:region:account-id:job/*" ] } ] }

授權對 IoT 資源進行標記

為了更妥善控制您可以建立、修改或使用的任務和任務範本,您可以將標籤連接到任務或任務範本。標籤也可以幫助您識別所有權,並將其放在計費群組中並附加標籤來指派和分配成本。

當使用者想要標記其使用 或 建立的任務 AWS Management Console 或任務範本時 AWS CLI,您的IAM政策必須授予使用者許可來標記它們。若要授予許可,您的IAM政策必須使用 iot:TagResource動作。

注意

如果您的IAM政策不包含 iot:TagResource動作,則具有 標籤的任何 CreateJobTemplate CreateJob或 都會傳回AccessDeniedException錯誤。

當您想要標記使用 或 建立的任務 AWS Management Console 或任務範本時 AWS CLI,您的IAM政策必須授予許可來標記它們。若要授予許可,您的IAM政策必須使用 iot:TagResource動作。

如需標記資源的相關資訊,請參閱 標記您的 AWS IoT 資源

請參閱下列授予標記許可IAM的政策範例:

範例 1

執行下列命令以建立任務並標記特定環境的使用者。

在此範例中,取代:

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

  • account-id 您的 AWS 帳戶 號碼,例如 57EXAMPLE833

  • thing-name 使用您要鎖定任務的 IoT 物件名稱,例如 MyIoTThing

aws iot create-job --job-id test_job --targets "arn:aws:iot:region:account-id:thing/thingOne" --document-source "https://s3.amazonaws.com/amzn-s3-demo-bucket/job-document.json" --description "test job description" --tags Key=environment,Value=beta

在此範例中,您必須使用下列IAM政策:

{ "Version": "2012-10-17", "Statement": { "Action": [ "iot:CreateJob", "iot:CreateJobTemplate", "iot:TagResource" ], "Effect": "Allow", "Resource": [ "arn:aws:iot:aws-region:account-id:job/*", "arn:aws:iot:aws-region:account-id:jobtemplate/*" ] } }