有没有办法在AWS帐户中找到未使用的VPC?
我指的是没有任何EC2实例、RDS和其他相关服务的VPC。
一种方法是在正在运行的实例、RDS和其他服务中使用VPC ID进行搜索,以确定它是否在使用中。有没有其他方法或AWS CLI来查找未使用的VPC?
请使用以下脚本为您在所有地区的AWS帐户识别未使用的子网:
用法:
逻辑:
>
查询所有区域的所有子网以获取AWS帐户
获取子网当前可用的IP详细信息(由AWS API提供)
获取子网CIDR,计算总IP计数,减去5个计数(5个,因为2个用于网络和广播,另外3个默认由AWS保留)
然后,减去总IP-可用=当前使用的IP。如果使用的IP=0,可以清理子网
import boto3
import sys
import csv
import ipaddress
def describe_regions(session):
try:
aws_regions = []
ec2_client = session.client('ec2')
response_regions = ec2_client.describe_regions()['Regions']
for region in response_regions:
aws_regions.append(region['RegionName'])
return aws_regions
except Exception:
print("Unexpected error:", sys.exc_info()[0])
def describe_vpc(ec2,aws_region,writer,profile_name):
try:
response_vpc = ec2.describe_vpcs()['Vpcs']
for vpc in response_vpc:
print('=' * 50)
count = 0
filters = [
{'Name': 'vpc-id',
'Values': [vpc['VpcId']]}
]
response_subnets = ec2.describe_subnets(Filters=filters)['Subnets']
for subnets in response_subnets:
count += 1
total_count = (ipaddress.ip_network(subnets['CidrBlock']).num_addresses) - 5
Used_IP = total_count - subnets['AvailableIpAddressCount']
writer.writerow({"Account": profile_name, "VpcId": vpc['VpcId'], "VpcCidr": vpc['CidrBlock'], "Region": aws_region,
"Subnet": subnets['CidrBlock'], "SubnetId": subnets['SubnetId'], "AvailableIPv4": subnets['AvailableIpAddressCount'], "Total_Network_IP": str(total_count),
"AvailabilityZone": subnets['AvailabilityZone'],"Used_IP": str(Used_IP)})
print({"Account": profile_name, "VpcId": vpc['VpcId'], "VpcCidr": vpc['CidrBlock'], "Region": aws_region,
"Subnet": subnets['CidrBlock'], "SubnetId": subnets['SubnetId'], "AvailableIPv4": subnets['AvailableIpAddressCount'], "Total_Network_IP": str(total_count),
"AvailabilityZone": subnets['AvailabilityZone'],"Used_IP": str(Used_IP)})
print('='*50)
except Exception:
print("Unexpected error:", sys.exc_info()[0])
def main():
try:
accounts=["<Account names here as list>"]
for profile in accounts:
session = boto3.session.Session(
profile_name=profile
)
file_name = profile
print("File Name: " +file_name)
profile_name = profile
print("Profile_name: " +profile_name)
with open(file_name + ".csv", "w", newline="") as csvfile:
fieldnames = [
"Account", "VpcId",
"VpcCidr", "Region",
"Subnet", "SubnetId",
"AvailableIPv4","Total_Network_IP",
"AvailabilityZone","Used_IP"
]
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
aws_regions = describe_regions(session)
for aws_region in aws_regions:
ec2 = session.client('ec2', region_name=aws_region)
print("Scanning region: {}".format(aws_region))
describe_vpc(ec2,aws_region, writer, profile_name)
except Exception:
print("Unexpected error:", sys.exc_info()[0])
raise
if __name__ == "__main__":
main()
这听起来可能很疯狂,但我很确定您可以尝试删除VPC。它应该防止删除任何在其中运行资源的VPC。当然,您应该在这样做之前快速尝试一下。但它可能是最快/最干净的。
VPC中包含许多资源,例如:
您可以通过弹性网络接口(Elastic Network Interface,ENI)进行迭代,而不是尝试遍历这些服务中的每一项,因为所有东西都通过ENI连接到VPC。
下面是一个可以使用AWS命令行界面(CLI)运行的命令,显示连接到给定VPC的ENIs:
aws ec2 describe-network-interfaces --filters 'Name=vpc-id,Values=vpc-abcd1234' --query 'NetworkInterfaces[*].NetworkInterfaceId'
如果没有返回ENI,那么您可能会将其称为未使用的VPC。
我有一个根帐户是1234(帐户ID),我有启用MFA的身份验证,我的用户名是myuser12。我可以使用帐户ID、用户名和密码登录。它将请求MFA令牌代码。一旦我输入了令牌代码。我可以在我的根帐户下查看特定位置的实例。 我可以使用我的角色(在我的情况下,所有帐户的角色都是相同的)以及该角色的任何别名将角色切换到新帐户(5678)。切换角色完成后,我可以在特定位置看到新帐户下的所有实例。 通过网络控
我有一个aws组织,有几个S3桶和成员帐户。我在其中一个S3 bucket中添加了bucket策略,允许根据aws在下面URL中提供的文档从成员帐户访问它。 但是在登录了特定的会员账号之后,我仍然无法在那里看到S3的bucket。所以请告诉我这里出了什么问题。
使用AWS CLI时,它会引用位于~/.AWS目录中的凭据和配置文件。您可以使用--profile标志来指示需要哪个帐户。例如: 等 但是我对python 3和boto 3的脚本是新手,我想在那里做同样的事情。如何使用python在AWS帐户之间切换?
我刚刚开始和AWS一起工作,学习AWS。我正在使用AWS移动中心的服务,到目前为止已经设置了登录 一切正常,现在我正在处理忘记密码和更新密码。 问题是,AWS设置忘记密码的方式是: 首先输入用户名,然后在用户输入用户名后,AWS通过SMS向与该用户名关联的电话号码发送验证码。 这是一个问题,因为这意味着任何人都可以输入任何用户名,并会发送一条短信,导致我的短信付款增加,老实说,这看起来很草率。 我
我正在使用AWS CDK来构建我的lambda,我想从lambda的CDK堆栈中注册endpoint。 我发现我可以使用fromRestApiId(scope,id,restApiId)获得现有的ApiGateway构造(这里有文档) 所以目前这工作得很好: 但我想部署到许多AWS帐户和许多地区。我不想为每个帐户区域对硬编码API\U GATEWAY\U ID或API\U GATEWAY\U RO
我所做的: 我在这些帐户之间创建了VPC对等连接 还连接到每个VPC的Internet网关 路由表也已配置(允许来自两侧的流量) 案例1: “ErrorMessage”:“调用Invoke操作时发生错误(AccessDeniedException):User:arn:aws:sts::Account-a:Assumed-Role/Role-for-VPC-peering-test/lambda1_