내용으로 건너뛰기

로그에는 있지만 Amazon VPC에는 없는 IP 주소를를 찾으려면 어떻게 해야 합니까?

8분 분량
0

로그에는 있지만 Amazon Virtual Private Cloud(Amazon VPC)에는 없는 IP 주소를 찾으려고 합니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

CloudTrail 이벤트 검토

AWS CloudTrail 이벤트를 사용하여 IP 주소를 찾으려면 다음 단계를 완료하십시오.

AllocateAddress 이벤트를 사용하여 탄력적 IP 주소를 AWS 계정에 할당했는지 확인하려면 다음 lookup-events 명령을 실행합니다.

aws cloudtrail lookup-events \--region example-region \
--lookup-attributes AttributeKey=EventName,AttributeValue=AllocateAddress \
--start-time example-yyyy-mm-dd \
--query 'Events[].Resources[?ResourceName == 'example-eip-address'].{ResourceType:ResourceType,IP:ResourceName}[]' --output table

참고: example-eip-address를 탄력적 IP 주소로 바꾸고 example-yyyy-mm-dd를 시작 날짜로 바꾸고 example-region을 AWS 리전으로 바꾸십시오. 이전 CloudTrail 명령은 Amazon Elastic Compute Cloud(Amazon EC2) 퍼블릭 IPv4 주소를 나열하지 않습니다.

AssociateAddress 이벤트와 AllocationID 필터를 사용하여 탄력적 IP 주소를 사용하는 서비스를 보려면 다음 lookup-events 명령을 실행합니다.

aws cloudtrail lookup-events \--region example-region \
--lookup-attributes AttributeKey=ResourceName,AttributeValue=example-allocation-id \
--start-time example-yyyy-mm-dd \

참고: example-allocation-id를 탄력적 IP 주소 ID로 바꾸고 example-yyyy-mm-dd를 시작 날짜로 바꾸고 example-region을 사용 중인 리전으로 바꾸십시오. 위 명령은 탄력적 IP 주소 할당의 전체 기록을 보여줍니다. 선택한 날짜를 기준으로 가장 늦은 할당부터 가장 빠른 할당의 순서로 보여줍니다.

CreateNetworkInterface 이벤트를 사용하여 프라이빗 IP 주소를 탄력적 네트워크 인터페이스에 할당했는지 확인하려면 다음 lookup-events 명령을 실행합니다.

aws cloudtrail lookup-events \--region example-region \
--lookup-attributes AttributeKey=EventName,AttributeValue=CreateNetworkInterface \
--start-time example-yyyy-mm-dd \
--query 'Events[].CloudTrailEvent' --output text | jq -r "select(.responseElements.networkInterface.privateIpAddressesSet.item[].privateIpAddress == \"example-private-ip-address\")"

참고: example-private-ip-address를 프라이빗 IP 주소로 바꾸고 example-yyyy-mm-dd를 시작 날짜로 바꾸고 example-region을 사용 중인 리전으로 바꾸십시오. 위의 명령이 일치하는 이벤트를 반환하지 않으면 출력이 표시되지 않습니다.

AttachNetworkInterface 이벤트를 사용하여 리소스가 과거에 네트워크 인터페이스를 사용했는지 확인하려면 다음 lookup-events 명령을 실행합니다.

aws cloudtrail lookup-events \--region example-region \
--lookup-attributes AttributeKey=EventName,AttributeValue=AttachNetworkInterface \
--start-time example-yyyy-mm-dd \
--query 'Events[].CloudTrailEvent' --output text | jq -r "select(.requestParameters.networkInterfaceId == \"example-eni-id\")"

참고: example-eni-id를 네트워크 인터페이스 ID로 바꾸고 example-yyyy-mm-dd를 시작 날짜로 바꾸고 example-region을 사용 중인 리전으로 바꾸십시오.

CloudTrail에서 이벤트를 찾을 수 있는지 확인하려면 다음 lookup-events 명령을 jq 필터 없이 실행합니다.

aws cloudtrail lookup-events \
--region example-region \
--lookup-attributes AttributeKey=EventName,AttributeValue=CreateNetworkInterface \
--start-time example-yyyy-mm-dd

참고: example-yyyy-mm-dd를 시작 날짜로 바꾸고 example-region을 사용 중인 리전으로 바꾸십시오.

RunInstances 이벤트를 사용하여 인스턴스 시작 시 프라이빗 IP 주소를 인스턴스와 연결했는지 확인하려면 다음 lookup-events 명령을 실행합니다.

aws cloudtrail lookup-events \--region example-region \
--lookup-attributes AttributeKey=EventName,AttributeValue=RunInstances \
--start-time example-yyyy-mm-dd \
--query 'Events[].CloudTrailEvent' --output text | jq -r "select(.responseElements.instancesSet.items[].privateIpAddress == \"example-private-ip-address\") | [.responseElements.instancesSet.items[].networkInterfaceSet.items[]] "

참고: example-private-ip-address를 프라이빗 IP 주소로 바꾸고 example-yyyy-mm-dd를 시작 날짜로 바꾸고 example-region을 사용 중인 리전으로 바꾸십시오.

AssignPrivateIpAddresses 이벤트를 사용하여 프라이빗 IP 주소를 네트워크 인터페이스와 연결했는지 확인하려면 다음 lookup-events 명령을 실행합니다.

aws cloudtrail lookup-events \--region example-region \
--lookup-attributes AttributeKey=EventName,AttributeValue=AssignPrivateIpAddresses \
--start-time example-yyyy-mm-dd \
--query 'Events[].CloudTrailEvent' --output text | jq -r "select(.responseElements.assignedPrivateIpAddressesSet.assignedPrivateIpAddressSetType[].privateIpAddress == \"example-private-ip-address\" ) | {requestParameters,responseElements}"

참고: example-private-ip-address를 프라이빗 IP 주소로 바꾸고 example-yyyy-mm-dd를 시작 날짜로 바꾸고 example-region을 사용 중인 리전으로 바꾸십시오.

AssignIpv6Addresses 이벤트를 사용하여 IPv6 주소를 지정된 네트워크 인터페이스에 할당했는지 확인하려면 다음 lookup-events 명령을 실행합니다.

aws cloudtrail lookup-events \--region example-region \
--lookup-attributes AttributeKey=EventName,AttributeValue=AssignIpv6Addresses \
--start-time example-yyyy-mm-dd \
--query 'Events[].CloudTrailEvent' --output text | jq -r "select(.responseElements.AssignIpv6AddressesResponse.assignedIpv6Addresses.item == \"example-IPv6-address\") | [.responseElements.AssignIpv6AddressesResponse] "

참고: example-IPv6-address를 IPv6 주소로 바꾸고 example-yyyy-mm-dd를 시작 날짜로 바꾸고 example-region을 사용 중인 리전으로 바꾸십시오.

CloudWatch Logs를 사용하여 로그 데이터 분석

참고: Amazon CloudWatch Logs에 로그 이벤트를 전송하려면 추적을 구성하십시오. 자세한 내용은 Amazon CloudWatch Logs를 사용한 CloudTrail 로그 파일 모니터링을 참조하십시오.

계정에 할당된 IPv4 주소 확인

이전 탄력적 IP 주소 할당 및 해당 퍼블릭 IP 주소를 사용한 서비스를 보려면 다음 이벤트를 사용합니다.

fields      eventTime as Time,
     userIdentity.accountId as AccountID,
     userIdentity.principalId as Principal,
     awsRegion as Region,
     eventName as Action,
     requestParameters.allocationId as AssociateAddress_AllocationID,
     requestParameters.instanceId as InstanceID,
     requestParameters.privateIpAddress as PrivateIP,
     responseElements.allocationId as AllocateAddress_AllocationID,
     responseElements.publicIp as EIP
| filter

     eventName = "AllocateAddress" or
     eventName = "AssociateAddress" and
     # AssociateAddress does not indicate resources outside EC2 instances.
     (
          EIP = "example-public-ip-addresses" or
          AssociateAddress_AllocationID = "example-allocation-id"
     )
| sort @timestamp desc

참고: example-public-ip-addresses를 퍼블릭 IP 주소로 바꾸고 example-allocation-id를 할당 ID로 바꾸십시오.

이전 프라이빗 IP 주소 할당을 찾으려면 다음 이벤트를 사용합니다.

CreateNetworkInterface 이벤트:

parse @message '"privateIpAddressesSet":{"item":[{"privateIpAddress":"*"' as PrivateIP| fields
eventTime as Time,
userIdentity.accountId as AccountID,
userIdentity.principalId as Principal,
awsRegion as Region,
eventName as Action,
responseElements.networkInterface.networkInterfaceId as ENI
| filter
eventName = "CreateNetworkInterface" and
(
PrivateIP = "example-private-ip-addresses"
)
| sort @timestamp desc

참고: example-private-ip-addresses를 IP 주소로 바꾸십시오.

RunInstances 이벤트:

parse @message '{"privateIpAddress":"*"' as PrivateIP|fields
     eventTime as Time,
     userIdentity.accountId as AccountID,
     userIdentity.principalId as Principal,
     awsRegion as Region,
     eventName as Action
| filter
     eventName = "RunInstances" and
     (
          PrivateIP = "example-private-ip-addresses"
     )
| sort @timestamp desc

참고: example-private-ip-addresses를 IP 주소로 바꾸십시오.

AssignPrivateIpAddress 이벤트:

parse @message '"assignedPrivateIpAddressSetType":[{*}]' as PrivateIpAddress| fields
     eventTime as Time,
     userIdentity.accountId as AccountID,
     userIdentity.principalId as Principal,
     awsRegion as Region,
     eventName as Action
| filter
     eventName = "AssignPrivateIpAddresses" and
     (
          PrivateIpAddress like "example-private-ip-addresses"
     )
| sort @timestamp desc

Note: Replace example-private-ip-addresses with your IP

참고: example-private-ip-addresses를 IP 주소로 바꾸십시오.

네트워크 인터페이스를 사용한 리소스를 확인합니다.

fields      eventTime as Time,
     userIdentity.accountId as AccountID,
     userIdentity.principalId as Principal,
     awsRegion as Region,
     eventName as Action,
     requestParameters.instanceId as InstanceID,
     requestParameters.networkInterfaceId as ENI
| filter
     eventName = "AttachNetworkInterface" and
     (
          ENI = "example-eni-id"
     )
| sort @timestamp desc

참고: example-eni-id를 네트워크 인터페이스 ID로 바꾸십시오.

계정에 할당된 IPv6 주소 확인

이전 프라이빗 IP 주소 할당을 찾으려면 다음 이벤트를 사용합니다.

AssignIpv6Addresses 이벤트:

fields    eventTime as Time,
    userIdentity.accountId as AccountID,
    userIdentity.principalId as Principal,
    awsRegion as Region,
    eventName as Action,
    responseElements.AssignIpv6AddressesResponse.assignedIpv6Addresses.item as IPv6
| filter
    eventName = "AssignIpv6Addresses" and
    (
        IPv6 = "example-ipv6-addresses"
    )
| sort @timestamp desc

참고: example-ipv6-addresses를 IP 주소로 바꾸십시오.

RunInstances 이벤트:

fields    eventTime as Time,
    userIdentity.accountId as AccountID,
    userIdentity.principalId as Principal,
    awsRegion as Region,
    eventName as Action,
    responseElements.AssignIpv6AddressesResponse.assignedIpv6Addresses.item as IPv6
| filter
    eventName = "RunInstances" and
    (
        PrivateIP = "example-private-ip-addresses"
    )
| sort @timestamp desc

참고: example-private-ip-addresses를 IP 주소로 바꾸십시오.

CreateNetworkInterface 이벤트:

parse @message '"ipv6AddressesSet":{"items":[{"ipv6Address":"*"' as IPv6| fields
     eventTime as Time,
     userIdentity.accountId as AccountID,
     userIdentity.principalId as Principal,
     awsRegion as Region,
     eventName as Action,
     responseElements.instancesSet.items.0.instanceId as InstanceID
| filter
     eventName = "CreateNetworkInterface" and
     (
         IPv6 = "example-ipv6-addresses"
     )
| sort @timestamp desc

참고: example-ipv6-addresses를 IP 주소로 바꾸십시오.

네트워크 인터페이스를 사용한 리소스를 확인합니다.

fields      eventTime as Time,
     userIdentity.accountId as AccountID,
     userIdentity.principalId as Principal,
     awsRegion as Region,
     eventName as Action,
     requestParameters.instanceId as InstanceID,
     requestParameters.networkInterfaceId as ENI
| filter
     eventName = "AttachNetworkInterface" and
     (
         ENI = "example-eni-id" or
     )
| sort @timestamp desc

참고: example-eni-id를 네트워크 인터페이스 ID로 바꾸십시오.

(선택 사항) 퍼블릭 IP 주소의 BGP 접두사ASN이 AWS IP 주소인지 확인하려면 다음 whois 명령을 실행합니다.

whois -h whois.cymru.com " -v example-public-ip-address"

참고: example-public-ip-address를 퍼블릭 IP 주소로 바꾸십시오.

IP 주소 기록 검토

ip-ranges.json 파일, Amazon VPC IP Address Manager(IPAM) 또는 AWS CLI를 사용하여 IP 주소 기록에서 IP 주소를 찾을 수 있습니다.

ip-ranges.json

다음 단계를 완료하십시오.

  1. AWS 서비스에 속하는 모든 퍼블릭 IP 주소 목록을 보려면 ip-ranges.json 파일을 확인하십시오.
  2. 목록을 필터링하려면 다음 변수를 사용하십시오.
    "ip_prefix"
    "region"
    "service"

IPAM

IPAM을 사용하여 시간 경과에 따라 특정 IP 주소를 사용한 VPC 또는 리소스를 추적하려면 다음 단계를 완료하십시오.

  1. IPAM 콘솔을 엽니다.
  2. 탐색 창에서 IP 기록 검색을 선택합니다.
  3. IP 주소를 입력합니다.
  4. 검색을 선택합니다.

검색 결과에는 다음 항목이 표시됩니다.

  • IP 주소와 연결된 VPC 또는 네트워크 인터페이스
  • IP 주소가 할당된 시간 범위
  • 관련 리소스

AWS CLI

AWS CLI를 사용하여 IP 주소 정보를 가져오려면 다음 get-ipam-address-history 명령을 실행합니다.

aws ec2 get-ipam-address-history \
 --ipam-scope-id ipam-scope-###### \
 --cidr 10.0.1.5 \
 --region us-east-1

참고: AWS Organizations를 사용하는 경우 조직 수준에서 IP 주소 검색을 확장하여 여러 멤버 계정을 중앙에서 추적할 수 있습니다.

IPAM 관리자 계정 지정

다음 단계를 완료하십시오.

  1. 조직에서 관리 계정으로 사용할 AWS 계정을 선택합니다.
  2. 계정 ID를 조직의 IPAM 관리자로 만들려면 관리 계정에서 다음 enable-aws-service-access 명령을 실행합니다.
    aws organizations enable-aws-service-access \
     --service-principal ipam.amazonaws.comaws ec2 enable-ipam-organization-admin-account \
     --delegated-admin-account-id YOUR_ACCOUNT_ID

참고: YOUR_ACCOUNT_ID를 해당 계정 ID로 바꾸십시오.

관리자 계정에서 IPAM 만들기

IPAM 관리자 계정에서 다음 단계를 완료하십시오.

  1. IPAM을 만들려면 다음 create-ipam 명령을 실행합니다.

    aws ec2 create-ipam \
     --description "Org-wide IPAM" \
     --operating-regions RegionName=us-east-1 RegionName=us-west-2

    참고: us-east-1us-west-2를 사용 중인 리전으로 바꾸십시오.

    이제 이 IPAM은 여러 계정의 CIDR 사용을 수집하고 관리할 수 있습니다.

  2. 리소스 검색을 만들려면 다음 create-ipam-resource-discovery 명령을 실행합니다.

    aws ec2 create-ipam-resource-discovery \
    --description "Org-wide Discovery" \
    --operating-regions RegionName=us-east-1 \
    --tag-specifications ResourceType=ipam-resource-discovery,Tags=[{Key=Org,Value=Enabled}]

    참고: us-east-1을 사용 중인 리전으로 바꾸십시오.

  3. 리소스 검색을 IPAM과 연결하려면 다음 associate-ipam-resource-discovery 명령을 실행합니다.

    aws ec2 associate-ipam-resource-discovery \
     --ipam-id ipam-######## \
     --ipam-resource-discovery-id ipam-res-disco-####

리소스 검색을 다른 계정과 공유할 수 있습니다.

참고: 조직의 각 멤버 계정은 리소스 데이터를 IPAM과 공유해야 합니다. 동일한 조직을 사용 중이며 중앙 집중식 검색을 설정한 경우 리소스 데이터가 자동으로 공유됩니다. IPAM 대시보드를 사용하여 VPC 및 IP 주소와 같은 검색된 리소스를 모니터링할 수 있습니다.

중요:

  • 조직의 계정 또는 VPC에 할당한 모든 IP 주소는 IPAM의 IP 주소 기록에 표시됩니다.
  • IPAM 콘솔 또는 AWS CLI를 사용하여 IP 주소의 과거 사용 기록을 쿼리할 수 있습니다.
  • IPAM 기록에 있는 IP 주소가 AWS에서 가져온 것이고 악의적인 활동이 있는 경우 AWS 리소스 남용을 신고하십시오.
AWS 공식업데이트됨 2달 전