【问题标题】:How can I list all resources that belongs to a certain VPC?如何列出属于某个 VPC 的所有资源?
【发布时间】:2022-02-17 00:48:03
【问题描述】:

在我的 AWS 账户中,我的 VPC 很少。我正在尝试找到一种方法来列出位于某个 VPC 下的所有资源。

谢谢!!

【问题讨论】:

  • 您可以通过查看弹性网络接口 (ENI) 进行存储,因为这是资源连接到 VPC(例如 Amazon EC2、Amazon RDS)的方式。想要列出这些资源有什么特别的原因吗? (请让我们知道更多细节,我们可能会给您更好的答案。)
  • 好吧,我的账户下有几个VPC,每个下有很多资源。我发现管理所有这些资源非常困难。作为解决这种混乱的第一步,我决定手动映射我的资源并验证是否可以做一些事情以节省成本。

标签: amazon-web-services amazon-vpc


【解决方案1】:

您可以通过三种方式进行操作:AWS CLI、AWS 控制台或代码。

AWS CLI


您可以使用 AWS CLI 列出与 VPC 关联的所有 ENI,并使用 --query 参数美化输出以获取包含所需字段(AZ、instance-id 等)的资源列表。

  1.   `aws ec2 describe-network-interfaces --filters Name=vpc-id,Values=<vpc-id> --query  'NetworkInterfaces[*].[AvailabilityZone, OwnerId, Attachment.InstanceId, PrivateIpAddresses[*].Association.PublicIp]'
    
  2.   `aws ec2 describe-network-interfaces --filters Name=vpc-id,Values=<vpc-id> --query  'NetworkInterfaces[*].[RequesterId,Description]'
    

    原始输出样本(VPC 上只有一个实例):

     "NetworkInterfaces": [
         {
             "Association": {
                 "IpOwnerId": "amazon",
                 "PublicDnsName": "ec2-54-196-57-169.compute-1.amazonaws.com",
                 "PublicIp": "54.196.57.169"
             },
             "Attachment": {
                 "AttachTime": "2020-08-24T10:59:16+00:00",
                 "AttachmentId": "eni-attach-047e562690aabbffd",
                 "DeleteOnTermination": true,
                 "DeviceIndex": 0,
                 "InstanceId": "i-0fe495a6c17bd0f82",
                 "InstanceOwnerId": "570398916848",
                 "Status": "attached"
             },
             "AvailabilityZone": "us-east-1d",
             "Description": "",
             "Groups": [
                 {
                     "GroupName": "launch-wizard-1",
                     "GroupId": "sg-0aa7d8257bb487e1b"
                 }
             ],
             "InterfaceType": "interface",
             "Ipv6Addresses": [],
             "MacAddress": "0e:58:38:33:9a:31",
             "NetworkInterfaceId": "eni-0b20855178d276783",
             "OwnerId": "570398916848",
             "PrivateDnsName": "ip-172-31-34-30.ec2.internal",
             "PrivateIpAddress": "172.31.34.30",
             "PrivateIpAddresses": [
                 {
                     "Association": {
                         "IpOwnerId": "amazon",
                         "PublicDnsName": "ec2-54-196-57-169.compute-1.amazonaws.com",
                         "PublicIp": "54.196.57.169"
                     },
                     "Primary": true,
                     "PrivateDnsName": "ip-172-31-34-30.ec2.internal",
                     "PrivateIpAddress": "172.31.34.30"
                 }
             ],
             "RequesterManaged": false,
             "SourceDestCheck": true,
             "Status": "in-use",
             "SubnetId": "subnet-e2bc5fbd",
             "TagSet": [],
             "VpcId": "vpc-6ad2e110"
         }
     ]
    

现在过滤:

  1. 对于第一个--query

     [
         "us-east-1d",
         "57039816848",
         "i-0fe495a6c17bd0f82",
         [
             "44.196.57.169"
         ]
     ]
    
  2. 对于第二个--query(另一个 VPC):

     [
         "amazon-elasticache",
         "ElastiCache alon-001"
     ],
     [
         "amazon-elasticache",
         "ElastiCache alon-002"
     ],
     [
         "975289786086",
         "arn:aws:ecs:us-east-2:57039916848:attachment/22a90802-fae7-4afb-9a7e-43e6f4be8ca4"
     ],
     [
         "074689309192",
         "Interface for NAT Gateway nat-069344579d8bda20"
     ],
     [
         "amazon-elb",
         "ELB app/EC2Co-EcsEl-YX74WCWEGOK/0b6d7bc60b540b1"
     ],
     [
         "amazon-elb",
         "ELB app/EC2Co-EcsEl-YX74WCWGGOK/0b6bd7c60b540b1"
     ],
     [
         "amazon-elasticache",
         "ElastiCache alon-003"
     ]
    

AWS 控制台


您可以使用 AWS 控制台执行相同的操作。 在 EC2->Network Interfaces 下,在搜索栏中搜索所需的 vpc-id

代码


使用名为 vpc-inside.py 的 Python 脚本,您可以描述您的所有 VPC 资源。

usage: vpc-inside.py [-h] -v VPC [-r REGION] [-p PROFILE]

optional arguments:
  -h, --help                     show this help message and exit
  -v VPC, --vpc VPC              The VPC to annihilate
  -r REGION, --region REGION     AWS region that the VPC resides in
  -p PROFILE, --profile PROFILE  AWS profile

输出将如下所示:


EKSs in VPC vpc-07ef7f777429cfd82:
Omikron
--------------------------------------------
ASGs in VPC vpc-07ef7f777429cfd82:
eks-pooks-9ebf225b-70a9-a026-034f-c7431df9b7ba resides in vpc-07ef7f777429cfd82
eks-pooks-9ebf225b-70a9-a026-034f-c7431df9b7ba
--------------------------------------------
RDSs in VPC vpc-07ef7f777429cfd82:
--------------------------------------------
EC2s in VPC vpc-07ef7f777429cfd82:
i-0c63874d77ea2ba78
i-043740f224015e69e
--------------------------------------------
Lambdas in VPC vpc-07ef7f777429cfd82:
--------------------------------------------
Classic ELBs in VPC vpc-07ef7f777429cfd82:
--------------------------------------------
ELBs V2 in VPC vpc-07ef7f777429cfd82:
--------------------------------------------
NAT GWs in VPC vpc-07ef7f777429cfd82:
--------------------------------------------
VPC EndPoints in VPC vpc-07ef7f777429cfd82:
--------------------------------------------
IGWs in VPC vpc-07ef7f777429cfd82:
--------------------------------------------
ENIs in VPC vpc-07ef7f777429cfd82:
eni-079231232dc136305
eni-05ff227eca8341a08
eni-0c01b2871887ac3f7
eni-00e11d4f9590161b4
--------------------------------------------
Security Groups in VPC vpc-07ef7f777429cfd82:
sg-0b4554a65e1560745
sg-0f93574d6b180b263
--------------------------------------------
Routing tables in VPC vpc-07ef7f777429cfd82:
rtb-0694bdbdd696b2bed
rtb-072ec82a18d8a04ba
--------------------------------------------
ACLs in VPC vpc-07ef7f777429cfd82:
acl-0c0087eabf9335940
--------------------------------------------
Subnets in VPC vpc-07ef7f777429cfd82:
subnet-0b8cc1132727e5b5d
subnet-0e47ee92a9ca80280
subnet-0c25990d9a138616b
--------------------------------------------

【讨论】:

    【解决方案2】:

    VPC 主要包含 EC2 实例、RDS 实例、负载均衡器和 Lambda 函数。另外,在下面使用 EC2 的东西,比如 Elasticache。这些是连接到 VPC 的资源类型。

    有人建议使用标签编辑器查找资源:Is there a way to list all resources in AWS

    我也喜欢aws inventory,它只是在您的浏览器中运行,并且在显示资源方面做得很好。只需给它一个访问密钥和秘密密钥即可运行。

    【讨论】:

      【解决方案3】:

      您可以在 AWS Config > 高级查询中尝试并运行以下查询:

      所有资源: 选择 资源标识, 资源名称, 资源类型

      与 VPC 直接关联的资源: 选择 资源标识, 资源名称, 资源类型 在哪里 关系.resourceId = 'vpc-02368dae78f1387e5'

      查询可以进一步增强,请参阅一些预配置查询的示例。

      【讨论】:

      • 这很有帮助,而且让我很快就可以找到一堆我在学习时创建的孤立的东西。
      • 重要提示:要使用 AWS Config 高级查询,您必须首先转到 AWS Config -> 设置,然后编辑以打开记录。它可能让你设置了一个 S3 存储桶等......
      【解决方案4】:

      没有内置服务可以轻松做到这一点。

      找到所有资源的最大希望是以编程方式循环支持支持的资源:

      • 子网ID
      • VpcId

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-03
        • 1970-01-01
        • 1970-01-01
        • 2020-03-08
        相关资源
        最近更新 更多