티스토리 뷰

AWS 에서는 서비스 IP 대역을 JSON 형태로 제공하고 있습니다.

 

위 링크를 실행해보면 아래와 같은 JSON 데이터가 출력되며
IP대역, 리전, 서비스종류 정보가 포함된 prefixes 아이템이 5천여개 이상 확인 됩니다.

{
  "syncToken": "1620411253",
  "createDate": "2021-05-07-18-14-13",
  "prefixes": [
    {
      "ip_prefix": "3.5.140.0/22",
      "region": "ap-northeast-2",
      "service": "AMAZON",
      "network_border_group": "ap-northeast-2"
    },
    {
      "ip_prefix": "15.230.56.104/31",
      "region": "us-east-1",
      "service": "AMAZON",
      "network_border_group": "us-east-1"
    },
    {
      "ip_prefix": "3.5.140.0/22",
      "region": "ap-northeast-2",
      "service": "EC2",
      "network_border_group": "ap-northeast-2"
    }
  ]
}

이를 활용하여 서울 리전EC2 IP 대역만 추출하는 방법은 다음과 같습니다.

 

  1. curl 로 전체 json 데이터를 조회
  2. jq (JSON 프로세서) 명령어를 통해 원하는 정보를 추출 (필터링 & 파싱)
    • ip 데이터인 prefixes 배열 정보 추출
    • 배열 중 region 값이 ap-northeast-2 인 항목만 필터링
    • 배열 중 service 값이 EC2 인 항목만 필터링
    • 필터링된 배열에서 ip_prefix 값만 추출
$ curl -s https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.region=="ap-northeast-2") | select(.service=="EC2") | .ip_prefix'
3.5.140.0/22
15.177.76.0/24
3.36.0.0/14
54.180.0.0/15
52.79.0.0/16
13.125.0.0/16
15.193.9.0/24
52.94.248.176/28
13.124.0.0/16
99.77.141.0/24
3.5.144.0/23
13.209.0.0/16
52.78.0.0/16
99.150.24.0/21
52.95.252.0/24
15.164.0.0/15
3.34.0.0/15
99.151.144.0/21

 

 


 

주의할점은 해당 IP 대역 정보는 수시로 변경된다는 부분입니다.

 

따라서, 추출한 IP 대역을 방화벽으로 등록한다거나 하는 경우 IP 대역 추가/변경/삭제가 발생하는 시점에는 갱신이 필요합니다.

 

간단하게는 JSON 을 주기적으로 조회하여 syncToken, createdDate 값으로 업데이트 여부를 확인 후 갱신하는 방법과
명시적으로 AWS IP 대역 변경 사항 알림(Amazon SNS)을 수신하는 방법이 있습니다.



자세한 내용은 아래 공식 링크에서 참고 가능합니다.

 

참고

댓글