본문 바로가기

AWS IoT

(11)
[AWS IoT] 어플리케이션 (5) : 소스 코드 GitHub 자바에서 JSON 문서를 분석하기 위해 GSON 클래스를 사용했습니다. GSON을 사용하기 위해서는 사용할 JSON 형식에 대응하는 클래스를 미리 생성해야 합니다. LEDButtonCommand, LEDButtonResult, LEDButtonShadow 이 세개의 클래스가 이것을 위한 것입니다. GSON에 대한 자세한 설명은 구글에 많으니 여기서 따로 설명하지 않겠습니다. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:소스와 바이너리 형태로 재배포와 사용은 다음 조건들을 만족한 경우에만..
[AWS IoT] 어플리케이션 (4) : 보안 장단점, operation key를 사용한 이유 단점 이전 포스트에 설명한 안드로이드 앱 클라이언트의 IoT Publish에 대한 정책의 일부입니다. 어플리케이션 (2) : 정책 & 신뢰 관계 { "Effect": "Allow", "Action": "iot:Publish", "Resource": [ "arn:aws:iot:us-east-1::topic/LEDButton*/command", "arn:aws:iot:us-east-1::topic/$aws/things/LEDButton*/shadow/get" ] } 안드로이드 앱 클라이언트가 사물에 명령(command) 토픽을 발행(Publish)할 때 "LEDButton*/command" 토픽이 사용됩니다. * 는 와일드 카드를 의미하며 어떤 문자열도 허용된다는 의미입니다. 즉, 위와 같이 설정하면 "LE..
[AWS IoT] 어플리케이션 (3) : CognitoCachingCredentialsProvider 객체 CognitoCredentialProvider는 Cognito ID Pool에 연결되어 STS의 "임시 자격 증명"을 관리하는 AWSCredentialsProvider 인터페이스 구현 객체입니다. 그리고 CognitoCachingCredentialProvider는 CognitoCredentialProvider 클래스를 상속하고, 네트워크 연결 횟수를 줄이기 위해 캐시를 사용하는데 이것을 위해 SharedPreferences 정도만 추가한 것으로 알고 있습니다. AWSCredentialsProvider 인터페이스 구현 객체는 AWS Android SDK의 각 서비스 객체를 해당 서비스에 연결할 때 인증 수단으로 사용됩니다. 즉, STS의 "임시 자격 인증"을 원하는 서비스에 연결하는 역할을 합니다. Git..
[AWS LED Button] 어플리케이션 (2) : 정책 & 신뢰 관계 먼저 Cognito에서 ID Pool을 생성한 후 IAM에서 "인증된 역할"과 "인증되지 않은 역할"(ID Pool 생성시 IAM에 자동 생성)에 대한 권한을 설정(원하는 정책을 만들어서 해당 역할에 붙이거나 해당 역할에서 인라인 정책을 생성)해 주어야 합니다. 또한 역할은 IAM에 정의되어 있지만, 이 역할에 의해 생성된 "임시 자격 증명"이 Security Token Service(STS)에 있기 때문에, 역할 맡는 동작(AssumeRole)은 STS가 담당합니다. AssumeRole에 대한 동작은 따로 해당 정책의 신뢰 관계 정책에서 설정해야 합니다. 다음은 제가 IAM에서 "인증된 역할"에 설정한 정책과 신뢰 관계입니다. 정책 * 는 와일드 카드를 의미합니다. 그리고 사물(Thing)의 정책과 비..
[AWS LED Button] 어플리케이션 (1) : 시스템 흐름 시스템 / 인증 흐름 AWS 서비스들은 위와 같이 유기적으로 연결될 수 있습니다. 그리고 대부분의 AWS 프로젝트는 몇가지 서비스가 연동되어 구성됩니다. Cognito 모바일 앱과 웹에 가입, 로그인 기능을 제공하고, 이에 대한 권한을 부여하는 AWS 서비스입니다. Cognito는 Cognito User Pool과 Cognito Federated Identities Pool(ID Pool)로 나뉩니다. Cognito User Pool AWS에서 제공하는 Identity Provider입니다. 링크를 걸어 놨지만 간단히 예를 들면, 요즘 많은 앱이나 웹에서 "구글 아이디로 로그인"이라는 기능을 볼 수 있는데 그것이 구글에서 제공하는 Identity Provider입니다. 주의할 것은 Amazon에서도 Id..
[AWS LED Button] ESP32 (6) : 소스 코드 및 기타 기능 GitHub 1. key store 모듈과 operation key ESP32(Thing)의 non-volatile memory에 operation key를 저장하고 가져오기 위해 ESP32 SDK의 non-volatile storage(이하 nvs) 라이브러리가 사용됩니다. 하지만 nvs는 operation key에 대해서만 사용되고, 필요한 동작도 "초기화, 저장, 불러오기"뿐이므로 nvs 관련된 모든 동작을 미리 정의한 key_store 모듈을 따로 만들었습니다. 결과적으로 nvs 기능을 사용할 때마다 핸들과 key 값을 입력하거나 NULL을 검사할 필요 없이 아래 3개 함수만 사용하면 됩니다. esp_err_t opkey_store_init(); esp_err_t set_opkey(const ch..
[AWS LED Button] ESP32 (5) : 콜백을 받기 위한 yield 함수 아래 함수들은 콜백 함수를 입력할 수 있습니다. aws_iot_mqtt_subscribe aws_iot_shadow_update aws_iot_shadow_get aws_iot_shadow_regitster_delta(구조체 매개 변수의 맴버 변수에 콜백 함수 입력) 하지만 위 함수들에 콜백 함수를 입력했다고, AWS IoT에서 메세지가 도착했을 때 콜백 함수가 실행되는 것은 아닙니다. 아래 함수들로 MQTT 모듈(aws_iot_mqtt 또는 aws_iot_shadow 모듈)에 스래드를 넘겨주어야 합니다. 스래드를 전달 받은 MQTT 모듈은 매개변수로 입력된 timeout 시간 동안 TCP 상태를 모니터하기 위해 MQTT 핑을 관리하고, AWS IoT에 대한 수신 소켓을 점검합니다. 스래드를 넘겨주기 때..
[AWS LED Button] ESP32 (4) : AWS_IoT_Client 객체 C언어에서 객체라니..? 자바 공부를 하기 전이었으면 당황스러웠겠지만 자바와 RTOS를 공부하고나니 객체 지향 프로그래밍이라는 것이 특정 언어에 종속되는 개념이 아니라는 것을 알았습니다. 태생이 객체 지향 프로그래밍을 위해 개발된 자바나 C# 보다 약간 번거롭지만, C언어로도 객체 지향을 어느정도 흉내낼 수 있습니다. 간단하게 RTOS를 예로 들면 "테스크 함수"가 클래스 역할, "테스크 핸들"이 객체 역할을 한다고 볼 수 있습니다. "테스크 함수 A"를 사용하여 "테스크 1", "테스크 2"를 만들고 "테스크 핸들 1", "테스크 핸들 2"를 할당 받았을 때, "테스크 1"과 "테스크 2"는 동일한 "테스크 함수 A"를 참조하지만, 다른 메모리 공간을 리소스로 사용합니다. 그리고 그 공간을 각각 "테스..