提供したAWSリージョンのリストを繰り返すことができず、リストが逆の順序で開始されている理由がわかりません。
このコードは基本的にすべてのawsリージョンを1つずつ接続し、セキュリティグループの詳細を出力します。
regions = ['us-east-1','us-west-1','us-west-2','eu-west-1','sa-east-1','ap-southeast-1','ap-southeast-2','ap-northeast-1']
for region in regions:
connection=ec2.connect_to_region(region)
sg.extend(connection.get_all_security_groups())
def getTag(instanceId):
reservations=connection.get_all_instances(filters={'instance_id':instanceId})
for res in reservations:
for instance in res.instances:
return instance.tags['Name'],instance.private_ip_address,instance.region
try:
for securityGroup in sg:
for rule in securityGroup.rules:
global instanceId;
if rule.to_port == '22' and '0.0.0.0/0' in str(rule.grants):
for instanceid in securityGroup.instances():
instanceId=str(instanceid)
print "Port 22 is open for 0.0.0.0/0:, SecurityGroupName: %s Instance Details --> : %s " %(securityGroup.name, getTag(instanceId.split(':')[1]))
回答に基づいて、インスタンスの詳細を取得できなくなりました。結果は次のとおりです。
Port 22 is open for 0.0.0.0/0:, SecurityGroupName: interview-linux Instance Details --> : None
Port 22 is open for 0.0.0.0/0:, SecurityGroupName: interview-linux Instance Details --> : None
Port 22 is open for 0.0.0.0/0:, SecurityGroupName: launch-wizard-mingjun Instance Details --> : None
Port 22 is open for 0.0.0.0/0:, SecurityGroupName: SSH+HTTPS Instance Details --> : None
Port 22 is open for 0.0.0.0/0:, SecurityGroupName: temp-engg-logi Instance Details --> : None
Port 22 is open for 0.0.0.0/0:, SecurityGroupName: na-prod-1w-secgroup Instance Details --> : None
Port 22 is open for 0.0.0.0/0:, SecurityGroupName: na-prod-1w-secgroup Instance Details --> : None
Port 22 is open for 0.0.0.0/0:, SecurityGroupName: na-trial-1w-secgroup Instance Details --> : None
Port 22 is open for 0.0.0.0/0:, SecurityGroupName: na-trial-1w-secgroup Instance Details --> : Non
for region in regions:
ループ内ではsg
、各反復で上書きしているためです。あなたがおそらく欲しいのは
sg = list()
for region in regions:
connection=ec2.connect_to_region(region)
sg.extend(connection.get_all_security_groups())
編集:(インスタンスの詳細->:なし)
ここでの問題は、あなたが上書きされて、私は前述のループでは、connection
あまりにすなわちconnection=ec2.connect_to_region(region)
。
したがってconnection.get_all_instances(filters={'instance_id':instanceId})
、getTag
メソッドで行う場合instanceId
、最後の領域、つまりでのみ検索されますap-northeast-1
。インスタンスはこのリージョンに属していないため、を取得しNone
ます。
コードを次のようなものに並べ替える必要があります
def getTag(connection, instanceId):
reservations=connection.get_all_instances(filters={'instance_id':instanceId})
for res in reservations:
for instance in res.instances:
return instance.tags['Name'],instance.private_ip_address,instance.region
regions = ['us-east-1','us-west-1','us-west-2','eu-west-1','sa-east-1','ap-southeast-1','ap-southeast-2','ap-northeast-1']
for region in regions:
connection=ec2.connect_to_region(region)
sg = connection.get_all_security_groups()
try:
for securityGroup in sg:
for rule in securityGroup.rules:
if rule.to_port == '22' and '0.0.0.0/0' in str(rule.grants):
for instanceid in securityGroup.instances():
instanceId=str(instanceid)
print "Port 22 is open for 0.0.0.0/0:, SecurityGroupName: %s Instance Details --> : %s " %(securityGroup.name, getTag(connection, instanceId.split(':')[1]))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加