플릿 프로비저닝을 사용하여 디바이스 인증서가 없는 디바이스 프로비저닝 - AWS IoT Core

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

플릿 프로비저닝을 사용하여 디바이스 인증서가 없는 디바이스 프로비저닝

AWS IoT 플릿 프로비저닝을 사용하면 디바이스를 처음 연결할 때 디바이스 인증서와 프라이빗 키를 생성하여 디바이스에 안전하게 전달할 AWS IoT 수 있습니다. AWS IoT AWS IoT Amazon 루트 인증 기관 (CA) 에서 서명한 클라이언트 인증서를 제공합니다.

플릿 프로비저닝을 사용하는 방법에는 다음 두 가지가 있습니다.

클레임에 의한 프로비저닝

디바이스는 프로비저닝 클레임 인증서 및 프라이빗 키(특수 용도의 자격 증명)가 내장된 상태로 제조될 수 있습니다. 이러한 인증서를 등록하면 서비스에서 이를 디바이스가 일반 작업에 사용할 수 있는 고유한 디바이스 인증서로 교환할 수 있습니다. AWS IoT 이 프로세스는 다음 단계로 이루어집니다.

디바이스를 전달하기 전에
  1. CreateProvisioningTemplate을 호출하여 프로비저닝 템플릿을 생성합니다. 이 API는 템플릿 ARN을 반환합니다. 자세한 설명은 디바이스 프로비저닝 MQTT API 섹션을 참조하세요.

    AWS IoT 콘솔에서 플릿 프로비저닝 템플릿을 생성할 수도 있습니다.

    1. 탐색 창에서 연결(Connect)을 선택한 다음 플릿 프로비저닝 템플릿(Fleet provisioning templates)을 선택합니다.

    2. 템플릿 생성(Create template)을 선택하고 프롬프트의 메시지를 따릅니다.

  2. 프로비저닝 클레임 인증서로 사용할 인증서 및 연결된 프라이빗 키를 생성합니다.

  3. 이러한 인증서를 AWS IoT 등록하고 인증서 사용을 제한하는 IoT 정책을 연결하십시오. 다음 IoT 정책의 예는 이 정책과 연결된 인증서의 사용을 프로비저닝 디바이스로 제한합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["iot:Connect"], "Resource": "*" }, { "Effect": "Allow", "Action": ["iot:Publish","iot:Receive"], "Resource": [ "arn:aws:iot:aws-region:aws-account-id:topic/$aws/certificates/create/*", "arn:aws:iot:aws-region:aws-account-id:topic/$aws/provisioning-templates/templateName/provision/*" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:aws-region:aws-account-id:topicfilter/$aws/certificates/create/*", "arn:aws:iot:aws-region:aws-account-id:topicfilter/$aws/provisioning-templates/templateName/provision/*" ] } ] }
  4. 디바이스를 프로비저닝할 때 계정에서 사물 및 인증서와 같은 IoT 리소스를 만들거나 업데이트할 수 있는 권한을 AWS IoT 서비스에 부여하세요. 서비스 보안 주체를 신뢰하는 IAM 역할 (프로비저닝 역할이라고 함) 에 AWSIoTThingsRegistration 관리형 정책을 연결하면 됩니다. AWS IoT

  5. 프로비저닝 클레임 인증서가 안전하게 내장된 디바이스를 제조합니다.

이제 디바이스를 설치할 위치로 전달할 준비가 되었습니다.

중요

프로비저닝 클레임 프라이빗 키는 디바이스에서는 물론 어디에서든 항상 보안 유지되어야 합니다. AWS IoT CloudWatch 지표와 로그를 사용하여 오용의 징후를 모니터링하는 것이 좋습니다. 오용이 감지되면 프로비저닝 클레임 인증서를 디바이스 프로비저닝에 사용할 수 없도록 비활성화합니다.

사용할 디바이스를 초기화하려면
  1. 장치는 를 사용하여 장치에 설치된 프로비저닝 클레임 인증서에 연결하고 이를 AWS IoT 사용하여 인증합니다. AWS IoT 디바이스 SDK, 모바일 SDK, AWS IoT 디바이스 클라이언트

    참고

    보안을 위해 CreateCertificateFromCsrCreateKeysAndCertificate에 의해 반환된 certificateOwnershipToken은 1시간 후에 만료됩니다. RegisterThingcertificateOwnershipToken이 만료되기 전에 호출되어야 합니다. CreateCertificateFromCsr 또는 CreateKeysAndCertificate에서 생성된 인증서가 활성화되지 않았으며 토큰이 만료될 때까지 정책 또는 사물에 연결되지 않은 경우 인증서가 삭제됩니다. 토큰이 만료되면 디바이스는 CreateCertificateFromCsr 또는 CreateKeysAndCertificate를 다시 호출하여 새 인증서를 생성합니다.

  2. 디바이스는 이러한 옵션 중 하나를 사용하여 영구 인증서와 프라이빗 키를 가져옵니다. 디바이스는 향후 모든 인증에 인증서와 키를 사용합니다 AWS IoT.

    1. CreateKeysAndCertificate를 호출하여 인증 기관을 사용하여 새 인증서와 개인 키를 생성합니다. AWS

      Or

    2. CreateCertificateFromCsr을 호출하여 프라이빗 키를 안전하게 유지하는 인증서 서명 요청에서 인증서를 생성합니다.

  3. 디바이스에서 RegisterThing을 호출하여 디바이스를 AWS IoT 에 등록하고 클라우드 리소스를 생성합니다.

    플릿 프로비저닝 서비스는 프로비저닝 템플릿을 사용하여 IoT 사물과 같은 클라우드 리소스를 정의하고 생성합니다. 템플릿에는 사물이 속한 그룹과 속성이 지정될 수 있습니다. 사물 그룹에 새 사물을 추가하려면 먼저 사물 그룹이 있어야 합니다.

  4. 디바이스에 영구 인증서를 저장한 후 디바이스는 프로비저닝 클레임 인증서로 시작한 세션과의 연결을 끊고 영구 인증서를 사용하여 다시 연결해야 합니다.

이제 기기와 정상적으로 통신할 준비가 되었습니다 AWS IoT.

신뢰할 수 있는 사용자에 의한 프로비저닝

대부분의 경우 최종 사용자나 설치 기술자와 같은 신뢰할 수 있는 사용자가 모바일 앱을 사용하여 배포된 위치에 장치를 구성할 때 장치가 처음으로 연결됩니다. AWS IoT

중요

이 절차를 수행하려면 신뢰할 수 있는 사용자의 액세스 및 권한을 관리해야 합니다. 이를 수행하는 한 가지 방법은 신뢰할 수 있는 사용자를 인증하고 이 절차를 수행하는 데 필요한 AWS IoT 기능 및 API 작업에 대한 액세스 권한을 부여하는 신뢰할 수 있는 사용자에 대한 계정을 제공 및 유지 관리하는 것입니다.

디바이스를 전달하기 전에
  1. CreateProvisioningTemplate을 호출하여 프로비저닝 템플릿을 생성하고 해당 templateArntemplateName을 반환합니다.

  2. 신뢰할 수 있는 사용자가 프로비저닝 프로세스를 시작하는 데 사용하는 IAM 역할을 생성합니다. 프로비저닝 템플릿에서는 해당 사용자만 디바이스를 프로비저닝할 수 있습니다. 예:

    { "Effect": "Allow", "Action": [ "iot:CreateProvisioningClaim" ], "Resource": [ "arn:aws:iot:aws-region:aws-account-id:provisioningtemplate/templateName" ] }
  3. 디바이스를 프로비저닝할 때 계정에 있는 사물 및 인증서와 같은 IoT 리소스를 만들거나 업데이트할 수 있는 권한을 AWS IoT 서비스에 부여하세요. 이를 위해서는 서비스 보안 주체를 신뢰하는 IAM 역할 (프로비저닝 역할이라고 함) 에 AWSIoTThingsRegistration 관리형 정책을 연결하면 됩니다. AWS IoT

  4. 신뢰할 수 있는 사용자를 인증하고 기기 등록에 필요한 AWS API 작업과의 상호 작용을 승인할 수 있는 계정을 제공하는 등 신뢰할 수 있는 사용자를 식별할 수 있는 수단을 제공하십시오.

사용할 디바이스를 초기화하려면
  1. 신뢰할 수 있는 사용자가 프로비저닝 모바일 앱 또는 웹 서비스에 로그인합니다.

  2. 모바일 앱 또는 웹 애플리케이션은 IAM 역할을 사용하고 CreateProvisioningClaim을 호출하여 AWS IoT에서 임시 프로비저닝 클레임 인증서를 가져옵니다.

    참고

    보안을 위해 CreateProvisioningClaim에서 반환한 임시 프로비저닝 클레임 인증서는 5분 후에 만료됩니다. 다음 단계에서는 임시 프로비저닝 클레임 인증서가 만료되기 전에 유효한 인증서를 반환해야 합니다. 임시 프로비저닝 클레임 인증서는 계정의 인증서 목록에 나타나지 않습니다.

  3. 모바일 앱 또는 웹 애플리케이션은 Wi-Fi 자격 증명과 같은 필수 구성 정보와 함께 임시 프로비저닝 클레임 인증서를 디바이스에 제공합니다.

  4. 디바이스는 임시 프로비저닝 클레임 인증서를 사용하여 AWS IoT 디바이스 SDK, 모바일 SDK, AWS IoT 디바이스 클라이언트를 통해 AWS IoT 에 연결합니다.

  5. 장치는 임시 프로비저닝 클레임 인증서에 연결한 후 5분 이내에 이러한 옵션 중 하나를 사용하여 영구 인증서와 개인 키를 얻습니다. AWS IoT 디바이스는 이러한 옵션이 반환하는 인증서와 키를 향후 모든 인증에 사용합니다 AWS IoT.

    1. CreateKeysAndCertificate를 호출하여 인증 기관을 사용하여 새 인증서와 개인 키를 생성합니다. AWS

      Or

    2. CreateCertificateFromCsr을 호출하여 프라이빗 키를 안전하게 유지하는 인증서 서명 요청에서 인증서를 생성합니다.

    참고

    임시 프로비저닝 클레임 인증서에 연결한 후 5분 이내에 유효한 인증서를 CreateCertificateFromCsr반환해야 한다는 AWS IoT 점을 CreateKeysAndCertificate기억하거나 반환해야 합니다.

  6. 디바이스가 RegisterThing호출되어 디바이스를 AWS IoT 등록하고 클라우드 리소스를 생성합니다.

    플릿 프로비저닝 서비스는 프로비저닝 템플릿을 사용하여 IoT 사물과 같은 클라우드 리소스를 정의하고 생성합니다. 템플릿에는 사물이 속한 그룹과 속성이 지정될 수 있습니다. 사물 그룹에 새 사물을 추가하려면 먼저 사물 그룹이 있어야 합니다.

  7. 디바이스에 영구 인증서를 저장한 후 디바이스는 임시 프로비저닝 클레임 인증서로 시작한 세션과의 연결을 끊고 영구 인증서를 사용하여 다시 연결해야 합니다.

이제 기기와 정상적으로 통신할 준비가 되었습니다 AWS IoT.

AWS CLI에서 사전 프로비저닝 후크 사용

다음 절차에서는 사전 프로비저닝 후크를 사용하여 프로비저닝 템플릿을 생성합니다. 여기에 사용된 Lambda 함수는 수정할 수 있는 예제입니다.

사전 프로비저닝 후크를 생성하여 프로비저닝 템플릿에 적용하려면
  1. 정의된 입력 및 출력이 있는 Lambda 함수를 만듭니다. Lambda 함수는 고도로 사용자 정의 가능합니다. 사전 프로비저닝 후크를 생성하려면 allowProvisioningparameterOverrides가 필요합니다. Lambda 함수 생성에 대한 자세한 내용은 명령줄 인터페이스와 함께 AWS Lambda 사용을 참조하십시오 AWS .

    다음은 Lambda 함수 출력의 예제입니다.

    { "allowProvisioning": True, "parameterOverrides": { "incomingKey0": "incomingValue0", "incomingKey1": "incomingValue1" } }
  2. AWS IoT 리소스 기반 정책을 사용하여 Lambda를 호출하므로 Lambda 함수를 호출할 권한을 AWS IoT 부여해야 합니다.

    중요

    권한 조작을 방지하기 위해 Lambda 작업에 연결된 정책의 전역 조건 컨텍스트 키에 source-arn 또는 source-account가 포함되어야 합니다. 자세한 내용은 교차 서비스 혼동된 대리인 방지 단원을 참조하십시오.

    다음은 add-permission을 사용하여 Lambda에 대한 권한을 IoT에 부여하는 예제입니다.

    aws lambda add-permission \ --function-name myLambdaFunction \ --statement-id iot-permission \ --action lambda:InvokeFunction \ --principal iot.amazonaws.com
  3. or 명령 중 하나를 사용하여 템플릿에 사전 프로비저닝 후크를 추가합니다. create-provisioning-templateupdate-provisioning-template

    다음 CLI 예제는 create-provisioning-template를 사용하여 사전 프로비저닝 후크가 있는 프로비저닝 템플릿을 생성합니다.

    aws iot create-provisioning-template \ --template-name myTemplate \ --provisioning-role-arn arn:aws:iam:us-east-1:1234564789012:role/myRole \ --template-body file://template.json \ --pre-provisioning-hook file://hooks.json

    이 명령의 출력은 다음과 같습니다.

    { "templateArn": "arn:aws:iot:us-east-1:1234564789012:provisioningtemplate/myTemplate", "defaultVersionId": 1, "templateName": myTemplate }

    또한 모든 파라미터를 명령줄 파라미터 값으로 입력하는 대신 파일에서 파라미터를 로드하여 시간을 절약할 수 있습니다. 자세한 내용은 파일에서 AWS CLI 파라미터 로드를 참조하세요. 다음은 확장된 JSON 형식의 template 파라미터를 보여줍니다.

    { "Parameters" : { "DeviceLocation": { "Type": "String" } }, "Mappings": { "LocationTable": { "Seattle": { "LocationUrl": "https://example.aws" } } }, "Resources" : { "thing" : { "Type" : "AWS::IoT::Thing", "Properties" : { "AttributePayload" : { "version" : "v1", "serialNumber" : "serialNumber" }, "ThingName" : {"Fn::Join":["",["ThingPrefix_",{"Ref":"SerialNumber"}]]}, "ThingTypeName" : {"Fn::Join":["",["ThingTypePrefix_",{"Ref":"SerialNumber"}]]}, "ThingGroups" : ["widgets", "WA"], "BillingGroup": "BillingGroup" }, "OverrideSettings" : { "AttributePayload" : "MERGE", "ThingTypeName" : "REPLACE", "ThingGroups" : "DO_NOTHING" } }, "certificate" : { "Type" : "AWS::IoT::Certificate", "Properties" : { "CertificateId": {"Ref": "AWS::IoT::Certificate::Id"}, "Status" : "Active" } }, "policy" : { "Type" : "AWS::IoT::Policy", "Properties" : { "PolicyDocument" : { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action":["iot:Publish"], "Resource": ["arn:aws:iot:us-east-1:504350838278:topic/foo/bar"] }] } } } }, "DeviceConfiguration": { "FallbackUrl": "https://www.example.com/test-site", "LocationUrl": { "Fn::FindInMap": ["LocationTable",{"Ref": "DeviceLocation"}, "LocationUrl"]} } }

    다음은 확장된 JSON 형식의 pre-provisioning-hook 파라미터를 보여줍니다.

    { "targetArn" : "arn:aws:lambda:us-east-1:765219403047:function:pre_provisioning_test", "payloadVersion" : "2020-04-01" }