

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

# JIT 프로비저닝
<a name="jit-provisioning"></a>

디바이스가 JIT 프로비저닝(JITP)을 통해 디바이스가 AWS IoT연결을 처음 시도할 때 디바이스를 프로비저닝할 수 있습니다. 디바이스를 프로비저닝하려면 자동 등록을 활성화하고, 디바이스 인증서에 서명할 때 사용할 CA 인증서와 프로비저닝 템플릿을 연결해야 합니다. 프로비저닝 성공 및 오류는 Amazon CloudWatch에서 [디바이스 프로비저닝 지표](metrics_dimensions.md#provisioning-metrics)로 로그됩니다.

**Topics**
+ [JITP 개요](#jit-provisioning-overview)
+ [프로비저닝 템플릿을 사용하여 CA 등록](#jit-provisioning-registerCA-template)
+ [프로비저닝 템플릿 이름을 사용하여 CA 등록](#jit-provisioning-registerCA-templateName)

## JITP 개요
<a name="jit-provisioning-overview"></a>

디바이스가 등록된 CA 인증서 AWS IoT 로 서명된 인증서를 사용하여에 연결하려고 하면는 CA 인증서에서 템플릿을 AWS IoT 로드하고 이를 사용하여 [RegisterThing](fleet-provision-api.md#register-thing)을 호출합니다. JITP 워크플로는 상태 값이 `PENDING_ACTIVATION`인 인증서부터 먼저 등록합니다. 디바이스 프로비저닝 흐름이 완료되면 인증서 상태가 `ACTIVE`로 바뀝니다.

AWS IoT 는 프로비저닝 템플릿에서 선언하고 참조할 수 있는 다음 파라미터를 정의합니다.
+ `AWS::IoT::Certificate::Country`
+ `AWS::IoT::Certificate::Organization`
+ `AWS::IoT::Certificate::OrganizationalUnit`
+ `AWS::IoT::Certificate::DistinguishedNameQualifier`
+ `AWS::IoT::Certificate::StateName`
+ `AWS::IoT::Certificate::CommonName`
+ `AWS::IoT::Certificate::SerialNumber`
+ `AWS::IoT::Certificate::Id`

위와 같은 프로비저닝 템플릿 파라미터의 값들은 JITP가 프로비저닝할 디바이스의 인증서에서 제목 필드로부터 추출할 수 있는 값으로 제한됩니다. 인증서에는 템플릿 본문의 모든 파라미터에 대한 값이 포함되어야 합니다. `AWS::IoT::Certificate::Id` 파라미터는 인증서에 포함된 ID가 아니라 내부에서 생성된 ID를 참조합니다. AWS IoT 규칙 내의 `principal()` 함수를 사용하여이 ID의 값을 가져올 수 있습니다.

**참고**  
디바이스의 첫 번째 연결에서 전체 신뢰 체인을 전송할 필요 없이 JITP( AWS IoT Core just-in-time Provisioning) 기능을 사용하여 디바이스를 프로비저닝할 수 있습니다 AWS IoT Core. CA 인증서를 제시하는 것은 선택 사항이지만 디바이스가 AWS IoT Core에 연결할 때 [서버 이름 표시(SNI)](https://datatracker.ietf.org/doc/html/rfc3546#section-3.1) 확장을 전송해야 합니다.

### 템플릿 본문 예
<a name="jit-provisioning-example-templatebody"></a>

다음 JSON 파일은 완전한 JITP 템플릿의 템플릿 본문 예입니다.

```
{
   "Parameters":{
      "AWS::IoT::Certificate::CommonName":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::SerialNumber":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::Country":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::Id":{
         "Type":"String"
      }
   },
   "Resources":{
      "thing":{
         "Type":"AWS::IoT::Thing",
         "Properties":{
            "ThingName":{
               "Ref":"AWS::IoT::Certificate::CommonName"
            },
            "AttributePayload":{
               "version":"v1",
               "serialNumber":{
                  "Ref":"AWS::IoT::Certificate::SerialNumber"
               }
            },
            "ThingTypeName":"lightBulb-versionA",
            "ThingGroups":[
               "v1-lightbulbs",
               {
                  "Ref":"AWS::IoT::Certificate::Country"
               }
            ]
         },
         "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:123456789012:topic/foo/bar\"] }] }"
         }
      }
   }
}
```

이 예제 템플릿은 인증서에서 추출되고 `Resources` 섹션에서 사용되는 `AWS::IoT::Certificate::CommonName`, `AWS::IoT::Certificate::SerialNumber`, `AWS::IoT::Certificate::Country` 및 `AWS::IoT::Certificate::Id` 프로비저닝 파라미터의 값을 선언합니다. 그러면 JITP 워크플로우가 이 템플릿을 사용하여 다음 작업을 수행합니다.
+ 인증서를 등록하고 상태를 PENDING\$1ACTIVE로 설정
+ 사물 리소스 하나를 생성
+ 정책 리소스 하나를 생성
+ 정책을 인증서에 연결
+ 인증서를 사물에 연결합니다.
+ 인증서 상태를 ACTIVE로 업데이트

인증서에서 `templateBody`의 `Parameters` 섹션에 언급된 모든 속성이 없으면 디바이스 프로비저닝이 실패합니다. 예를 들어, `AWS::IoT::Certificate::Country`가 템플릿에 포함되어 있지만 인증서에는 `Country` 속성이 없으면 디바이스 프로비저닝이 실패합니다.

또한 CloudTrail을 사용하여 JITP 템플릿과 관련된 문제를 해결할 수도 있습니다. Amazon CloudWatch에 로그된 지표에 대한 자세한 내용은 [디바이스 프로비저닝 지표](metrics_dimensions.md#provisioning-metrics) 단원을 참조하세요. 프로비저닝 템플릿에 대한 자세한 내용은 [프로비저닝 템플릿](provision-template.md)을 참조하세요.

**참고**  
프로비저닝 프로세스 중에 just-in-time 프로비저닝(JITP)은 다른 AWS IoT 컨트롤 플레인 API 작업을 호출합니다. 이러한 호출이 계정에 설정된 [AWS IoT 조절 할당량](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#throttling-limits)을 초과하면 호출이 제한될 수 있습니다. 필요한 경우 제한 할당량을 높이려면 [AWS 고객 지원](https://console.aws.amazon.com/support/home)에 문의하세요.

## 프로비저닝 템플릿을 사용하여 CA 등록
<a name="jit-provisioning-registerCA-template"></a>

전체 프로비저닝 템플릿을 사용하여 CA를 등록하려면 다음 단계를 수행합니다.

1. 프로비저닝 템플릿과 역할 ARN 정보를 다음 예와 같이 JSON 파일로 저장합니다.

   ```
   { 
        "templateBody" : "{\r\n    \"Parameters\" : {\r\n        \"AWS::IoT::Certificate::CommonName\": {\r\n            \"Type\": \"String\"\r\n        },\r\n        \"AWS::IoT::Certificate::SerialNumber\": {\r\n            \"Type\": \"String\"\r\n        },\r\n        \"AWS::IoT::Certificate::Country\": {\r\n            \"Type\": \"String\"\r\n        },\r\n        \"AWS::IoT::Certificate::Id\": {\r\n            \"Type\": \"String\"\r\n        }\r\n    },\r\n    \"Resources\": {\r\n        \"thing\": {\r\n            \"Type\": \"AWS::IoT::Thing\",\r\n            \"Properties\": {\r\n                \"ThingName\": {\r\n                    \"Ref\": \"AWS::IoT::Certificate::CommonName\"\r\n                },\r\n                \"AttributePayload\": {\r\n                    \"version\": \"v1\",\r\n                    \"serialNumber\": {\r\n                        \"Ref\": \"AWS::IoT::Certificate::SerialNumber\"\r\n                    }\r\n                },\r\n                \"ThingTypeName\": \"lightBulb-versionA\",\r\n                \"ThingGroups\": [\r\n                    \"v1-lightbulbs\",\r\n                    {\r\n                        \"Ref\": \"AWS::IoT::Certificate::Country\"\r\n                    }\r\n                ]\r\n            },\r\n            \"OverrideSettings\": {\r\n                \"AttributePayload\": \"MERGE\",\r\n                \"ThingTypeName\": \"REPLACE\",\r\n                \"ThingGroups\": \"DO_NOTHING\"\r\n            }\r\n        },\r\n        \"certificate\": {\r\n            \"Type\": \"AWS::IoT::Certificate\",\r\n            \"Properties\": {\r\n                \"CertificateId\": {\r\n                    \"Ref\": \"AWS::IoT::Certificate::Id\"\r\n                },\r\n                \"Status\": \"ACTIVE\"\r\n            },\r\n            \"OverrideSettings\": {\r\n                \"Status\": \"DO_NOTHING\"\r\n            }\r\n        },\r\n        \"policy\": {\r\n            \"Type\": \"AWS::IoT::Policy\",\r\n            \"Properties\": {\r\n                \"PolicyDocument\": \"{ \\\"Version\\\": \\\"2012-10-17		 	 	 \\\", \\\"Statement\\\": [{ \\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\":[\\\"iot:Publish\\\"], \\\"Resource\\\": [\\\"arn:aws:iot:us-east-1:123456789012:topic\/foo\/bar\\\"] }] }\"\r\n            }\r\n        }\r\n    }\r\n}",
        "roleArn" : "arn:aws:iam::123456789012:role/JITPRole"
   }
   ```

   이 예에서 `templateBody` 필드의 값은 이스케이프된 문자열로 지정된 JSON 객체여야 하며 [이전 목록](#jit-provisioning-overview)에 포함된 값만 사용할 수 있습니다. 다양한 도구를 사용하여 `json.dumps`(Python) 또는 `JSON.stringify`(노드)와 같은 필수 JSON 출력을 생성할 수 있습니다. `roleARN` 필드의 값은 `AWSIoTThingsRegistration`이 연결된 역할의 ARN이어야 합니다. 또한 템플릿이 예제의 인라인 `PolicyDocument` 대신 기존 `PolicyName`을 사용할 수 있습니다.

1. [RegisterCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) API 작업 또는 [https://docs.aws.amazon.com//cli/latest/reference/iot/register-ca-certificate.html](https://docs.aws.amazon.com//cli/latest/reference/iot/register-ca-certificate.html) CLI 명령을 사용하여 CA 인증서를 등록합니다. 이전 단계에서 저장한 프로비저닝 템플릿 및 역할 ARN 정보의 디렉터리를 지정합니다.

   다음은 AWS CLI를 사용하여 `DEFAULT` 모드로 CA 인증서를 등록하는 방법의 예제입니다.

   ```
   aws iot register-ca-certificate --ca-certificate file://your-ca-cert --verification-cert file://your-verification-cert 
                   --set-as-active --allow-auto-registration --registration-config file://your-template
   ```

   다음은 AWS CLI를 사용하여 `SNI_ONLY` 모드로 CA 인증서를 등록하는 방법의 예제입니다.

   ```
   aws iot register-ca-certificate --ca-certificate file://your-ca-cert --certificate-mode SNI_ONLY
                    --set-as-active --allow-auto-registration --registration-config file://your-template
   ```

   자세한 정보는 [CA 인증서 등록](https://docs.aws.amazon.com//iot/latest/developerguide/register-CA-cert.html)을 참조하세요.

1.  (선택 사항) [UpdateCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCACertificate.html) API 작업 또는 [https://docs.aws.amazon.com//cli/latest/reference/iot/update-ca-certificate.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-ca-certificate.html) CLI 명령을 사용하여 CA 인증서 설정을 업데이트합니다.

   다음은 AWS CLI를 사용하여 CA 인증서를 업데이트하는 방법의 예입니다.

   ```
   aws iot update-ca-certificate --certificate-id caCertificateId
                   --new-auto-registration-status ENABLE --registration-config file://your-template
   ```

## 프로비저닝 템플릿 이름을 사용하여 CA 등록
<a name="jit-provisioning-registerCA-templateName"></a>

프로비저닝 템플릿 이름을 사용하여 CA를 등록하려면 다음 단계를 수행합니다.

1. 프로비저닝 템플릿 본문을 JSON 파일로 저장합니다. [템플릿 본문 예](#jit-provisioning-example-templatebody)에서 템플릿 본문 예를 찾을 수 있습니다.

1. 프로비저닝 템플릿을 생성하려면 [CreateProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html) API 또는 [https://docs.aws.amazon.com//cli/latest/reference/iot/create-provisioning-template.html](https://docs.aws.amazon.com//cli/latest/reference/iot/create-provisioning-template.html) CLI 명령을 사용합니다.

   ```
   aws iot create-provisioning-template --template-name your-template-name \
           --template-body file://your-template-body.json --type JITP \
           --provisioning-role-arn arn:aws:iam::123456789012:role/test
   ```
**참고**  
JIT 프로비저닝(JITP)의 경우 프로비저닝 템플릿을 생성할 때 템플릿 유형을 `JITP`로 지정해야 합니다. 템플릿 유형에 대한 자세한 내용은 *AWS API 참조*의 [CreateProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html)을 참조하세요.

1. 템플릿 이름으로 CA를 등록하려면 [RegisterCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) API 또는 [https://docs.aws.amazon.com//cli/latest/reference/iot/register-ca-certificate.html](https://docs.aws.amazon.com//cli/latest/reference/iot/register-ca-certificate.html) CLI 명령을 사용합니다.

   ```
   aws iot register-ca-certificate --ca-certificate file://your-ca-cert --verification-cert file://your-verification-cert \
           --set-as-active --allow-auto-registration --registration-config templateName=your-template-name
   ```