Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
如何查找在我的日志中但不在我的 Amazon VPC 中的 IP 地址?
我想查找一个 IP 地址,它在我的日志中,但不在我的 Amazon Virtual Private Cloud (Amazon VPC) 中。
解决方案
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
查看 CloudTrail 事件
要使用 AWS CloudTrail 事件查找您的 IP 地址,请完成以下步骤:
要使用 AllocateAddress 事件检查您是否向 AWS 账户分配了弹性 IP 地址,请运行以下 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 能否找到这些事件,请在没有 jq 筛选器的情况下运行以下 lookup-events 命令:
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 地址管理器 (IPAM) 或 AWS CLI 在您的 IP 地址历史记录中查找 IP 地址。
ip-ranges.json
完成以下步骤:
- 要查看属于 AWS 服务的所有公共 IP 地址的列表,请查看 ip-ranges.json 文件。
- 要筛选列表,请使用以下变量:
"ip_prefix" "region" "service"
IPAM
要使用 IPAM 跟踪一段时间内使用特定 IP 地址的 VPC 或资源,请完成以下步骤:
- 打开 IPAM 控制台。
- 在导航窗格中,选择 Search IP history(搜索 IP 历史记录)。
- 输入您的 IP 地址。
- 选择 Search(搜索)。
搜索结果显示以下项目:
- 与 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 管理员账户
完成以下步骤:
- 在您的组织中,选择一个 AWS 账户作为管理账户。
- 要将您的账户 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 替换为您的 AWS 账户 ID。
在管理员帐户中创建 IPAM
在您的 IPAM 管理员账户中完成以下步骤:
-
要创建 IPAM,请运行以下 create-ipam 命令:
aws ec2 create-ipam \ --description "Org-wide IPAM" \ --operating-regions RegionName=us-east-1 RegionName=us-west-2**注意:**将 us-east-1 和 us-west-2 替换为您的区域。
此 IPAM 现在可以收集和管理多个账户的 CIDR 使用情况。
-
要创建资源发现,请运行以下 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 替换为您的区域。
-
要将资源发现与 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 资源滥用情况。
- 语言
- 中文 (简体)
