AWS IoT 엔드포인트에서 자체 도메인 사용
us-east-1
에서만 시도할 수 있습니다.언제 필요?
기본적으로이 슬라이드의 흐름을 따라 실현합니다.
htps // d1. 아 wss c. 코 m / 에ぇ ぇ ts / 레이 ゔ ぇ t / 2019 / ぺぺ T_1_ 이오 T341-R1. pdf
ACM에서 인증서 취득
설정하려는 도메인 여기서는 iot.oxoxo.me에 대한 인증서를 검색합니다.
aws acm request-certificate \
--domain-name iot.oxoxo.me \
--validation-method DNS \
--idempotency-token 1234 \
--subject-alternative-names iot.oxoxo.me \
--options CertificateTransparencyLoggingPreference=ENABLED
{
"CertificateArn": "arn:aws:acm:us-east-1:<account-id>:certificate/92a2a701-ad12-4a2f-ab0a-b378721126e8"
}
AWS IoT의 도메인 설정
aws iot create-domain-configuration \
--domain-configuration-name "myDomainConfigurationName" \
--service-type "DATA" \
--domain-name "iot.oxoxo.me" \
--server-certificate-arns arn:aws:acm:us-east-1:<account-id>:certificate/92a2a701-ad12-4a2f-ab0a-b378721126e8 \
--region us-east-1
{
"domainConfigurationName": "myDomainConfigurationName",
"domainConfigurationArn": "arn:aws:iot:us-east-1:<account-id>:domainconfiguration/myDomainConfigurationName/t9tri"
}
aws iot describe-endpoint --endpoint-type iot:Data-Beta --region us-east-1
{
"endpointAddress": "<random-id>-beta.iot.us-east-1.amazonaws.com"
}
CNAME 설정
위에 표시된 엔드포인트를 향하는 CNAME을 만듭니다.
자신의 환경에서는 DNS에 Route53을 사용하고 있으므로 다음과 같은 형태가 됩니다.
test
이상으로 설정 완료입니다.
클라이언트 측을 만들어 시험해 갑니다. 이 기사 로 만든 환경을 유용합니다.
실행할 때 자신의 끝점을 설정합니다.
export ENDPOINT=iot.oxoxo.me
이상입니다.
참고로 v1의 SDK에서 시도하면 다음과 같은 오류가 발생했습니다.
ssl.SSLError: ('Certificate subject does not match remote hostname.',)
원인이 쫓지 않지만 내부적으로 443/ALPN을 사용한다고 전제입니까?
Python 코드에서 Endpoint 포트를 443으로 변경하면 (WebSocket 사용) 피할 수 있습니다.
(추가) 클라이언트 인증서가없는 MQTT 통신을 사용자 정의 작성자로 시도
매우 힘없는 IoT 장치는 TLS 핸드 셰이크를 수행하는 사양을 가지고 있지 않을 수 있습니다. 반면에 클라이언트 인증서를 사용하지 않고도 관리형 MQTT 브로커로 AWS IoT를 사용하려는 경우도 있을 수 있습니다.
그렇다고 해서, 커스텀 오서라이저 기능으로 그것을 실현해 봅니다. ID, 패스워드의 인증도 있습니다만, 여기에서는 뒤떨어져 인증 없이 챌린지합니다.
시큐리티적으로는 전혀 추천 할 수 없습니다만, 데모등이라면 증명서 관리가 불필요하고 편리할지도 모릅니다.
사용자 지정 제작자 기능은 지정된 Lambda에서 인증을 수행합니다.
아래에서 Lambda를 작성했지만 깨끗하게 모든 것을 통과하려고합니다.
IoTCustomAuthorizer
import json
def lambda_handler(event, context):
ret = {
"isAuthenticated": True,
"principalId": "anonymous",
"disconnectAfterInSeconds": 86400,
"refreshAfterInSeconds": 300,
"policyDocuments": [
"{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"iot:*\",\"Effect\":\"Allow\",\"Resource\":\"*\"}]}"
],
"context": {
}
}
return ret
아래에서 제작자를 만듭니다.
aws iot create-authorizer --authorizer-name test --authorizer-function-arn arn:aws:lambda:us-east-1:<account-id>:function:IoTCustomAuthorizer --signing-disabled --status ACTIVE --region us-east-1
{
"authorizerName": "test",
"authorizerArn": "arn:aws:iot:us-east-1:<account-id>:authorizer/test"
}
그런 다음 AWS IoT 서비스에 Lambda를 두드리는 권한을 부여합니다.
aws lambda add-permission --function-name IoTCustomAuthorizer \
--principal iot.amazonaws.com \
--source-arn arn:aws:iot:us-east-1:<account-id>:authorizer/test \
--statement-id Id-123 \
--action "lambda:InvokeFunction" \
--region us-east-1
{
"Statement": "{\"Sid\":\"Id-123\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"iot.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-1:<account-id>:function:IoTCustomAuthorizer\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:iot:us-east-1:<account-id>:authorizer/test\"}}}"
}
#AuthorizerをDomain Configurationに紐付ける
aws iot update-domain-configuration --domain-configuration-name myDomainConfigurationName --region us-east-1 --authorizer-config defaultAuthorizerName=test,allowAuthorizerOverride=true
# Lambdaが正しく動作するか確認
aws iot test-invoke-authorizer --authorizer-name test --region us-east-1 --http-context '{}'
MQTT Client에서 확인
찾아보면 브라우저에서 MQTT를 시도할 수 있는 사이트가 여러가지 있었습니다.
여기 하지만 심플했기 때문에 이번은 이쪽을 사용했습니다.
Address 란에
wss://iot.oxoxo.me/mqtt
Reference
이 문제에 관하여(AWS IoT 엔드포인트에서 자체 도메인 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tatsuhiroiida/items/2d8968f97c4afadc593e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)