Metadata v2 사용
- 인쇄
- PDF
Metadata v2 사용
- 인쇄
- PDF
기사 요약
이 요약이 도움이 되었나요?
의견을 보내 주셔서 감사합니다.
VPC 환경에서 이용 가능합니다.
개요
Metadata v1 의 SSRF 보안 취약성을 보완하기 위하여 Metadata v2 방식의 호출 방식을 사용 할 수 있습니다.
- Metadata v1 - 요청 / 응답 방식
- Metadata v2 - 세션 지향 방식
서버 인스턴스의 설정에 따라서 v1, v2 방식을 모두 사용하거나 v2 방식만 사용하도록 변경할 수 있습니다.
Metadata v1 보안 취약점
Metadata v1 방식을 사용 가능한 서버 인스턴스에서 서비스를 운영하거나 소프트웨어를 구동하는 경우,
meta data (server or role data) 의 노출을 막기 위한 추가적인 조치와 주의가 필요할 수 있습니다.
만약 운영중인 서비스에 SSRF 취약점이 존재하고 이를 인지하지 못하고 있다면 외부에서 서버 인스턴스의 Metadata API를 호출하고
meta data를 획득할 수 있습니다.
이러한 보안 취약점을 차단하기 위해서는 서버 인스턴스의 Metadata 버전 설정을 v2 만 사용 가능하도록 변경해야 합니다.
Metadata v2 방식은 PUT 메소드를 통해 토큰을 발급하고 Metadata API 호출에 대해서 토큰 인증을 수행하여
SSRF 취약점으로 인한 meta data의 노출을 보호할 수 있습니다.
서버 인스턴스의 Metadata 버전 설정
서버 인스턴스 생성 후 콘솔을 통한 설정 변경만 가능합니다.
- 서버 콘솔 접속 [Services > Compute > Server]
- [서버 관리 및 설정 변경 > Metadata API 관리] 메뉴를 통한 버전 선택
- v1 및 v2
- v1, v2 버전을 모두 사용 가능
- Metadata API 호출 시 토큰 헤더 전달 여부에 따라서 v1, v2 방식 구분
- 토큰 헤더 미입력 시 인증 절차 없이 요청 수행
- 토큰 헤더 입력 시 전달된 헤더 값에 대한 인증 포함하여 요청 수행
- v2 (토큰 필수)
- v2 버전만 사용 가능
- Metadata API 호출 시 토큰 헤더값 필수 입력
예시
- Header
- X-NCP-METADATA-TOKEN-TTL-SECONDS : 토큰 발급 시 세션 기간(초) 을 설정하기 위한 헤더 (1 ~ 21600 초)
- X-NCP-METADATA-TOKEN : Metadata API 호출 시 발급받은 토큰을 전달하기 위한 헤더
별도의 명령
[roor@test-server ~]# TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-NCP-METADATA-TOKEN-TTL-SECONDS: 21600"`
[root@test-server ~]# curl -H "X-NCP-METADATA-TOKEN: $TOKEN" http://169.254.169.254/latest/meta-data
결합된 명령
[root@test-server ~]# TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-NCP-METADATA-TOKEN-TTL-SECONDS: 21600"` \
&& curl -H "X-NCP-METADATA-TOKEN: $TOKEN" http://169.254.169.254/latest/meta-data
참고
토큰이 정상적으로 발급되지 않은 경우 오류 메시지가 변수에 저장될 수 있습니다.
이 경우에 Metadata API 호출이 정상 작동하지 않습니다.
인증 오류 응답
[root@test-server ~]# curl -H "X-NCP-METADATA-TOKEN: wrong-token" -i http://169.254.169.254/latest/meta-data
HTTP/1.1 401 401
Date: Tue, 11 Apr 2023 02:42:02 GMT
Server: Apache
Referrer-Policy: unsafe-url
Connection: close
Transfer-Encoding: chunked
Content-Type: text/plain;charset=UTF-8
Unauthorized.
[root@test-server ~]#
이 문서가 도움이 되었습니까?