투케이2K

310. (TWOK/ERROR) [Android] Aws PutMedia The request signature .. does not match the .. you provided 본문

투케이2K 에러관리

310. (TWOK/ERROR) [Android] Aws PutMedia The request signature .. does not match the .. you provided

투케이2K 2025. 5. 23. 19:02

[환경 설정 및 설명]

프로그램 : AndroidStudio

설 명 : [Android] Aws PutMedia The request signature .. does not match the .. you provided

 

[설 명]

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

- 제목 : [Android] Aws PutMedia The request signature .. does not match the .. you provided

- 테스트 환경 : 삼성 갤럭시 스마트폰 / 안드로이드 / Android

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





--------------------------------------------------------------------------
[에러 원인]
--------------------------------------------------------------------------

1. 안드로이드 휴대폰에서 Aws Kvs HLS 스트리밍 MKV 파일 PutMedia 업로드 수행 시 잘못 된 요청으로 인한 403 에러 발생 이슈


2. 안드로이드 Aws 라이브러리 사용 의존성 모듈 : 

implementation 'com.amazonaws:aws-android-sdk-kms:2.57.0'
implementation 'com.amazonaws:aws-android-sdk-s3:2.57.0'
implementation 'com.amazonaws:aws-android-sdk-iot:2.57.0'
implementation 'com.amazonaws:aws-android-sdk-mobile-client:2.57.0'
implementation 'com.amazonaws:aws-android-sdk-kinesisvideo:2.57.0'


3. 에러 발생 로그 전문 : 

E///===========//: ======================================================================
I/: [LOG :: CLASS PLACE :: com.example.javaproject.C_Activity.A_Test_Activity_Start$52$1.onError(A_Test_Activity_Start.java:2251)]
I/: ----------------------------------------------------
I/: [LOG :: DESCRIPTION :: AWS KVS HLS 스트리밍 업로드 수행 :: onError]
I/: ----------------------------------------------------
I/: [LOG :: 
        
    ----------------------------------------------------
    RESPONSE_CODE :: 403
    ----------------------------------------------------
    RESPONSE_DATA :: {"message":"The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details."}
    ----------------------------------------------------
        
    ]
E///===========//: ======================================================================

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





--------------------------------------------------------------------------
[해결 방법]
--------------------------------------------------------------------------

1. Aws Kvs HLS PutMedia 요청에 대한 프로세스 다시 점검 및 AWS4Signer 인증 서명 코드 수정 (Request setEncodedResourcePath 추가)

    >> Aws Kvs 권한 확인 : FullAccess 포함 여부 확인 (PutMedia 포함)

    >> 소스 코드 : 리전 일치 여부 확인 (GetDataEndpoint, signer.setRegionName, URL 모두 동일 리전)

    >> 소스 코드 : putMedia 요청 URL 점검 확인 (DataEndopoint 로 요청)

    >> Aws Kvs 스트림 존재 여부 확인 (해당 스트림이 존재하고 활성화 상태인지 확인)

    >> 클라이언트 시각 확인 : 서명에 사용하는 x-amz-date 값이 UTC 기준 및 5분 이내인지 확인

    >> HTTP 요청 메서드 타입 확인 : POST 방식으로 요청

    >> 전송 스트림 타입 확인 : MKV 컨테이너 형식으로 실시간 스트리밍 전송


2. Aws PutMedia 호출 AWS4Signer 인증 서명 코드 : 

    // --------------------------------------------------------
    Request<?> signRequest = new DefaultRequest<>("kinesisvideo");

    signRequest.setHttpMethod(HttpMethodName.POST);
    signRequest.setEndpoint(new URI(dataEndpoint)); // TODO [DataEndpoint 적용]
    signRequest.setEncodedResourcePath("/putMedia"); // TODO [Path 설정 : 해당 값 추가 중요]

    signRequest.addHeader("Host", new URI(dataEndpoint).getHost()); // TODO [호스트 지정]
    signRequest.addHeader("x-amzn-stream-name", STREAM_NAME); // TODO [스트림 명칭]
    signRequest.addHeader("x-amzn-fragment-timecode-type", "ABSOLUTE"); // TODO [타임 코드]

    // TODO [수동 설정 시 참고 코드]
    /*
    SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
    dateTimeFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    String amzDate = dateTimeFormat.format(new Date());
    signRequest.addHeader("x-amzn-producer-start-timestamp", amzDate);
    // */

    signRequest.addHeader("Content-Type", "application/octet-stream"); // TODO [Body 에서 지정한 MediaType 타입]

    signRequest.setContent(new StringInputStream("")); // TODO [Empty Body 지정 필요]
    // --------------------------------------------------------
    AWS4Signer signer = new AWS4Signer();

    signer.setServiceName("kinesisvideo");
    signer.setRegionName(REGION);

    signer.sign(signRequest, credentials); // TODO [Sign 인증 수행]
    // --------------------------------------------------------

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





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

[Aws Kvs HSL 비디오 스트림 녹화 영상 관련 학습 정리]

https://blog.naver.com/kkh0977/223855980812


[Aws KVS HLS MKV 파일 설명 - PutMedia API 스트리밍 업로드 시 전송 파일]

https://blog.naver.com/kkh0977/223874472088


[Aws SigV4 인증 및 서명 프로토콜 설명 - AWS4Signer API 호출 시 서명 사용]

https://blog.naver.com/kkh0977/223874467995


[Aws KVS PutMedia 비디오 스트림 전송 API 설명 정리]

https://blog.naver.com/kkh0977/223856688678


[안드로이드 Raw 폴더에 저장 된 MKV 형식 파일 Aws Kvs HLS 비디오 스트리밍 업로드 수행]

https://blog.naver.com/kkh0977/223874458019


[안드로이드 Aws Kvs HLS 비디오 스트리밍 putMedia 호출 시 필요한 Signature V4 서명 방법]

https://blog.naver.com/kkh0977/223874442189

--------------------------------------------------------------------------
 
반응형
Comments