투케이2K

172. (TWOK/WORK) [업무 이슈] 디바이스 Aws Job OTA 펌웨어 업데이트 시 STS 임시 자격 증명 S3 Presigned URL 프리 사인 주소 파싱 문제 발생 본문

투케이2K 업무정리

172. (TWOK/WORK) [업무 이슈] 디바이스 Aws Job OTA 펌웨어 업데이트 시 STS 임시 자격 증명 S3 Presigned URL 프리 사인 주소 파싱 문제 발생

투케이2K 2025. 7. 29. 20:02
728x90

[제 목]

[업무 이슈] 디바이스 Aws Job OTA 펌웨어 업데이트 시 STS 임시 자격 증명 S3 Presigned URL 프리 사인 주소 파싱 문제 발생

 

[내 용]

------------------------------------------------------------------------------
[개발 및 테스트 환경]
------------------------------------------------------------------------------

- 제목 : [업무 이슈] 디바이스 Aws Job OTA 펌웨어 업데이트 시 STS 임시 자격 증명 S3 Presigned URL 프리 사인 주소 파싱 문제 발생


- 테스트 환경 : Aws 콘솔 대시 보드 / Aws 콘솔 수동 Job 생성 / Aws S3 에 업로드 한 펌웨어 파일 다운로드 주소 GetPresigned Url 생성 전달


- 사전) AWS S3 간략 설명 : 

  >> Aws S3 버킷 이란 데이터 (사진, 동영상, 문서 등) 객체 를 업로드할 수 있는 컨테이너 (디렉토리) 입니다

  >> Aws S3 버킷은 온라인 스토리지 서비스로 HTTP/HTTPS 를 통한 API 를 사용해 파일 업로드 및 다운로드 처리를 할 수 있습니다


- 사전) AWS S3 PreSignedUrl 간략 설명 : 

  >> AWS PreSignedUrl 은 Amazon S3에 저장된 객체에 대해 일시적인 접근 권한을 부여하는 URL입니다

    - PreSignedUrl 을 통해 인증 없이도 제한된 시간 동안 S3 객체에 접근하거나 업로드할 수 있습니다

  >> AWS PreSignedUrl 은 Get 정보 요청 용도와, Put 업로드 용도로 구분할 수 있습니다

  >> AWS PreSignedUrl 사용 목적 및 장점 : 

    - (사용 목적) 다운로드 사용자에게 S3 파일을 직접 제공 (예: 이미지, 문서 등)

    - (사용 목적) 업로드 사용자로부터 파일을 S3에 직접 업로드 받기 (예: 프로필 사진 업로드)

    - (사용 목적) 보안 유지 S3 버킷을 public으로 만들지 않고도 안전하게 파일 공유 가능

    - (장점) 보안성: S3 버킷을 공개하지 않아도 안전하게 파일 공유 가능

    - (장점) 유연성: 원하는 객체에만 접근 허용 가능

    - (장점) 시간 제한: URL이 자동으로 만료되어 보안 유지

------------------------------------------------------------------------------





------------------------------------------------------------------------------
[이슈 사항]
------------------------------------------------------------------------------

1. 기존 IAM 계정 AccessKey, SecretKey 정보를 사용해 AWS S3 Get 파일 다운로드 PreSignedUrl 정보를 생성 했지만,

   보안 강화로 인해 STS 임시 정보 사용해 AWS S3 Get 파일 다운로드 PreSignedUrl 정보 생성 시 URL 버퍼 길이가 이전 보다 길어져서 

   디바이스에서 펌웨어 파일 다운로드 URL 을 파싱하지 못하는 이슈 발생


2. 디바이스 펌웨어 파일 다운로드 URL 주소는 특정 버퍼 [150] 길이를 지정해 놓고 파싱 하는 로직으로 되어 있는 상태


3. IAM 계정으로 S3 파일 다운로드 PreSignedUrl 생성 예시 : 

  >> 버킷 명 : service 

  >> 다운로드 파일 명 : private.txt

  >> URL 주소 : https://service.s3.ap-northeast-2.amazonaws.com/control/private.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AK..7Q%2F20250618%2Fap-northeast-2%2Fs3%2Faws4_request&X-Amz-Date=20250618T000124Z&X-Amz-Expires=3600&X-Amz-Signature=bd..86&X-Amz-SignedHeaders=host


4. STS 임시 자격 정보로 S3 파일 다운로드 PreSignedUrl 생성 예시 : 

  >> 버킷 명 : service 

  >> 다운로드 파일 명 : private.txt

  >> URL 주소 : https://service.ap-northeast-2.amazonaws.com/control/private.txt?X-Amz-Security-Token=IQ..........................VW&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20250721T052120Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3599&X-Amz-Credential=AS..st&X-Amz-Signature=f3..183

------------------------------------------------------------------------------





------------------------------------------------------------------------------
[원인 파악 및 증상 재현]
------------------------------------------------------------------------------

1. AWS S3 에 특정 펌웨어 파일 업로드 수행


2. AWS STS 임시 자격 증명 사용해 펌웨어 파일 다운로드 Get PreSignedUrl 생성 수행


3. AWS JobDocument 문서 생성 및 펌웨어 다운로드 URL 주소를 지정


4. AWS Job 생성 및 특정 사물 OTA 원격 펌웨어 업데이트 요청 수행


5. 디바이스 로그에서 펌웨어 다운로드 URL 파싱 부분에서 에러가 발생한 것 확인

------------------------------------------------------------------------------





------------------------------------------------------------------------------
[조치 내용]
------------------------------------------------------------------------------

1. 디바이스 소스코드에서 특정 버퍼 길이를 지정해서 URL 주소를 파싱하던 로직을 가변 문자열 길이로 받아서 파싱하도록 변경 요청


2. 가변 문자열 길이로 받아서 펌웨어 파일 다운로드 URL 파싱 테스트 확인 : 

  >> 펌웨어 파일 다운로드 Get PreSignedUrl 정상 파싱 확인

  >> 실제 Get 요청으로 펌웨어 파일 정상 다운로드 확인

------------------------------------------------------------------------------





------------------------------------------------------------------------------
[참고 사이트]
------------------------------------------------------------------------------

[AWS 원격 펌웨어 업데이트 OTA 수동 job 생성 및 특정 사물 notify 펌웨어 업데이트 요청 방법 정리]

https://blog.naver.com/kkh0977/223944636139?trackingCode=blog_bloghome_searchlist


[자바스크립트 AWS STS 임시 자격 증명 사용해 S3 Get PreSignedUrl 프리 사인 URL 주소 생성]

https://blog.naver.com/kkh0977/223938740405?trackingCode=blog_bloghome_searchlist


[기능 개선] Aws S3 파일 다운로드 및 업로드 시 PreSignedUrl 프리 사인 URL 방식으로 대체 요청 - 액세스키, 시크릿키 사용 제거

https://blog.naver.com/kkh0977/223903777386?trackingCode=blog_bloghome_searchlist


[자바스크립트 AWS STS 임시 자격 증명 조회 방법 - AccessKeyId, SecretAccessKey, SessionToken]

https://blog.naver.com/kkh0977/223901300334?trackingCode=blog_bloghome_searchlist

------------------------------------------------------------------------------
 
728x90
반응형
Comments