本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
授權使用者和雲端服務使用 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。
政策動作 | API 操作 | 資源類型 | 描述 |
---|---|---|---|
iot:AssociateTargetsWithJob |
AssociateTargetsWithJob |
|
代表將群組與連續任務關聯的許可。每次發出關聯目標的要求時,就會檢查一次 iot:AssociateTargetsWithJob 許可。 |
iot:CancelJob |
CancelJob |
job | 代表取消任務的許可。每次發出取消任務的要求時,就會檢查一次 iot:CancelJob 許可。 |
iot:CancelJobExecution |
CancelJobExecution |
|
代表可取消任務執行的許可。每次發出取消任務執行的要求時,就會檢查一次 iot: CancelJobExecution 許可。 |
iot:CreateJob |
CreateJob |
|
代表建立任務的許可。每次發出建立任務的要求時,就會檢查一次 iot:
CreateJob 許可。 |
iot:CreateJobTemplate |
CreateJobTemplate |
|
代表建立任務範本的許可。每次發出建立任務範本的要求時,就會檢查一次 iot: CreateJobTemplate 許可。 |
iot:DeleteJob |
DeleteJob |
job | 代表刪除任務的許可。每次發出刪除任務的要求時,就會檢查一次 iot:
DeleteJob 許可。 |
iot:DeleteJobTemplate |
DeleteJobTemplate |
jobtemplate | 代表刪除任務範本的許可。每次發出刪除任務範本的要求時,就會檢查一次 iot: CreateJobTemplate 許可。 |
iot:DeleteJobExecution |
DeleteJobTemplate |
|
代表可刪除任務執行的許可。每次發出刪除任務執行的要求時,就會檢查一次 iot: DeleteJobExecution 許可。 |
iot:DescribeJob |
DescribeJob |
job | 代表描述任務的許可。每次發出描述任務的要求時,就會檢查一次 iot:
DescribeJob 許可。 |
iot:DescribeJobExecution |
DescribeJobExecution |
|
代表描述任務執行的許可。每次發出描述任務執行的要求時,就會檢查一次 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 |
|
准許標記指定的資源。 |
iot:UntagResource |
UntagResource |
|
准許取消標記指定的資源。 |
下列範例顯示 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
政策動作授予使用者DescribeJobExecution
API使用 的許可。
警告
為您的裝置設定任務目標 AWS IoT 時,不建議在資料平面上使用IAM政策。我們建議您在控制平面上使用IAM政策,讓使用者建立和管理任務。在資料平面上,若要授權裝置擷取任務執行並更新執行狀態,請使用 AWS IoT Core HTTPS通訊協定的政策。
您必須授權API的操作通常由您輸入CLI命令來執行。以下說明使用者執行 DescribeJobExecution
操作的範例。
在該範例中,替換:
-
region
, AWS 區域例如us-east-1
。 -
account-id
您的 AWS 帳戶 號碼,例如57EXAMPLE833
。 -
thing-name
使用您要鎖定任務的 IoT 物件名稱,例如myRegisteredThing
。 -
是使用 的目標任務的唯一識別符API。job-id
aws iot-jobs-data describe-job-execution \ --endpoint-url "https://
account-id
.jobs.iot.region
.amazonaws.com" \ --job-idjobID
--thing-namething-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:ViaAWSService
有 aws: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:
字首。
例如, DescribeJobExecution
API可以在控制平面和資料平面中使用。在控制平面上, DescribeJobExecution API 用於描述任務執行。在資料平面上, DescribeJobExecution API 用於取得任務執行的詳細資訊。
下列IAM政策授權使用者在控制平面和資料平面DescribeJobExecution
API上使用 的許可。
在該範例中,替換:
-
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/*" ] } }