Rob*_*ert 6 python amazon-ec2 amazon-web-services aws-sdk boto3
我正在使用AWS Python SDK Boto3,我试图了解哪些安全组未使用.用boto2我做了但我不知道如何用boto3做同样的事情.
from boto.ec2.connection import EC2Connection
from boto.ec2.regioninfo import RegionInfo
import boto.sns
import sys
import logging
from security_groups_config import config
# Get settings from config.py
aws_access_key = config['aws_access_key']
aws_secret_key = config['aws_secret_key']
ec2_region_name = config['ec2_region_name']
ec2_region_endpoint = config['ec2_region_endpoint']
region = RegionInfo(name=ec2_region_name, endpoint=ec2_region_endpoint)
if aws_access_key:
conn = EC2Connection(aws_access_key, aws_secret_key, region=region)
else:
conn = EC2Connection(region=region)
sgs = conn.get_all_security_groups()
## Searching unused SG if the instances number is 0
def search_unused_sg(event, context):
for sg in sgs:
print sg.name, len(sg.instances())
Run Code Online (Sandbox Code Playgroud)
使用 Boto3 和 Python 的列表理解和集合的强大功能,只需 7 行代码即可获得您想要的内容:
import boto3
ec2 = boto3.resource('ec2') #You have to change this line based on how you pass AWS credentials and AWS config
sgs = list(ec2.security_groups.all())
insts = list(ec2.instances.all())
all_sgs = set([sg.group_name for sg in sgs])
all_inst_sgs = set([sg['GroupName'] for inst in insts for sg in inst.security_groups])
unused_sgs = all_sgs - all_inst_sgs
Run Code Online (Sandbox Code Playgroud)
调试信息
print 'Total SGs:', len(all_sgs)
print 'SGS attached to instances:', len(all_inst_sgs)
print 'Orphaned SGs:', len(unused_sgs)
print 'Unattached SG names:', unused_sgs
Run Code Online (Sandbox Code Playgroud)
输出
Total SGs: 289
SGS attached to instances: 129
Orphaned SGs: 160
Unattached SG names: set(['mysg', '...
Run Code Online (Sandbox Code Playgroud)
首先,我建议您重新看看 boto3 如何处理凭证。最好使用通用 AWS 凭证文件,因此将来需要时,您可以切换到 IAM 角色基础凭证或 AWS STS,而无需更改代码。
import boto3
# You should use the credential profile file
ec2 = boto3.client("ec2")
# In boto3, if you have more than 1000 entries, you need to handle the pagination
# using the NextToken parameter, which is not shown here.
all_instances = ec2.describe_instances()
all_sg = ec2.describe_security_groups()
instance_sg_set = set()
sg_set = set()
for reservation in all_instances["Reservations"] :
for instance in reservation["Instances"]:
for sg in instance["SecurityGroups"]:
instance_sg_set.add(sg["GroupName"])
for security_group in all_sg["SecurityGroups"] :
sg_set.add(security_group ["GroupName"])
idle_sg = sg_set - instance_sg_set
Run Code Online (Sandbox Code Playgroud)
注意:代码未经测试。请按要求调试。
| 归档时间: |
|
| 查看次数: |
5094 次 |
| 最近记录: |