[AWS] Public IP 과금 소식

@Shin, Jiwoo · February 13, 2024 · 8 min read

안녕하세요!👋🏻

지금까지 AWS의 EC2에 Attach되어 있는 IP 주소에 대해서는 과금하지 않았는데, 2024년 2월 1일부터 AWS Public IPv4 주소 사용이 시간당 0.005 USD 과금됩니다.

또한, 신규 AWS 프리티어 고객인 경우 매달 750시간의 Public IP 주소를 무료로 사용할 수 있습니다. AWS는 Public IP Insights라는 새로운 기능을 통해 고객이 자신의 Public IPv4 주소 사용 현황을 모니터링하고 최적화할 수 있도록 지원합니다. 이를 통해 불필요한 비용을 줄이고 IPv4 주소 사용을 효율적으로 관리할 수 있습니다.

Public IPv4 주소의 유형

청구서 정보

청구서 내역
청구서 내역

  • PublicIPv4:IdleAddress: AWS 계정에서 유휴 상태 인 모든 퍼블릭 IPv4 주소의 사용량을 보여줍니다.
  • PublicIPv4:InUseAddress: AWS 리소스에서 사용 중인 모든 퍼블릭 IPv4 주소의 사용량을 보여줍니다. 여기에는 EC2 퍼블릭 IPv4 주소, 탄력적 IP 주소 및 서비스 관리형 퍼블릭 IPv4 주소가 포함됩니다. BYOIP 주소 사용에 대한 비용이 없기 때문에 BYOIP는 포함되지 않습니다.

실제로 비용청구되는 것을 해석해보면,

'Idle' Public IPv4 주소의 경우, 시간당 $0.005의 비용이 부과됩니다. 총 58.092시간 동안 'Idle' 상태였으므로, 이에 대한 총 비용은 USD 0.29입니다.

'In-use' Public IPv4 주소는 시간당 $0.005의 비용이 부과되며, 총 5.807시간 동안 사용되어 총 비용은 USD 0.03입니다.

그리고 시간이 딱 떨어지지 않는 것으로 보아 Public IPv4 주소의 과금이 시간당이 아니라 분 단위로 이루어진다는 것을 알 수 있습니다. 이는 AWS가 Public IPv4 주소 사용에 대해 더 세밀한 과금 체계를 적용하고 있음을 의미합니다.

Public IPv4 주소 비용 최적화 방안

AWS는 아래와 같이 비용 최적화 방안을 제시하고 있습니다.

  1. IPv6 사용
  2. Public IPv4 자동 활성화 옵션 비활성화
  3. EIC(EC2 Instance Connect)를 통한 리소스 원격 연결

1. IPv6 사용

AWS에서는 IPv6 주소에 대한 비용을 부과하지 않습니다.

IPv6를 지원하는 서비스 항목

https://docs.aws.amazon.com/vpc/latest/userguide/aws-ipv6-support.html

2. Public IPv4 자동 활성화 옵션 비활성화

인스턴스를 생성하는 시점에 서브넷 또는 인스턴스에 자동 할당 옵션이 켜져 있을 경우, 리소스에 불필요한 Public IP 할당이 이루어질 수 있습니다.

공용 IPv4 주소 자동 할당을 끄는 위치
공용 IPv4 주소 자동 할당을 끄는 위치
따라서, 위 그림에 표시된 것처럼 기본 서브넷에서 공용 IPv4 주소 자동 할당을 비활성화하는 것이 좋습니다. 예를 들어 Amazon ECS 배포 또는 RDS 데이터베이스를 호스팅하는 서브넷에는 퍼블릭 IPv4 주소가 필요하지 않을 수 있습니다.

3. EIC를 통한 리소스 원격 연결

기존에는 VPC 내의 리소스에 원격으로 액세스하려면 Bastion Host에 Elastic IP를 할당하는 방식을 이용하고 있습니다.

이제는 EIC를 사용하여 IPv4에 대해서 비용을 절감하는 것을 권장드립니다.

EIC를 사용하게 되면 이점은 아래와 같습니다

  • Public IPv4 주소 비할당
  • IGW나 NAT 게이트웨이없이 접근 가능
  • 에이전트 설치 불필요
  • IAM 및 보안그룹을 통한 액세스 제어
  • 콘솔에서 연결 가능
  • 사용에 따른 추가 비용 없음

Public IP 에 대해 추적하고 편리하게 관리하기 위한 명령어

사실 AWS에서 제공하는 Amazon VPC IPAM 퍼블릭 IP Insights로 퍼블릭 IPv4 사용량 모니터링할 수 있지만 public IP에 대해 좀 더 쉽게(?) 관리할 수 있는 명령어들을 공유드립니다.

명령어는 아래의 목적을 차례대로 갖고 있습니다.

  1. VPC 내에서 사용되지 않고 있는(즉, 어떤 인스턴스에도 연결되지 않은) Elastic IP 주소를 조회
  2. 네트워크 인터페이스의 정보를 조회하여 공용 IP 주소가 연결된 인터페이스를 필터링

    2.1. 서비스 관리형 퍼블릭 IPv4 또한 포함합니다.

  3. AWS Global Accelerator와 연결된 퍼블릭 IPv4 주소 추적
  4. AWS Site-to-Site VPN 연결과 연결된 퍼블릭 IPv4 주소 추적

mac 환경

사전 준비 : brew install jq 또는 "AWS CLI에서 직접적으로 특정 필드만 추출하는 기능을 제공하는 --query 옵션을 사용해도 무방합니다."

# VPC 내에서 사용되지 않고 있는(즉, 어떤 인스턴스에도 연결되지 않은) Elastic IP 주소를 조회
aws ec2 describe-addresses --region=[리전정보] --filters "Name=domain,Values=vpc" | jq '.Addresses | map(select(.AssociationId == null)) | .[] | {PublicIp: .PublicIp, AllocationId: .AllocationId, Region: .NetworkBorderGroup, Status: "미사용", NetworkInterfaceId: .NetworkInterfaceId}'


# 네트워크 인터페이스의 정보를 조회하여 공용 IP 주소가 연결된 인터페이스를 필터링
aws ec2 describe-network-interfaces --region=[리전정보] | jq '.NetworkInterfaces | map(select(.Association != null)) | .[] | {PublicIp: .Association.PublicIp, Region: .AvailabilityZone, Status: if .Status == "in-use" then "사용" else "미사용", AllocationId: .Association.AllocationId, NetworkInterfaceId: .NetworkInterfaceId}'


# AWS Global Accelerator와 연결된 퍼블릭 IPv4 주소 추적
aws globalaccelerator list-accelerators --region us-west-2 | jq '.Accelerators[].IpSets[].IpAddresses[]'


# AWS Site-to-Site VPN 연결과 연결된 퍼블릭 IPv4 주소 추적
aws ec2 describe-vpn-connections | jq '.VpnConnections[].VgwTelemetry[].OutsideIpAddress'

참고사이트

  1. Public IP
  2. Public IP 프리티어
  3. Public IP Optimizer
  4. EIC 모범 사례
@Shin, Jiwoo
다양한 관점에서 문제를 해결하길 좋아합니다.