AWS IoT Core
AWS IoT Coreλ μ€λ§νΈ ν λλ 곡μ₯, μλμ§ μμ€ν
μμ λ°μνλ λ€μν μκ³μ΄ λ°μ΄ν°λ₯Ό μμ§ν μ μλ λ°©λ²μ μ§μνλ IoT λλ°μ΄μ€ κ΄λ¦¬ν μλΉμ€μ
λλ€. κΈ°μ‘΄ λλ°μ΄μ€ μ°λμ μν AWS IoT Core κ΄λ ¨ κΈ°λ₯μ AWS SDK for Java v1
λ²μ μΌλ‘ μμ±λμ΄ μκΈ° λλ¬Έμ v1 λ²μ μ§μ μ’
λ£ μμ μΌλ‘ μΈν΄ AWS SDK for Java 2.x λ‘ μ‘°κΈμ© λ§μ΄κ·Έλ μ΄μ
ν΄μΌν©λλ€. λ°λΌμ, AWS IoT Coreμ λν΄ μμ보면μ AWS SDK for Java 2.x
κΈ°λ°μ μ½λλ₯Ό μμ±ν΄λ³΄λ €κ³ ν©λλ€. λ³Έ κΈμμλ IoT λλ°μ΄μ€ μ
μ₯μμ AWS IoT μλν¬μΈνΈλ‘μ μ°κ²°μ μννλ κ²μ΄ μλ μμ€ν
μμ IoT λλ°μ΄μ€λ₯Ό μν μΈμ¦μλ₯Ό λ°κΈνκΈ° μν μΌλ ¨μ κ³Όμ μ μμλ΄
λλ€.
ν μ€νΈλ₯Ό μν IAM μ¬μ©μ μμ±
λ¨Όμ , AWS IoT Coreμ λν ν
μ€νΈλ₯Ό μν΄ AWSIoTFullAccess κΆν μ μ±
μ κ°μ§λ μ¬μ©μλ₯Ό λ§λ€κ³ AWS CLI λλ λ‘컬 μ½λμμ μ¬μ©νκΈ° μν΄ μ‘μΈμ€ ν€λ₯Ό λ°κΈν©λλ€. μΈν
리μ μ΄μ AWS Toolkit νλ¬κ·ΈμΈμ Open AWS Local Terminal
μ μ¬μ©νλ©΄ μ νν AWS νλ‘νμΌ(AWS_PROFILE)μ΄ νκ²½λ³μλ‘ μ μ©λ ν°λ―Έλμ μ΄ μ μμ΅λλ€.
AWS IoT Core μλν¬μΈνΈ
AWS IoT Coreμ μλν¬μΈνΈλ 컨νΈλ‘€ νλ μΈκ³Ό λ°μ΄ν° μμμ μν μλν¬μΈνΈλ‘ ꡬλΆλμ΄ μ¬μ©λλλ° AWS ν΄λΌμ°λλ‘ λ°μ΄ν°λ₯Ό μ μ‘ν΄μΌνλ IoT λλ°μ΄μ€λ iot:Data-ATS
μλν¬μΈνΈμ X.509 ν΄λΌμ΄μΈνΈ μΈμ¦μλ‘ μΈμ¦μ μννκ³ μ°κ²°νκ² λ©λλ€. iot:Data-ATS μμ ATSλ Amazon Trust Servicesλ₯Ό μλ―Έν©λλ€.
TerminalPS> aws iot describe-endpoint --endpoint-type iot:Data-ATS { "endpointAddress": "[account-specific-prefix]-ats.iot.ap-northeast-2.amazonaws.com" }
X.509 ν΄λΌμ΄μΈνΈ μΈμ¦μμ λν CA μΈμ¦μ
AWS μμ λ°κΈν΄μ£Όλ X.509 ν΄λΌμ΄μΈνΈ μΈμ¦μλ Amazon Trust Servicesλ‘ κ΅μ°¨ κ²μ¦λλ λ£¨νΈ CA μΈμ¦μλ‘ μλͺ λμ΄ λ°κΈλ©λλ€. λλΆλΆ λ£¨νΈ CA μΈμ¦μκ° νμμμ§λ§ CA μΈμ¦μκ° νμν IoT λλ°μ΄μ€ νκ²½μ΄ μμ μ μμΌλ―λ‘ μ΄μ λν μλ² μΈμ¦ κ°μ΄λλ μμλ νμκ° μμ΅λλ€. μΉ μ½μμ λλ©μΈ ꡬμ±μμ λ°μ΄ν° ATS μλν¬μΈνΈμμ μ¬μ©μ€μΈ 보μ μ μ± λ νμΈν΄λ³΄λ©΄ μ’μ΅λλ€.
Data-ATS μλν¬μΈνΈμ μ°κ²°νκΈ° μν X.509 μΈμ¦μ λ°κΈ
CreateKeysAndCertificate
λͺ
λ ΉμΌλ‘ 2048 λΉνΈ κΈΈμ΄μ RSA ν€ νμ΄μ X.509 ν΄λΌμ΄μΈνΈ μΈμ¦μλ₯Ό μμ±ν μ μμ΅λλ€. μ΄λ, setAsActive
νλΌλ―Έν°λ‘ λΉνμ±ν μνμΈ μΈμ¦μ
λ₯Ό λ§λ€ μ μμΌλ―λ‘ μ¬λ¬Όμ μΈμ¦μλ₯Ό μ°κ²°νκ³ λμ μ€μ λ‘ IoT λλ°μ΄μ€μμ μΈμ¦μ μννκΈ° μ μ μμ€ν
νλ©΄μ ν΅ν΄ μΈμ¦μ μνλ₯Ό νμ±νν μ μλλ‘ μ 곡νλκ² λ³΄μ μ λ μ’μ μ μκ² λ€μ.
aws iot create-keys-and-certificate --no-set-as-active --certificate-pem-outfile cert.pem --public-key-outfile pub.key --private-key-outfile priv.key
{
"certificateArn": "The ARN of the certificate",
"certificateId": "The ID of the certificate",
"certificatePem": "The certificate data, in PEM format.",
"keyPair": {
"PrivateKey": "The private key",
"PublicKey": "The public key"
}
}
IoT λ μ§μ€νΈλ¦¬ μ¬λ¬Ό μ ν β’ μ¬λ¬Ό μμ±
λλ°μ΄μ€μ λν μ¬λ¬Ό μ νμ μμ±νκ³ μ¬λ¬Ό μ νκ³Ό ν¨κ» μ¬λ¬Όμ λ±λ‘ν©λλ€. μ¬λ¬Ό μ νμ΄ μ€μ λ μ¬λ¬Όμ μμ±μ 3κ° μ΄μ μ§μ ν μ μμΌλ―λ‘ μ¬λ¬Όκ³Ό μ¬λ¬Ό μ νμ ν¨κ» μμ±
νλ κ²μ΄ μ’μ΅λλ€. CreateThingType λͺ
λ ΉμΌλ‘ μ¬λ¬Ό μ νμ μμ±ν μ μκ³ CreateThing λͺ
λ Ήμ νΈμΆν λ μ¬λ¬Ό μ νμ ν¨κ» μ§μ ν μ μμ΅λλ€.
TerminalPS> aws iot create-thing-type --thing-type-name Computer { "thingTypeName": "Computer", "thingTypeArn": "arn:aws:iot:ap-northeast-2:[account-id]:thingtype/Computer", "thingTypeId": "5c6a1c6c-93e6-4d57-82d3-047f1c267ea6" } PS> aws iot create-thing --thing-name PC --thing-type-name Computer { "thingName": "PC", "thingArn": "arn:aws:iot:ap-northeast-2:[account-id]:thing/PC", "thingId": "2439524c-278c-486d-b74b-1af1acc8fd63" }
μμ±λ μ¬λ¬Ό μ΄λ¦μ λ³κ²½ν μ μμΌλ―λ‘ μ¬λ¬Όμ μμ±ν λμλ λλ°μ΄μ€μ λν΄ UUIDμ κ°μ λ³λμ μλ³μλ₯Ό λ°κΈνκ³ μμ±νλ κ²μ΄ μ’μ΅λλ€.
μ¬λ¬Όμ X.509 ν΄λΌμ΄μΈνΈ μΈμ¦μ 주체 λ±λ‘
X.509 μΈμ¦μλ₯Ό μ¬λ¬Όμ μ°κ²°ν λμλ 보μ μ μ¬λ¬Όκ³Ό μΈμ¦μ κ° κ΄κ³λ₯Ό μ μΌνκ² μ μ§νμ¬ λ
μ νλλ‘ κ΅¬μ±νλκ² μ’λ€κ³ νλ μ€λ§νΈ νμ΄λ 곡μ₯μ²λΌ νλμ μμ€ν
μ ꡬμ±νλ λλ°μ΄μ€κ° μ¬λ¬κ°μΈ κ²½μ° μ¬μ΄νΈμ λν μΈμ¦μλ₯Ό μλ‘ λ€λ₯Έ λλ°μ΄μ€μ μ¬λ¬Όμ΄ 곡μ ν μλ μμ΅λλ€. λ°λΌμ, μΈμ¦μ κ΄λ¦¬ κΈ°μ€μ λν λΆλΆμ μμ€ν
λͺ©μ μ λ°λΌ μ ννλ©΄ λ©λλ€. AttachThingPrincipal λͺ
λ Ήμ νΈμΆν λ thingPrincipalType
μ EXCLUSIVE_THINGλ‘ μ§μ νλ©΄ μΈμ¦μλ μ¬λ¬Όμ μ μΌν μΈμ¦μλ‘ νμ©λλ κ²μΌλ‘ μ§μ λμ΄ μ΄ μΈμ¦μλ₯Ό λ€λ₯Έ μ¬λ¬Όμ μν 보μ μ£Όμ²΄λ‘ λ±λ‘ν μ μμ΅λλ€.
TerminalPS> aws iot create-keys-and-certificate { "certificateArn": "arn:aws:iot:ap-northeast-2:[account-id]:cert/8f8538927603f4dfe5fb374fc383211a966cc6f74a1ba70121ef185f9cdf67f3", "certificateId": "8f8538927603f4dfe5fb374fc383211a966cc6f74a1ba70121ef185f9cdf67f3", ... } PS> aws iot attach-thing-principal --thing-name PC --principal arn:aws:iot:ap-northeast-2:[account-id]:cert/8f8538927603f4dfe5fb374fc383211a966cc6f74a1ba70121ef185f9cdf67f3
μ¬λ¬Όμ λν 보μ 주체λ Amazon Cognito ID λλ X.509 μΈμ¦μκ° λλ©° μ κ²½μ° μΈμ¦μ ARNμ 보μ μ£Όμ²΄λ‘ μ λ ₯ν΄μΌ ν©λλ€.
μ¬λ¬Όμ λ±λ‘λ μΈμ¦μ ν΄μ λ° νμ
보μμ μΈ μ΄μ λλ μ£ΌκΈ°μ μΈ κ΄λ¦¬ μΌμ μ μνμ¬ μ¬λ¬Όμ μ°κ²°λ μΈμ¦μλ₯Ό κ΅μ²΄λ₯Ό μν΄ κΈ°μ‘΄ μΈμ¦μλ₯Ό νμνλ €λ©΄ DetachThingPrincipal λͺ
λ Ήμ μννμ¬ μ¬λ¬Όμ μ°κ²°λ μΈμ¦μλ₯Ό λ¨Όμ ν΄μ ν©λλ€. κ·Έλ¦¬κ³ λμ UpdateCertificate λͺ
λ ΉμΌλ‘ μΈμ¦μμ μνλ₯Ό μ·¨μ(REVOKED)
λ‘ λ³κ²½νλ©΄ λ©λλ€.
TerminalPS> aws iot update-certificate --certificate-id 8f8538927603f4dfe5fb374fc383211a966cc6f74a1ba70121ef185f9cdf67f3 --new-status REVOKED
AWS IoT SDK v2 κΈ°λ° μμ μ½λ
AWS IoT λλ°μ΄μ€λ₯Ό μν μΌλ ¨μ κ³Όμ μ AWS IoT examples using AWS CLIλ₯Ό μ°Έκ³ νμ¬ μ 리ν΄λ³΄μμ΅λλ€. μ΄λ²μλ AWS IoT SDK for Java 2.xλ₯Ό μ¬μ©ν μμ λ₯Ό μ°Έκ³ ν΄μ AWS IoT SDK for Java 2.x κΈ°λ°μ μ½λλ₯Ό μμ±ν΄λ³΄λλ‘ νκ² μ΅λλ€. μμ μ½λλ kdevkr/aws-iot-core-demoμμ νμΈν μ μμ΅λλ€.
λ¨Όμ , μμ μ½λμμ IotClient μΈμ€ν΄μ€λ₯Ό μμ±ν λ ProfileCredentialsProvider
λ₯Ό μ¬μ©νμ¬ iot-core νλ‘νμΌμ μ§μ μ€μ ν μ μμ§λ§ νλ‘λμ
κΈ°μ€μμλ ν¬λ λ΄μ
νλ‘λ°μ΄λ μ²΄μΈ λ°©μμΌλ‘ λ€μν λ°©λ²μΌλ‘ ν¬λ λ΄μ
μ μ‘°νν΄μ μ¬μ©ν μ μλλ‘ νλ κ²μ΄ μ’μ΅λλ€. μΈν
리μ μ΄μ Run Configuration μμ νκ²½ λ³μμ AWS_PROFILEμ μ€μ νλ©΄ iot-core
νλ‘νμΌμ μ½κ² μ μ©ν μ μμ΅λλ€. AWS Toolkit for IntelliJ IDEA νλ¬κ·ΈμΈμΌλ‘ AWS Connection
μ€μ μΌλ‘ μ ν리μΌμ΄μ
νκ²½μ λ§λ IAM νλ‘νμΌλ‘ μ€ννκ³ μλλ° μλμ°μμλ μ νν νλ‘νμΌμ΄ λ°μλμ§ μλ λ¬Έμ κ° νμΈλμ΄ AWS_PROFILE
νκ²½ λ³μλ₯Ό μ¬μ©νμ΅λλ€.
IoT λλ°μ΄μ€ μΈμ¦μ 보μ μ μ±
IoT λλ°μ΄μ€μ IAM κΆν μ μ± μ²λΌ λ³λλ‘ μ 곡νλ AWS IoT Core Policyμ μ€μ νμ¬ MQTT μ°κ²°λΆν° λ©μμ§ μ‘μμ λ±μ λν 보μ μ μ± μ μ립ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ¬λ¬Όμ μ°κ²°λ X.509 μΈμ¦μλ₯Ό μ¬μ©νλ IoT λλ°μ΄μ€κ° μ¬λ°λ₯Έ ν΄λΌμ΄μΈνΈ μμ΄λλ‘ μ°κ²°μ ν μ μκ² μ ννκ±°λ νμ©λ μμ΄νΌ λμμμ μ κ·Όν μ μλλ‘ μ νν μ μμ΅λλ€.
- aws:SourceIp - λ©μμ§ λΈλ‘컀μ μ°κ²°λλ ν΄λΌμ΄μΈνΈ μμ΄νΌμ λν μ μ± λ³μ
- iot:ClientId - MQTT ν΄λΌμ΄μΈνΈ μμ΄λμ λν μ μ± λ³μ
- iot:CertificateId - X.509 μΈμ¦μμ λν μ μ± λ³μ
- IoT Core μμ 리μμ€μ Amazon Resource Names (ARNs)
IoT λλ°μ΄μ€ μ°κ²° μν
AWS IoT νλ¦Ώ μΈλ±μ±(Fleet Indexing)μμ μ¬λ¬Ό μ°κ²°μ λν μΈλ±μ±μ νμ±ν
νλ©΄ IoT λλ°μ΄μ€μ κ°λ³ μ°κ²° μνλ₯Ό GetThingConnectivityData λͺ
λ ΉμΌλ‘ νμΈν μ μμ΅λλ€. λ€μμ μ¬λ¬Όμ λ§λ€κ³ λμ μ°κ²°μ μλν μ μ΄ μλ κ²½μ°μ μνλ₯Ό 보μ¬μ£Όλλ° λ§μ½, λλ°μ΄μ€ νλ¦Ώ μΈλ±μ±μ νμ±ννμ§ μμ μνλΌλ©΄ AWS_Things μΈλ±μ€λ₯Ό μ°Ύμ μ μλ μ€λ₯κ° λ°μν©λλ€. λν, AWS CLI μ get-thing-connectivity-data
νμ λͺ
λ Ήμ΄ μλ κ²½μ° 2.23 μ΄μμ λ²μ μΌλ‘ μ
λ°μ΄νΈ νμΈμ.
PS> aws iot get-thing-connectivity-data --thing-name PC
{
"thingName": "PC",
"connected": false,
"timestamp": "1970-01-01T09:00:00+09:00",
"disconnectReason": "UNKNOWN"
}
λ€μμλ IoT λλ°μ΄μ€ μ μ₯μμ AWS IoT Device SDK for Java v2λ₯Ό μμ보λλ‘ νκ² μ΅λλ€.