EMD Blog

Cloud 모니터링의 알림 채널을 Pub/Sub으로 설정할 경우 데이터 암호화 이슈 본문

Public Cloud/GCP

Cloud 모니터링의 알림 채널을 Pub/Sub으로 설정할 경우 데이터 암호화 이슈

EmaDam 2022. 9. 4. 07:39

Cloud 모니터링의 알림 채널을 Pub/Sub으로 설정해 알림 메세지를 게시하면 Cloud Functions에서 메세지 내용 확인 시 데이터가 암호화되어 있는 것을 볼 수 있다.

모니터링 알림 스키마 구조

https://cloud.google.com/monitoring/support/notification-options#pubsub 위 문서에서 중간쯤 보면 스키마 구조와 설명이 적혀있다.

하지만 메세지를 출력해보면 아래와 같이 나온다. (검은색으로 칠해진 부분은 base64 데이터이다.)

즉, 아래구조로 출력된다. ( Message ID와 Publish Time은 Pub/Sub에서 생성)

{

data : string,

messageId: string,

message_id : string,

publishTime : string

publish_time : string

}

이 이슈는 모니터링 알림이 Pub/Sub에 알림 메세지를 게시할 때 내부적으로 REST API를 사용하기 때문인데 아래 문서를 보면 REST API요청 시 데이터는 base64로 인코딩 되어야 한다고 나와있다.

https://cloud.google.com/pubsub/docs/publisher#message_format

또한 Pub/Sub은 메세지에 Messge ID, 타임스탬프 데이터를 붙여서 전달한다고 적혀있다. 그래서 Cloud Functions가 데이터를 받았을 때는 위와 같은 모양새가 되어있는 것이다. 아래 문서를 API문서를 참고.

https://cloud.google.com/pubsub/docs/reference/rest/v1/PubsubMessage

중요한 것은 Pub/Sub뿐만 아니라 다른 Google의 다른 API들도 아래 문서에 나와 있는 “유형 및 형식” 규칙을 따른다. 형식(format)은 실제 속성, 유형(type)은 JSON으로 표현하기 위해 대체로 사용할 속성을 말한다. format이 없는 애들은 유형이 실제 속성이다. 아래 문서를 참고해 API문서에서 값을을 변환해 사용하면 된다. (ex 유형이 string이고 형식이 int64인 필드가 존재한다면 해당 데이터는 string형식으로 데이터를 전달해 주지만 우리가 사용할 때는 int64로 변환해 사용하면 된다.)

https://developers.google.com/discovery/v1/type-format

base64로 인코딩된 데이터는 디코딩하면 위 스키마 구조대로 나오니 변환해서 사용하면 된다.