Amazon Web Services
일반 참조 (버전 1.0)

AWS IP 주소 범위

Amazon Web Services(AWS)는 현재 IP 주소 범위를 JSON 형식으로 게시합니다. 현재 범위를 보려면 .json 파일을 다운로드합니다. 기록을 유지하려면 연속 버전의 .json 파일을 시스템에 저장합니다. 파일을 마지막으로 저장한 이후에 변경 사항이 있는지 확인하려면 현재 파일의 게시 시간을 마지막으로 저장한 파일의 게시 시간과 비교합니다.

다운로드

ip-ranges.json 다운로드

이 파일에 프로그래밍 방식으로 액세스할 경우 애플리케이션에서 서버에 제공된 TLS 인증서를 확인한 이후에 파일을 다운로드하는지 직접 확인해야 합니다.

구문

ip-ranges.json 구문은 다음과 같습니다.

{ "syncToken": "0123456789", "createDate": "yyyy-mm-dd-hh-mm-ss", "prefixes": [ { "ip_prefix": "cidr", "region": "region", "service": "subset" } ], "ipv6_prefixes": [ { "ipv6_prefix": "cidr", "region": "region", "service": "subset" } ] }
syncToken

게시 시간(Unix epoch 시간 형식)

형식: 문자열

예: "syncToken": "1416435608"

createDate

게시 날짜 및 시간

형식: 문자열

예: "createDate": "2014-11-19-23-29-02"

prefixes

IPv4 주소 범위에 대한 IP 접두사

형식: 배열

ipv6_prefixes

IPv6 주소 범위에 대한 IP 접두사

형식: 배열

ip_prefix

퍼블릭 IPv4 주소 범위(CIDR 표기법)입니다. AWS에서는 구체적인 범위로 접두사를 알릴 수 있습니다. 예를 들어, 파일의 96.127.0.0/17 접두사를 96.127.0.0/21, 96.127.8.0/21, 96.127.32.0/19 및 96.127.64.0/18로 알릴 수 있습니다.

형식: 문자열

예: "ip_prefix": "198.51.100.2/24"

ipv6_prefix

퍼블릭 IPv6 주소 범위(CIDR 표기법)입니다. AWS에서는 구체적인 범위로 접두사를 알릴 수 있습니다.

형식: 문자열

예: "ipv6_prefix": "2001:db8:1234::/64"

region

엣지 로케이션에 대한 AWS 리전 또는 GLOBAL입니다. CLOUDFRONTROUTE53 범위는 GLOBAL입니다.

형식: 문자열

유효한 값: ap-northeast-1 | ap-northeast-2 | ap-south-1 | ap-southeast-1 | ap-southeast-2 | ca-central-1 | cn-north-1 | eu-central-1 | eu-west-1 | eu-west-2 | eu-west-3 | sa-east-1 | us-east-1 | us-east-2 | us-gov-west-1 | us-west-1 | us-west-2 | GLOBAL

예: "region": "us-east-1"

service

IP 주소 범위의 일부입니다. 모든 IP 주소 범위를 가져오려면 AMAZON을 지정합니다. 예를 들어, EC2 하위 집합의 범위는 AMAZON 하위 집합에도 있습니다. 일부 IP 주소 범위는 AMAZON 하위 집합에만 있습니다.

형식: 문자열

유효한 값: AMAZON | AMAZON_CONNECT | CLOUD9 | CLOUDFRONT | CODEBUILD | EC2 | ROUTE53 | ROUTE53_HEALTHCHECKS | S3

예: "service": "AMAZON"

JSON 파일 필터링

명령줄 도구를 다운로드하여 원하는 정보만 표시하도록 필터링할 수 있습니다.

Windows

Windows PowerShell용 AWS 도구에는 이 JSON 파일을 구문 분석하는 cmdlet인 Get-AWSPublicIpAddressRange가 포함되어 있습니다. 다음 예는 이 cmdlet의 사용법을 보여줍니다. 자세한 내용은 Querying the Public IP Address Ranges for AWSGet-AWSPublicIpAddressRange 단원을 참조하십시오.

예 1. 생성 날짜 가져오기

PS C:\> Get-AWSPublicIpAddressRange -OutputPublicationDate Wednesday, August 22, 2018 9:22:35 PM

예 2. 특정 리전에 대한 정보 가져오기

PS C:\> Get-AWSPublicIpAddressRange -Region us-east-1 IpPrefix Region Service -------- ------ ------- 23.20.0.0/14 us-east-1 AMAZON 50.16.0.0/15 us-east-1 AMAZON 50.19.0.0/16 us-east-1 AMAZON ...

예 3. 모든 IP 주소 가져오기

PS C:\> (Get-AWSPublicIpAddressRange).IpPrefix 23.20.0.0/14 27.0.0.0/22 43.250.192.0/24 ... 2406:da00:ff00::/64 2600:1fff:6000::/40 2a01:578:3::/64 2600:9000::/28

예 4. 모든 IPv4 주소 가져오기

PS C:\> Get-AWSPublicIpAddressRange | where {$_.IpAddressFormat -eq "Ipv4"} | select IpPrefix IpPrefix -------- 23.20.0.0/14 27.0.0.0/22 43.250.192.0/24 ...

예 5. 모든 IPv6 주소 가져오기

PS C:\> Get-AWSPublicIpAddressRange | where {$_.IpAddressFormat -eq "Ipv6"} | select IpPrefix IpPrefix -------- 2a05:d07c:2000::/40 2a05:d000:8000::/40 2406:dafe:2000::/40 ...

예 6. 특정 서비스에 대한 모든 IP 주소를 가져옵니다.

PS C:\> Get-AWSPublicIpAddressRange -ServiceKey CODEBUILD | select IpPrefix IpPrefix -------- 52.47.73.72/29 13.55.255.216/29 52.15.247.208/29 ...

Linux

다음 예제 명령에서는 jq 도구를 사용하여 JSON 파일의 로컬 사본을 구문 분석합니다.

예 1. 생성 날짜 가져오기

$ jq .createDate < ip-ranges.json "2016-02-18-17-22-15"

예 2. 특정 리전에 대한 정보 가져오기

$ jq '.prefixes[] | select(.region=="us-east-1")' < ip-ranges.json { "ip_prefix": "23.20.0.0/14", "region": "us-east-1", "service": "AMAZON" }, { "ip_prefix": "50.16.0.0/15", "region": "us-east-1", "service": "AMAZON" }, { "ip_prefix": "50.19.0.0/16", "region": "us-east-1", "service": "AMAZON" }, ...

예 3. 모든 IPv4 주소 가져오기

$ jq -r '.prefixes | .[].ip_prefix' < ip-ranges.json 23.20.0.0/14 27.0.0.0/22 43.250.192.0/24 ...

예 4. 모든 IPv6 주소 가져오기

$ jq -r '.ipv6_prefixes | .[].ipv6_prefix' < ip-ranges.json 2a05:d07c:2000::/40 2a05:d000:8000::/40 2406:dafe:2000::/40 ...

예 5. 특정 서비스에 대한 모든 IPv4 주소를 가져옵니다.

$ jq -r '.prefixes[] | select(.service=="CODEBUILD") | .ip_prefix' < ip-ranges.json 52.47.73.72/29 13.55.255.216/29 52.15.247.208/29 ...

예 6. 특정 리전의 특정 서비스에 대한 모든 IPv4 주소를 가져옵니다.

$ jq -r '.prefixes[] | select(.region=="us-east-1") | select(.service=="CODEBUILD") | .ip_prefix' < ip-ranges.json 34.228.4.208/28

송신 제어 구현

인스턴스에서 AWS 서비스에만 액세스하도록 허용하려면 EC2 목록에도 있는 CIDR 블록을 제외하고 AMAZON 목록에 있는 CIDR 블록에 대한 아웃바운드 트래픽을 허용하는 규칙을 사용하여 보안 그룹을 생성합니다. EC2 목록의 IP 주소를 EC2 인스턴스에 할당할 수 있습니다.

Windows PowerShell

다음 PowerShell 예는 AMAZON 목록에는 있지만 EC2 목록에는 없는 IP 주소를 가져오는 방법을 보여줍니다. 스크립트를 복사해 Select_address.ps1 파일에 저장합니다.

$amazon_addresses = Get-AWSPublicIpAddressRange -ServiceKey amazon $ec2_addresses = Get-AWSPublicIpAddressRange -ServiceKey ec2 ForEach ($address in $amazon_addresses) { if( $ec2_addresses.IpPrefix -notcontains $address.IpPrefix) { ($address).IpPrefix } }

이 스크립트는 다음과 같이 실행할 수 있습니다.

PS C:\> .\Select_address.ps1 13.32.0.0/15 13.35.0.0/16 13.248.0.0/20 13.248.16.0/21 13.248.24.0/22 13.248.28.0/22 27.0.0.0/22 43.250.192.0/24 43.250.193.0/24 ...

jq

다음 예는 모든 리전에 대해 AMAZON 목록에는 있지만 EC2 목록에는 없는 IP 주소를 가져오는 방법을 보여줍니다.

jq -r '[.prefixes[] | select(.service=="AMAZON").ip_prefix] - [.prefixes[] | select(.service=="EC2").ip_prefix] | .[]' < ip-ranges.json 52.94.22.0/24 52.94.17.0/24 52.95.154.0/23 52.95.212.0/22 54.239.0.240/28 54.239.54.0/23 52.119.224.0/21 ...

다음 예는 결과를 한 리전으로 필터링하는 방법을 보여줍니다.

jq -r '[.prefixes[] | select(.region=="us-east-1" and .service=="AMAZON").ip_prefix] - [.prefixes[] | select(.region=="us-east-1" and .service=="EC2").ip_prefix] | .[]' < ip-ranges.json

Python

다음 python 스크립트는 AMAZON 목록에는 있지만 EC2 목록에는 없는 IP 주소를 가져오는 방법을 보여줍니다. 스크립트를 복사해 get_ips.py 파일에 저장합니다.

#!/usr/bin/env python import requests ip_ranges = requests.get('https://ip-ranges.amazonaws.com/ip-ranges.json').json()['prefixes'] amazon_ips = [item['ip_prefix'] for item in ip_ranges if item["service"] == "AMAZON"] ec2_ips = [item['ip_prefix'] for item in ip_ranges if item["service"] == "EC2"] amazon_ips_less_ec2=[] for ip in amazon_ips: if ip not in ec2_ips: amazon_ips_less_ec2.append(ip) for ip in amazon_ips_less_ec2: print(str(ip))

이 스크립트는 다음과 같이 실행할 수 있습니다.

$ python ./get_ips.py 13.32.0.0/15 13.35.0.0/16 13.248.0.0/20 13.248.16.0/21 13.248.24.0/22 13.248.28.0/22 27.0.0.0/22 43.250.192.0/24 43.250.193.0/24 ...

AWS IP 주소 범위 알림

AWS IP 주소 범위가 변경될 때마다 AmazonIpSpaceChanged 주제에 대한 구독자에게 알림을 보냅니다. 페이로드에는 다음 형식의 정보가 포함되어 있습니다.

{ "create-time":"yyyy-mm-ddThh:mm:ss+00:00", "synctoken":"0123456789", "md5":"6a45316e8bc9463c9e926d5d37836d33", "url":"https://ip-ranges.amazonaws.com/ip-ranges.json" }
create-time

생성 날짜 및 시간

알림이 제공되는 순서는 정해져 있지 않습니다. 따라서 타임스탬프를 통해 올바른 순서를 확인하는 것이 좋습니다.

synctoken

게시 시간(Unix epoch 시간 형식)

md5

ip-ranges.json 파일의 암호화 해시 값입니다. 이 값을 사용하여 다운로드한 파일이 손상되었는지 여부를 확인할 수 있습니다.

url

ip-ranges.json 파일의 위치

AWS IP 주소 범위가 변경될 때마다 알림을 받으려면 Amazon SNS를 사용하여 알림을 수신하도록 다음과 같이 구독할 수 있습니다.

AWS IP 주소 범위 알림을 구독하려면

  1. https://console.aws.amazon.com/sns/v2/home에서 Amazon SNS 콘솔을 엽니다.

  2. 필요한 경우 탐색 모음에서 지역을 미국 동부(버지니아 북부)로 변경하십시오. 구독을 신청하는 SNS 알림이 이 리전에 생성되었기 때문에 이 리전을 선택해야 합니다.

  3. 탐색 창에서 [Subscriptions]를 선택합니다;.

  4. Create subscription을 선택합니다.

  5. [Create subscription] 대화 상자에서 다음 작업을 수행합니다.

    1. [Topic ARN]의 경우, 다음 Amazon 리소스 이름(ARN)을 복사합니다.

      arn:aws:sns:us-east-1:806199016981:AmazonIpSpaceChanged
    2. [Protocol]의 경우, 사용할 프로토콜을 선택합니다(예: Email).

    3. [Endpoijnt]의 경우, 알림을 받을 엔드포인트를 입력합니다(예: 이메일 주소).

    4. Create subscription을 선택합니다.

  6. 지정한 엔드포인트에서 연락이 오고 구독을 확인하라는 메시지가 표시됩니다. 예를 들어 이메일 주소를 지정한 경우, 제목이 AWS Notification - Subscription Confirmation인 이메일 메시지를 받게 됩니다. 지시에 따라 구독을 확인합니다.

알림은 엔드포인트의 가용성을 따릅니다. 따라서 JSON 파일을 주기적으로 확인하여 최신 범위를 가져왔는지 확인할 수 있습니다. Amazon SNS 안정성에 대한 자세한 내용은 https://aws.amazon.com/sns/faqs/#Reliability 단원을 참조하십시오.

이런 알림을 더 이상 받지 않기를 원하는 경우, 다음 절차를 수행해서 구독을 해제하십시오.

AWS IP 주소 범위 알림을 구독 해제하려면

  1. https://console.aws.amazon.com/sns/v2/home에서 Amazon SNS 콘솔을 엽니다.

  2. 탐색 창에서 [Subscriptions]를 선택합니다;.

  3. 구독의 확인란을 선택합니다.

  4. [Actions], [Delete subscriptions]를 차례로 선택합니다.

  5. 확인 메시지가 나타나면 삭제를 선택합니다.

Amazon SNS에 대한 자세한 내용은 Amazon Simple Notification Service 개발자 안내서를 참조하십시오.