사용자 및 클라우드 서비스가 AWS IoT 작업을 사용하도록 권한 부여 - AWS IoT Core

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

사용자 및 클라우드 서비스가 AWS IoT 작업을 사용하도록 권한 부여

사용자 및 클라우드 서비스에 권한을 부여하려면 제어 영역과 데이터 영역 모두에서 IAM 정책을 사용해야 합니다. 정책은 HTTPS 프로토콜과 함께 사용해야 하며 사용자를 인증하기 위해 AWS 서명 버전 4 인증(포트 443)을 사용해야 합니다.

참고

AWS IoT Core 정책은 제어 영역에서 사용해서는 안 됩니다. 사용자 또는 클라우드 서비스 권한 부여에는 IAM 정책만 사용됩니다. 필수 정책 유형에 대한 자세한 내용은 AWS IoT 작업에 대한 필수 정책 유형 섹션을 참조하세요.

IAM 정책은 정책 문을 포함하는 JSON 문서입니다. 정책 문은 Effect,ActionResource 요소를 사용하여 리소스, 허용되거나 거부되는 작업, 작업이 허용되거나 거부되는 조건을 지정합니다. 자세한 내용은 IAM 사용 설명서IAM JSON 정책 요소 참조를 참조하세요.

주의

IAM 정책 또는 AWS IoT Core 정책에 "Action": ["iot:*"]와 같은 와일드카드 권한을 사용하지 않는 것이 좋습니다. 와일드카드 권한을 사용하는 것은 권장되는 보안 모범 사례가 아닙니다. 자세한 내용은 AWS IoT policies overly permissive를 참조하세요.

제어 영역의 IAM 정책

제어 영역에서 IAM 정책은 작업에 iot: 접두사를 사용하여 해당 작업 API 작업을 승인합니다. 예를 들어, iot:CreateJob 정책 작업은 사용자에게 CreateJob API를 사용할 권한을 부여합니다.

다음 표는 IAM 정책 작업 및 API 작업을 사용할 수 있는 권한을 보여줍니다. 리소스 유형에 대한 자세한 내용은 AWS IoT로 정의된 리소스 유형을 참조하세요. AWS IoT 작업에 대한 자세한 내용은 AWS IoT로 정의된 작업을 참조하세요.

제어 영역에서의 IAM 정책 작업
정책 작업 API 작업 리소스 유형 설명
iot:AssociateTargetsWithJob AssociateTargetsWithJob
  • job

  • thing

  • thinggroup

그룹을 연속 작업에 연결할 수 있는 권한을 나타냅니다. 대상 연결을 요청할 때마다 iot:AssociateTargetsWithJob 권한이 확인됩니다.
iot:CancelJob CancelJob job 작업을 취소할 수 있는 권한을 나타냅니다. 작업 취소를 요청할 때마다 iot:CancelJob 권한이 확인됩니다.
iot:CancelJobExecution CancelJobExecution
  • job

  • thing

작업 실행을 취소할 수 있는 권한을 나타냅니다. 작업 실행 취소를 요청할 때마다 iot: CancelJobExecution 권한이 확인됩니다.
iot:CreateJob CreateJob
  • job

  • thing

  • 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

  • thing

작업 실행을 삭제할 수 있는 권한을 나타냅니다. 작업 실행 삭제를 요청할 때마다 iot: DeleteJobExecution 권한이 확인됩니다.
iot:DescribeJob DescribeJob job 작업을 설명할 수 있는 권한을 나타냅니다. 작업 설명을 요청할 때마다 iot: DescribeJob 권한이 확인됩니다.
iot:DescribeJobExecution DescribeJobExecution
  • job

  • thing

작업 실행을 설명할 수 있는 권한을 나타냅니다. 작업 실행 설명을 요청할 때마다 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 thing 작업에 대한 작업 실행을 나열할 수 있는 권한을 나타냅니다. 사물에 대한 작업 실행 나열을 요청할 때마다 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

  • thing

특정 리소스에 태그를 지정할 수 있는 권한을 부여합니다.
iot:UntagResource UntagResource
  • job

  • jobtemplate

  • thing

특정 리소스의 태그를 해제할 수 있는 권한을 나타냅니다.

다음 예시는 IoT 사물 및 사물 그룹에 대해 다음 작업을 수행할 수 있는 사용자 권한을 허용하는 IAM 정책을 보여줍니다.

이 예에서 다음과 같이 대체합니다.

  • 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 정책의 Condition 요소에서 aws:SourceIp 전역 조건 키를 사용합니다.

이 조건 키를 사용하면 다른 AWS 서비스(예: AWS CloudFormation)가 사용자를 대신하여 이러한 API를 호출하는 것을 거부할 수도 있습니다. 이러한 서비스에 대한 액세스를 허용하려면 aws:SourceIp 키와 함께 aws:ViaAWSService 전역 조건 키를 사용합니다. 이렇게 하면 소스 IP 주소 액세스 제한이 보안 주체가 직접 수행한 요청에만 적용됩니다. 자세한 내용은 AWS: 소스 IP를 바탕으로 AWS에 대한 액세스 거부를 참조하세요.

다음 예제에서는 특정 IP 주소만 컨트롤 플레인 엔드포인트에 대한 API 호출을 수행할 수 있도록 허용하는 방법을 보여줍니다. 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 정책을 사용하는 것이 좋습니다. 데이터 영역에서 디바이스가 작업 실행을 검색하고 실행 상태를 업데이트하도록 권한을 부여하려면 HTTPS 프로토콜에 대한 AWS IoT Core 정책을(를) 사용하세요.

권한을 부여받아야 하는 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 정책의 Condition 요소에서 aws:SourceIp 전역 조건 키를 사용합니다.

이 조건 키를 사용하면 다른 AWS 서비스(예: AWS CloudFormation)가 사용자를 대신하여 이러한 API를 호출하는 것을 거부할 수도 있습니다. 이러한 서비스에 대한 액세스를 허용하려면 aws:SourceIp 조건 키와 함께 aws:ViaAWSService 전역 조건 키를 사용합니다. 이렇게 하면 IP 주소 액세스 제한이 보안 주체가 직접 수행한 요청에만 적용됩니다. 자세한 내용은 AWS: 소스 IP를 바탕으로 AWS에 대한 액세스 거부를 참조하세요.

다음 예제에서는 특정 IP 주소만 데이터 영역 엔드포인트에 대한 API 호출을 수행할 수 있도록 허용하는 방법을 보여줍니다.

{ "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 작업이 포함되지 않은 경우 태그가 있는 CreateJob 또는 CreateJobTemplate의 경우 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/*" ] } }