AWS IoT Core에서 JITP를 사용하려면 어떻게 해야 합니까?
AWS IoT Core에 사용자 지정 루트 인증 기관(CA)이 등록된 Just-in-Time 프로비저닝(JITP) 환경을 설정하려고 합니다.
간략한 설명
AWS IoT Core를 사용하여 JITP 환경을 설정하려면 먼저 AWS IoT Core에 CA 인증서를 등록하십시오. 이후 ](https://docs.aws.amazon.com/iot/latest/developerguide/jit-provisioning.html#jit-provisioning-registerCA-template)CA에 프로비저닝 템플릿을 연결[하십시오.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
자체 서명된 루트 CA 및 확인 인증서 생성
전제 조건:
OpenSSL을 설치합니다.
자체 서명된 루트 CA 및 확인 인증서를 생성하려면 다음 단계를 따르십시오.
-
디바이스 루트 CA 프라이빗 키를 생성하고 다음 OpenSSL 명령을 실행합니다.
$ openssl genrsa -out deviceRootCA.key 2048
-
VIM 텍스트 편집기를 열고, 사용자 지정 OpenSSL.conf 파일을 생성합니다. VIM 텍스트 편집기에 대한 자세한 내용은 Vim Tips Wiki 웹사이트의 자습서를 참조하십시오.
-
사용자 지정 OpenSSL.conf 파일을 생성하려면 다음 VIM 명령을 실행합니다.
$ vi deviceRootCA_openssl.conf
-
.conf 파일을 편집하려면 키보드에서 i 키를 누릅니다. 이후 다음을 복사하여 파일에 붙여넣습니다.
[ req ] distinguished_name = req_distinguished_name extensions = v3_ca req_extensions = v3_ca [ v3_ca ] basicConstraints = CA:TRUE [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = IN countryName_min = 2 countryName_max = 2 organizationName = Organization Name (e.g., company) organizationName_default = AMZ
-
.conf 파일을 저장하려면 키보드에서 Esc 키를 누른 다음 **:wq!**를 누릅니다. 파일을 종료하려면 Enter 키를 누릅니다.
-
OpenSSL.conf 파일이 생성되었는지 확인하려면 다음 Linux 명령을 실행합니다.
$ cat deviceRootCA_openssl.conf
-
디바이스 루트 CA 인증서 서명 요청(CSR)을 생성합니다. 다음 OpenSSL 명령을 실행합니다.
$ openssl req -new -sha256 -key deviceRootCA.key -nodes -out deviceRootCA.csr -config deviceRootCA_openssl.conf
-
디바이스 루트 CA 인증서를 생성합니다. 다음 OpenSSL 명령을 실행합니다.
$ openssl x509 -req -days 3650 -extfile deviceRootCA_openssl.conf -extensions v3_ca -in deviceRootCA.csr -signkey deviceRootCA.key -out deviceRootCA.pem
-
JITP를 사용하려는 AWS 리전의 등록 코드를 검색합니다. 이후 다음 AWS CLI 명령을 실행합니다.
$ aws iot get-registration-code --region us-east-2
참고: us-east-2를 JITP를 사용하려는 리전으로 바꾸십시오.
-
확인 키를 생성합니다. 다음 OpenSSL 명령을 실행합니다.
$ openssl genrsa -out verificationCert.key 2048
- 확인 인증서 CSR을 생성합니다. 다음 OpenSSL 명령을 실행합니다.
$ openssl req -new -key verificationCert.key -out verificationCert.csr
그런 다음 Common Name(일반 이름) 필드에 등록 코드를 입력합니다. 예를 들면 다음과 같습니다. 일반 이름(서버 FQDN 또는 사용자 이름) []: xxxxxxxx8a33da.
다른 필드는 비워 두십시오.
- 확인 인증서를 생성합니다. 다음 OpenSSL 명령을 실행합니다.
$ openssl x509 -req -in verificationCert.csr -CA deviceRootCA.pem -CAkey deviceRootCA.key -CAcreateserial -out verificationCert.crt -days 500 -sha256
중요: AWS IoT Core에서 확인 인증서를 인증할 때 루트 CA 리전의 등록 코드가 필요합니다.
자세한 내용은 Just-in-Time 프로비저닝을 참조하십시오.
JITP 템플릿 생성
-
AWS IoT Core에 대한 AWS Identity and Access Management(IAM) 역할을 생성합니다. 이름을 JITPRole로 지정합니다. 지침은 로깅 역할 생성을 참조하십시오.
중요: 다음 JITP 템플릿에서 IAM 역할의 Amazon 리소스 이름(ARN)을 포함해야 합니다.
-
VIM 텍스트 편집기를 사용하여 JITP 템플릿 JSON 파일을 생성합니다. 다음 단계를 완료합니다.
-
JITP 템플릿 JSON 파일을 생성합니다. 다음 VIM 명령을 실행합니다.
$ vi jitp_template.json
참고: jitp_template.json이라는 파일 이름으로 템플릿을 저장해야 합니다.
-
JITP 템플릿을 편집하려면 키보드에서 i 키를 누릅니다. 이후 다음 JITP 템플릿을 복사하여 파일에 붙여넣습니다.
{ "templateBody":"{ \"Parameters\" : { \"AWS::IoT::Certificate::CommonName\" : { \"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\", \"country\" : {\"Ref\" : \"AWS::IoT::Certificate::Country\"}} } }, \"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:Connect\\\" ], \\\"Resource\\\": [ \\\"arn:aws:iot:us-east-2:<ACCOUNT_ID>:client\\\/${iot:Connection.Thing.ThingName}\\\" ] }, { \\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [ \\\"iot:Publish\\\", \\\"iot:Receive\\\" ], \\\"Resource\\\": [ \\\"arn:aws:iot:us-east-2:<ACCOUNT_ID>:topic\\\/${iot:Connection.Thing.ThingName}\\\/*\\\" ] }, { \\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [ \\\"iot:Subscribe\\\" ], \\\"Resource\\\": [ \\\"arn:aws:iot:us-east-2:<ACCOUNT_ID>:topicfilter\\\/${iot:Connection.Thing.ThingName}\\\/*\\\" ] } ] }\" } } } }", "roleArn":"arn:aws:iam::<ACCOUNT_ID>:role/JITPRole" }
참고: roleArn 값을 AWS IoT Core 서비스의 IAM 역할 ARN으로 바꾸십시오. 값을 AWS 계정 ID로 바꾸십시오. us-east-2를 자신의 AWS 리전으로 바꾸십시오.
-
JITP 템플릿 파일을 저장하려면 키보드에서 Esc 키를 누르고 **:wq!**를 누릅니다.
-
Enter 키를 눌러 파일을 종료합니다.
참고: 다음 IAM 정책은 예제 JITP 템플릿에 포함되어 있습니다.
정책 링크를 보려면 AWS 계정에 로그인해야 합니다. 자세한 내용은 프로비저닝 템플릿을 참조하십시오.
AWS IoT Core에 자체 서명된 루트 CA 인증서를 등록합니다.
-
디바이스 루트 CA를 AWS IoT Core에 CA 인증서로 등록합니다.
-
다음 register-ca-certificate AWS CLI 명령을 실행합니다.
$ aws iot register-ca-certificate --ca-certificate file://deviceRootCA.pem --verification-cert file://verificationCert.crt --set-as-active --allow-auto-registration --registration-config file://jitp_template.json --region us-east-2
참고: us-east-2를 JITP를 사용하려는 리전으로 바꾸십시오.
참고: --registration-config 파라미터를 사용하여 생성한 JITP 템플릿을 CA 인증서에 연결합니다. CA 인증서의 ARN을 반환하려면 명령 응답을 사용하십시오.
자세한 내용은 CA 인증서 등록을 참조하십시오.
디바이스 인증서 생성 및 JITP 수행
중요: 원래 디바이스 루트 CA 파일을 생성한 디렉터리와 동일한 디렉터리를 사용해야 합니다.
-
RootCA1을 다운로드하고 awsRootCA.pem 파일로 저장합니다.
참고: RootCA1은 AWS IoT Core에 대한 게시 요청의 서버 측 인증에 사용됩니다. 자세한 내용은 서버 인증을 위한 CA 인증서를 참조하십시오.
-
디바이스 프라이빗 키를 생성합니다. 다음 OpenSSL 명령을 실행합니다.
$ openssl genrsa -out deviceCert.key 2048
-
CSR 디바이스를 생성합니다. 다음 OpenSSL 명령을 실행합니다.
$ openssl req -new -key deviceCert.key -out deviceCert.csr
중요: 예제 JITP 템플릿에서는 ThingName 값이 인증서의 CommonName 값과 같아야 합니다. 또한 CountryName 값이 CA 인증서의 Country 값과 같아야 합니다. 예를 들면 다음과 같습니다.
Country Name (two-letter code) []:IN Common Name (e.g. server FQDN or YOUR name) []: DemoThing
이 문서에 제공된 JITP 템플릿은 AWS::IoT::Certificate::Country 인증서 파라미터를 사용하며, 값을 추가해야 합니다. 기타 잠재적 인증서 파라미터는 다음과 같습니다. 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
-
디바이스 인증서를 생성합니다. 다음 OpenSSL 명령을 실행합니다.
$ openssl x509 -req -in deviceCert.csr -CA deviceRootCA.pem -CAkey deviceRootCA.key -CAcreateserial -out deviceCert.crt -days 365 -sha256
-
루트 CA 인증서와 디바이스 인증서를 결합합니다. 다음 명령을 실행합니다.
$ cat deviceCert.crt deviceRootCA.pem > deviceCertAndCACert.crt
-
Eclipse Mosquitto를 사용하여 AWS IoT Core에 테스트 게시 호출을 수행하고 JITP 프로세스를 시작합니다.
참고: 또한 AWS Device SDK를 사용하여 AWS IoT Core에 대한 게시 호출을 수행할 수 있습니다.
Eclipse Mosquitto 테스트 게시 호출 명령 예제
중요: 명령을 실행하기 전에 a27icbrpsxxx-ats.iot.us-east-2.amazonaws.com을 자체 엔드포인트로 바꾸십시오. 자체 엔드포인트를 확인하려면 AWS IoT Core 콘솔을 엽니다. 그럼 다음 **Settings(설정)**를 선택합니다. Custom endpoint(사용자 지정 엔드포인트) 창에 엔드포인트가 표시됩니다.
$ mosquitto_pub --cafile awsRootCA.pem --cert deviceCertAndCACert.crt --key deviceCert.key -h a27icbrpsxxx-ats.iot.us-east-2.amazonaws.com -p 8883 -q 1 -t foo/bar -i anyclientID --tls-version tlsv1.2 -m "Hello" -d
Eclipse Mosquitto 테스트 게시 호출 명령 응답 예제
Client anyclientID sending CONNECT Error: The connection was lost. // The error is expected for the first connect call
참고: 처음에는 테스트 게시 호출이 실패합니다. AWS IoT Core가 테스트 게시 호출을 수신하면 인증서, 정책 및 사물을 생성합니다. 또한 정책을 인증서에 연결하고, 인증서를 사물에 연결합니다. 다음 번에 JITP를 수행할 때는 처음 생성된 AWS IoT Core 정책이 사용됩니다. 새 AWS IoT Core 정책은 생성되지 않습니다.
-
다음을 수행하여 필요한 리소스가 생성되었는지 확인합니다.
AWS IoT Core 콘솔을 엽니다.
**Manage(관리)**를 선택합니다.
**Things(사물)**를 선택합니다.
DemoThing을 선택합니다. -
인증서가 생성되었고 ACTIVE 상태인지 확인합니다. 그런 다음 **Policies(정책)**를 선택하고 IAM 정책이 연결되어 있는지 확인합니다.
일반 작업에 디바이스 인증서 사용
참고: 게시 명령에 추가된 Client ID(클라이언트 ID) 값은 JITP 프로세스 중에 생성된 ThingName과 일치해야 합니다. 게시 명령에 추가된 이름도 주제 이름은 ThingName/* 형식을 따라야 합니다. 다음 게시 호출에서는 deviceCertAndCACert.crt 대신 deviceCert.crt를 사용할 수 있습니다.
-
AWS IoT Core 콘솔을 엽니다.
-
**Test(테스트)**를 선택합니다.
-
**Subscription Topic(구독 주제)**에서 DemoThing/test를 선택합니다.
-
AWS IoT Core에 다음 Eclipse Mosquitto 게시 호출 명령을 실행합니다.
중요: 명령을 실행하기 전에 a27icbrpsxxx-ats.iot.us-east-2.amazonaws.com을 자체 엔드포인트로 바꾸십시오. 자체 엔드포인트를 확인하려면 AWS IoT Core 콘솔을 엽니다. 그럼 다음 **Settings(설정)**를 선택합니다. Custom endpoint(사용자 지정 엔드포인트) 창에 엔드포인트가 표시됩니다. 또한 사용자 지정 루트 CA에서 생성한 사용자 지정 디바이스 인증서를 사용해야 합니다.
$ mosquitto_pub --cafile awsRootCA.pem --cert deviceCert.crt --key deviceCert.key -h a27icbrpsxxx-ats.iot.us-east-2.amazonaws.com -p 8883 -q 1 -t DemoThing/test -i DemoThing --tls-version tlsv1.2 -m "Hello" -d
명령을 실행하면 AWS IoT Core 테스트 콘솔에서 메시지가 수신됩니다.
추가 디바이스 인증서 생성
더 많은 디바이스 인증서를 생성하여 AWS IoT Core에 등록하려면 디바이스 인증서 생성 및 JITP 수행 섹션에서 설명하는 단계를 반복합니다.
기타 JITP 템플릿
인증서의 CommonName 필드에서 ThingName 값을 가져오고 정책에 관리자 권한을 제공하려면 다음 JITP 템플릿을 사용합니다.
{ "templateBody":"{ \"Parameters\" : { \"AWS::IoT::Certificate::CommonName\" : { \"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\", \"country\" : {\"Ref\" : \"AWS::IoT::Certificate::Country\"}} } }, \"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:*\\\",\\\"Resource\\\":\\\"*\\\"}]}\" } } } }", "roleArn":"arn:aws:iam::<ACCOUNT_ID>:role/JITPRole" }
인증서의 CommonName 필드에서 ThingName 값을 가져오고 사전 정의된 정책 이름을 제공하려면 다음 JITP 템플릿을 사용합니다.
{ "templateBody":"{ \"Parameters\" : { \"AWS::IoT::Certificate::CommonName\" : { \"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\", \"country\" : {\"Ref\" : \"AWS::IoT::Certificate::Country\"}} } }, \"certificate\" : { \"Type\" : \"AWS::IoT::Certificate\", \"Properties\" : { \"CertificateId\": {\"Ref\" : \"AWS::IoT::Certificate::Id\"}, \"Status\" : \"ACTIVE\" } }, \"policy\" : {\"Type\" : \"AWS::IoT::Policy\", \"Properties\" : { \"PolicyName\" : \"Policy_Name\"} } } }", "roleArn":"arn:aws:iam::<ACCOUNT_ID>:role/JITPRole" }
중요: Policy_Name을 사용하려는 정책 이름으로 바꾸십시오.
관련 콘텐츠
- 질문됨 7달 전lg...
- 질문됨 9달 전lg...
- 질문됨 2년 전lg...
- AWS 공식업데이트됨 일 년 전
- AWS 공식업데이트됨 3년 전
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 일 년 전