작업 관리
작업을 사용하여 소프트웨어 또는 펌웨어 업데이트를 디바이스에 알립니다. AWS IoT 콘솔
작업에 대한 코드 서명
디바이스에 코드를 전송할 때 디바이스에서 코드가 전송 중 수정되었는지 감지하려면 AWS CLI를 사용하여 코드 파일에 서명하는 것이 좋습니다. 지침은 AWS CLI를 사용하여 작업 생성 및 관리를 참조하세요.
자세한 내용은 Code Signing for AWS IoT란 무엇입니까?를 참조하세요.
작업 문서
작업을 생성하려면 작업 문서를 생성해야 합니다. AWS IoT에 대한 코드 서명을 사용하는 경우 작업 문서를 버전이 지정된 Amazon S3 버킷에 업로드해야 합니다. 파일을 만들고 Amazon S3 버킷을 만들고 이 버킷에 파일을 업로드하는 방법에 대한 자세한 내용은 Amazon S3 시작 안내서의 Amazon Simple Storage Service 시작하기를 참조하세요.
작은 정보
작업 문서 예제는 AWS IoT SDK for JavaScript의 jobs-agent.js
미리 서명된 URL
작업 문서에는 코드 파일(또는 기타 파일)을 가리키는 미리 서명된 Amazon S3 URL을 포함할 수 있습니다. 미리 서명된 Amazon S3 URL은 제한된 시간 동안 유효하므로 디바이스가 작업 문서를 요청할 때 생성되지 않습니다. 미리 서명된 URL은 작업 문서를 만들 때에는 생성되지 않았으므로 작업 문서에는 자리 표시자 URL을 대신 사용합니다. 자리 표시자 URL은 다음과 같습니다.
${aws:iot:s3-presigned-url:https://s3.region.amazonaws.com/
<bucket>
/<code
file>
}
여기서 각 항목은 다음과 같습니다.
-
bucket
은 코드 파일이 들어 있는 Amazon S3 버킷입니다. -
code file
은 코드 파일의 Amazon S3 키입니다.
디바이스가 작업 문서를 요청하면 AWS IoT는 미리 서명된 URL을 생성하고 자리 표시자 URL을 미리 서명된 URL로 대체합니다. 그러면 디바이스로 작업 문서가 전송됩니다.
S3에서 파일을 다운로드할 수 있는 권한을 부여하는 IAM 역할
사전 서명된 Amazon S3 URL을 사용하여 작업을 생성할 경우, IAM 역할을 제공해야 합니다. 역할은 데이터 또는 업데이트가 저장되어 있는 Amazon S3 버킷에서 파일을 다운로드할 수 있는 권한을 부여해야 합니다. 또한 이 역할은 AWS IoT에게 역할을 위임할 수 있는 권한을 부여해야 합니다.
미리 서명된 URL에 제한 시간을 선택적으로 지정할 수도 있습니다. 자세한 내용은 CreateJob을 참조하세요.
AWS IoT 작업에 역할을 맡을 수 있는 권한을 부여합니다.
-
IAM 콘솔의 역할 허브
로 이동하고 역할을 선택합니다. -
신뢰 관계(Trust Relationships) 탭에서 신뢰 관계 편집(Edit Trust Relationship)을 선택하고 정책 문서를 다음 JSON으로 바꿉니다. 신뢰 정책 업데이트를 선택합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "iot.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
-
혼동된 대리자 문제를 방지하기 위하여 전역 조건 컨텍스트 키
aws:SourceArn
및aws:SourceAccount
를 정책에 추가합니다.중요
aws:SourceArn
은arn:aws:iot:
형식을 따라야 합니다.region
:account-id
:*region
이 AWS IoT 리전과 일치하고account-id
가 고객 계정 ID와 일치하는지 확인합니다. 자세한 내용은 교차 서비스 혼동된 대리자 예방을 참조하세요.{ "Effect": "Allow", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "ArnLike": { "aws:SourceArn": "arn:aws:iot:*:123456789012:job/*" } } } ] }
-
해당 작업에서 Amazon S3 객체인 작업 문서를 사용할 경우, 권한 을 선택하고 다음 JSON을 사용합니다. 그러면 Amazon S3 버킷에서 파일을 다운로드할 권한을 부여하는 정책이 추가됩니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::
your_S3_bucket
/*" } ] }
파일 업로드를 위한 미리 서명된 URL
디바이스가 작업 배포 중에 Amazon S3 버킷에 파일을 업로드해야 하는 경우 작업 문서에 다음과 같은 미리 서명된 URL 자리 표시자를 포함할 수 있습니다.
${aws:iot:s3-presigned-url-upload:https://s3.region.amazonaws.com/
<bucket>
/<key>
}
작업 문서에 있는 파일 업로드 자리 표시자 URL의 key
속성 내에서 최대 2개의 ${thingName}
, ${jobId}
, 및 ${executionNumber}
를 예약 키워드로 사용할 수 있습니다. key
속성에서 예약된 키워드를 나타내는 로컬 자리 표시자는 구문 분석되고 작업 실행이 생성될 때 대체됩니다. 각 디바이스에 대해 예약된 키워드가 있는 로컬 자리 표시자를 사용하면 디바이스에서 업로드된 각 파일이 해당 디바이스에 고유하고 동일한 작업 배포의 대상이 되는 다른 디바이스에서 유사한 업로드된 파일로 덮어쓰지 않습니다. 작업 배포 중에 파일을 업로드하기 위해 미리 서명된 URL 자리 표시자 내의 로컬 자리 표시자 문제를 해결하는 방법에 대한 자세한 내용은 오류 메시지 일반 문제 해결 섹션을 참조하세요.
참고
Amazon S3 버킷 이름에는 업로드된 파일에 대해 예약된 키워드를 나타내는 로컬 자리 표시자를 포함할 수 없습니다. 로컬 자리 표시자는 key
속성에 있어야 합니다.
디바이스가 이 미리 서명된 URL 자리 표시자를 수신하면 작업 문서에서 미리 서명된 Amazon S3 업로드 URL로 변환됩니다. 디바이스에서 이를 사용하여 대상 Amazon S3 버킷에 파일을 업로드합니다.
참고
위의 자리 표시자 URL에 Amazon S3 버킷과 키가 제공되지 않은 경우 AWS IoT Jobs는 각 디바이스에 대해 ${thingName}
, ${jobId}
및 ${executionNumber}
의 최대 2개를 사용하여 키를 자동으로 생성합니다.
Amazon S3 버전 관리를 사용하여 미리 서명된 URL
Amazon S3 버킷에 저장된 파일의 무결성을 보호하는 것은 해당 파일을 사용하여 디바이스 플릿에 안전한 작업 배포를 보장하는 데 중요합니다. Amazon S3 버전 관리를 사용하면 Amazon S3 버킷에 저장된 파일의 각 변형에 대한 버전 식별자를 추가하여 파일의 각 버전을 추적할 수 있습니다. 이를 통해 AWS IoT Jobs를 사용하여 디바이스 플릿에 배포되는 파일 버전에 대한 인사이트를 얻을 수 있습니다. Amazon S3 버전 관리에 대한 자세한 내용은 Amazon S3 버킷에서 버전 관리 사용을 참조하세요.
파일이 Amazon S3에 저장되고 작업 문서에 미리 서명된 URL 자리 표시자가 포함된 경우, AWS IoT Jobs는 Amazon S3 버킷, 버킷 키 및 Amazon S3 버킷에 저장된 파일의 버전을 사용하여 작업 문서에 미리 서명된 URL을 생성합니다. 작업 문서에서 생성된 이 미리 서명된 URL은 작업 문서에서 원래 미리 서명된 URL 자리 표시자를 대체합니다. Amazon S3 버킷에 저장된 파일을 업데이트하면 새 버전의 파일 및 후속 versionId
가 생성되어 업데이트에 신호를 보내고 향후 작업 배포에서 해당 특정 파일을 대상으로 지정할 수 있는 기능을 제공합니다.
versionId
를 사용하여 작업 문서에서 미리 서명된 Amazon S3 URL을 보기 전 및 보는 동안 다음 예제를 참조하세요.
Amazon S3 사전 서명된 URL 자리 표시자(작업 배포 전)
//Virtual-hosted style URL ${aws:iot:s3-presigned-url:https://
bucket-name
.s3.region-code
.amazonaws.com/key-name
%3FversionId%3Dversion-id
} //Path-style URL ${aws:iot:s3-presigned-url:https://s3.region-code
.amazonaws.com/bucket-name
/key-name
%3FversionId%3Dversion-id
}
Amazon S3 사전 서명된 URL(작업 배포 중)
//Virtual-hosted style URL ${aws:iot:s3-presigned-url:https://
sample-bucket-name
.s3.us-west-2
.amazonaws.com/sample-code-file.png
%3FversionId%3Dversion1
} //Path-style ${aws:iot:s3-presigned-url:https://s3.us-west-2
.amazonaws.com/sample-bucket-name
/sample-code-file.png
%3FversionId%3Dversion1
}
Amazon S3 가상 호스팅 및 경로 스타일 객체 URLs에 대한 자세한 내용은 가상 호스팅 스타일 요청 및 경로 스타일 요청 섹션을 참조하세요.
참고
Amazon S3 미리 서명된 URL에 versionId
를 추가하려는 경우 AWS SDK for Java 2.x를 지원하는 URL 인코딩을 준수해야 합니다. 자세한 내용은 Changes in parsing Amazon S3 URIs from version 1 to version 2 섹션을 참조하세요.