কীভাবে অব্যবহৃত অ্যামাজন ইসি 2 সুরক্ষা গোষ্ঠীগুলি খুঁজে পাবেন


94

আমি অনাথ সুরক্ষা গোষ্ঠীগুলি নির্ধারণ করার জন্য একটি উপায় অনুসন্ধান করার চেষ্টা করছি যাতে আমি পরিষ্কার করে এগুলি থেকে মুক্তি পেতে পারি। অব্যবহৃত সুরক্ষা গোষ্ঠীগুলি আবিষ্কার করার কোনও উপায় কি কেউ জানেন।

হয় কনসোলের মাধ্যমে বা কমান্ড লাইন সরঞ্জামগুলির সাহায্যে লিনাক্স এবং ওএসএক্স মেশিনে কমান্ড লাইন সরঞ্জামগুলি চালানো)।


4
আমার কিংডম এমন উত্তরের জন্য যা দীর্ঘমেয়াদী নন-ইনস্ট্যান্স অবজেক্ট (আরডিএস, ইএলবি, এএলবি) ব্যতীত এ প্রশ্নের পুরোপুরি উত্তর দেয়, যাতে তাদের এসজি বরাদ্দ করা যেতে পারে এবং এতে 'সমস্ত নির্বাচন করুন, তারপরে মুছুন' স্কেরিবাদ উইকএন্ডে থাকবে না -ড্রেস্ট্রোয়ার পদ্ধতির। :)
জেসি অ্যাডেলম্যান

উত্তর:


79

দ্রষ্টব্য: এটি কেবল ইসি 2 তে সুরক্ষা ব্যবহার বিবেচনা করে, আরডিএসের মতো অন্যান্য পরিষেবাদি নয়। ইসি 2 এর বাইরে ব্যবহৃত সুরক্ষা গোষ্ঠীগুলি অন্তর্ভুক্ত করতে আপনাকে আরও কাজ করতে হবে। ভাল কথা হ'ল আপনি যদি কোনও সম্পর্কিত ডাব্লু / অন্য পরিষেবা মিস করেন তবে সক্রিয় সুরক্ষা গোষ্ঠীগুলি মুছে ফেলার জন্য আপনি সহজেই (সম্ভবত সম্ভবও নাও) পারবেন না।

নতুন এডাব্লুএস সি এল আই সরঞ্জামটি ব্যবহার করে, আমার যা প্রয়োজন তা পাওয়ার সহজ উপায় খুঁজে পেয়েছি:

প্রথমে সমস্ত সুরক্ষা গোষ্ঠীর একটি তালিকা পান

aws ec2 describe-security-groups --query 'SecurityGroups[*].GroupId'  --output text | tr '\t' '\n'

এর পরে, একটি দৃষ্টান্ত বাঁধা সমস্ত নিরাপত্তা গ্রুপ পেতে তারপর পাইপ sortতারপর uniq:

aws ec2 describe-instances --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --output text | tr '\t' '\n' | sort | uniq

তারপরে এটি এক সাথে রাখুন এবং 2 টি তালিকার তুলনা করুন এবং দেখুন যে মাস্টার তালিকা থেকে কী ব্যবহৃত হচ্ছে না:

comm -23  <(aws ec2 describe-security-groups --query 'SecurityGroups[*].GroupId'  --output text | tr '\t' '\n'| sort) <(aws ec2 describe-instances --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --output text | tr '\t' '\n' | sort | uniq)

4
@ এরিক হ্যাঁ, আমার কেবলমাত্র একটি একক অঞ্চল আছে এবং এডাব্লুএস স্ক্রিপ্টগুলির পরিবেশগত পরিবর্তনশীলগুলির মাধ্যমে তাদের হোম অঞ্চল সেট আছে। আমি এই স্ক্রিপ্টটির একটি বহু-অঞ্চল সংস্করণ দেখতে আগ্রহী।
রায়

4
আপনি আপনার ভিপিসির জন্য একটি ফিল্টার যুক্ত করতে চাইতে পারেন যাতে আপনাকে অন্য ডিফল্ট ভিপিসি এসএজি দেখতে হয় না
ছায়াডবিক

4
কোনও সুরক্ষা গোষ্ঠী কোনও ইএলবি ব্যবহার করতে পারে। এই কমান্ডটি ডিফল্ট অঞ্চলে aws elb describe-load-balancers --query 'LoadBalancerDescriptions[*].SecurityGroups[*]' --output text | tr '\t' '\n' | sort | uniq
ELBs

4
কোনও ইসি 2 সুরক্ষা গোষ্ঠী কোনও আরডিএস উদাহরণ দ্বারা ব্যবহৃত হতে পারে। এই কমান্ডটি ডিফল্ট অঞ্চলে আরডিএস দৃষ্টান্ত ব্যবহার করে সুরক্ষা গোষ্ঠীর আইডি তালিকাভুক্ত করবে:aws rds describe-db-security-groups --query 'DBSecurityGroups[*].EC2SecurityGroups[*].EC2SecurityGroupId' --output text | tr '\t' '\n' | sort | uniq
আহরদেন

4
আপনি aws ec2 describe-network-interfaces --query 'NetworkInterfaces[*].Groups[*].GroupId' --output text| tr '\t' '\n' | sort | uniqকেবল নেটওয়ার্ক ইন্টারফেস বর্ণনা করতে ব্যবহার করতে পারেন ।
জোনাথন

63

আপনি যদি ইসি 2 কনসোলে আপনার সমস্ত সুরক্ষা গোষ্ঠীগুলি নির্বাচন করেন, তবে ক্রিয়াগুলি টিপুন -> সুরক্ষা দলগুলি মুছুন, একটি পপআপ উপস্থিত হবে যা আপনাকে বলছে যে আপনি যে সুরক্ষা গোষ্ঠীগুলিকে উদাহরণস্বরূপ, অন্যান্য সুরক্ষা গোষ্ঠীগুলি, বা নেটওয়ার্ক ইন্টারফেসগুলিতে সংযুক্ত রয়েছে, সেটি মুছতে পারবেন না এবং এটি আপনি মুছে ফেলতে পারেন এমন সুরক্ষা গোষ্ঠীর তালিকা তৈরি করবে; অর্থাত অব্যবহৃত সুরক্ষা গোষ্ঠী :)


15
আমাকে অবশ্যই সম্মত হতে হবে, তবে "সমস্ত নির্বাচন করুন" মুছুন "ব্যবহার করা সাধারণত ভাল অভ্যাস নয় not
বাল্মীপুর 18

4
এটি যদি কাজ করে তবে আপনি যদি অনিশ্চিত থাকেন তবে আপনি কেবল একটি ডামি সুরক্ষা গোষ্ঠী তৈরি করতে পারেন এবং এর সাথে কিছু সংযুক্ত করতে পারেন, এটি মুছতে চেষ্টা করুন এবং দেখুন যে এটি আপনাকে দেয় না।
এনলাইল

4
আপনাকে মুছে ফেলার সত্যতা নিশ্চিত করার দরকার নেই, পপআপে এটি আপনাকে একটি বিচ্ছিন্নতা দেখাবে যা কোনটি মুছে ফেলা যায় (এতিম) এবং কোনটি পারে না। তারপরে আপনি বাতিল টিপুন এবং তারপরে এতিমগুলি মুছতে পারেন।
রাজারমস্ট্রং

4
যা আমি পাই না তা হ'ল: যখন আপনি এই ভীতিজনক কাজটি করেন তখন এডাব্লুএস কনসোল যদি এই তথ্যটি সরবরাহ করতে পারে তবে তারা এপিআইয়ের মাধ্যমে একই জিনিস কীভাবে ভাগ করবেন না? এটি এমন নয় যা সম্ভবত ব্রাউন ফিল্ডের পরিবেশে প্রয়োজন ...
জেসি অ্যাডেলম্যান

4
সাহসী
হোন

30

এটি সুরক্ষা গোষ্ঠীর সাথে সংযুক্ত কয়েকটি সংখ্যার সাথে সুরক্ষার জন্য তালিকাবদ্ধ করতে বোটোতে লেখা (পাইথন এসডিকে অ্যাডাব্লুএস) লিখিত নমুনা কোড।

আপনি কমান্ড লাইনে একই পেতে এই যুক্তিটি ব্যবহার করতে পারেন

বোটো কোড

import boto
ec2 = boto.connect_ec2()
sgs = ec2.get_all_security_groups()
for sg in sgs:
    print sg.name, len(sg.instances())

আউটপুট

Security-Group-1 0
Security-Group-2 1
Security-Group-3 0
Security-Group-4 3

সুন্দর এবং সহজ! ধন্যবাদ
ক্রিস কোস্টন

6
আচ্ছা, হ্যাঁ, তবে কিসের কন?
ইলজা

এছাড়াও মনে রাখবেন যে এটিতে কেবল চলমান দৃষ্টান্ত অন্তর্ভুক্ত রয়েছে। আপনি কোনও এসজি মুছতে পারবেন না যা থামানো উদাহরণের সাথে লিঙ্কযুক্ত।
এগডুড

6
এটি আরডিএসের মতো পরিষেবা থেকে ইন্টারফেস উপেক্ষা করে। আরডিএস উদাহরণটির মালিক, তবে আপনি ENI এর মালিক। আমি একভাবে মনে ElasticSearch এবং ELB কাজ এবং এই স্ক্রিপ্টের সাথে না দেখাতে হবে
ব্যানার্জী রজত

6

প্রায় এক বছর অব্যক্ত ব্যবহারের পরে, আমি আমার AWS ইসি 2 সুরক্ষা গোষ্ঠীগুলি নিরীক্ষণ এবং উত্তরাধিকার, অব্যবহৃত গোষ্ঠীগুলি পরিষ্কার করার প্রয়োজন মনে করেছি।

ওয়েব জিইউআইয়ের মাধ্যমে সম্পাদন করা এটি একটি কঠিন কাজ ছিল, সুতরাং আমি কাজটি আরও সহজ করার জন্য আমি ডাব্লুএসএস সিএলআইয়ের দিকে চেয়েছিলাম। স্ট্যাকওভারফ্লোতে এটি কীভাবে করা যায় সে সম্পর্কে আমি একটি সূচনা পেয়েছি, তবে এটি সম্পূর্ণরূপে ছিল না। তাই আমি নিজের স্ক্রিপ্ট লেখার সিদ্ধান্ত নিয়েছি। নিম্নলিখিতগুলি সম্পাদন করার জন্য আমি এডাব্লুএস সিএলআই, মাইএসকিউএল এবং কিছু "বাশ-ফু" ব্যবহার করেছি:

  1. সমস্ত ইসি 2 সুরক্ষা গোষ্ঠীর একটি তালিকা পান। আমি লোকালহোস্টে aws_security_groups নামক একটি মাইএসকিউএল ডাটাবেসে "গোষ্ঠী" নামে একটি টেবিলে গ্রুপ-আইডি, গোষ্ঠীর নাম এবং বিবরণ সংরক্ষণ করি। প্রাপ্ত গোষ্ঠীর সংখ্যাটি ব্যবহারকারীকে জানানো হয়েছে is

  2. নিম্নলিখিত প্রতিটি পরিষেবার সাথে যুক্ত সমস্ত সুরক্ষা গোষ্ঠীর একটি তালিকা পান এবং তাদের টেবিল থেকে বাদ দিন: ইসি 2 আইটেমস ইসি 2 ইলাস্টিক লোড ব্যালান্সারস ডাব্লুএস আরডিএস উদাহরণ অ্যাডাব্লুএস অপস ওয়ার্কস (অ্যামাজনে অপসারণ করা উচিত নয়) ডিফল্ট সুরক্ষা গোষ্ঠীগুলি (মোছা যাবে না) ) ইলাস্টিচে

প্রতিটি পরিষেবার জন্য আমি বাদ পড়ার পরে টেবিলের মধ্যে থাকা গ্রুপগুলির সংখ্যার একটি গণনা রিপোর্ট করি।

  1. অবশেষে আমি গ্রুপ-আইডি, গোষ্ঠীর নাম এবং যে গোষ্ঠীগুলি রেখে গেছে তার জন্য বিবরণ প্রদর্শন করব। এগুলি হ'ল "অব্যবহৃত" গোষ্ঠী যা নিরীক্ষণ এবং / অথবা মুছে ফেলা দরকার। আমি খুঁজে পেয়েছি যে এসজি এর উদাহরণস্বরূপ এবং ইলাস্টিক লোড ব্যালান্সার (ইএলবি) এর মধ্যে প্রায়শই একে অপরকে উল্লেখ করে। ক্রস রেফারেন্সগুলি সরিয়ে দেওয়ার এবং সুরক্ষা গোষ্ঠীগুলি মোছার আগে তারা সত্যিকারের ব্যবহারে নেই তা নিশ্চিত করার জন্য কিছু ম্যানুয়াল তদন্ত করা ভাল অনুশীলন। তবে আমার স্ক্রিপ্টটি কমপক্ষে এটি ম্যারেজযোগ্য কিছুতে পেরেজ করে।

দ্রষ্টব্য: ১. আপনি আপনার মাইএসকিউএল হোস্ট, ব্যবহারকারীর নাম এবং পাসওয়ার্ড সংরক্ষণ করতে একটি ফাইল তৈরি করতে চান এবং এতে to ডিবিসিএনএফআইপি ভেরিয়েবলটি নির্দেশ করতে পারেন। এটি এর মতো কাঠামোযুক্ত হওয়া উচিত:

[mysql]
host=your-mysql-server-host.com
user=your-mysql-user
password=your-mysql-user-password
  1. আপনি ইচ্ছে করলে ডাটাবেসের নাম পরিবর্তন করতে পারেন - স্ক্রিপ্টে $ DB ভেরিয়েবলটি পরিবর্তন করতে ভুলবেন না

আপনি যদি এই দরকারী মনে করেন বা কোনও মন্তব্য, সংশোধন বা বর্ধন করেন তবে আমাকে জানান।

এখানে স্ক্রিপ্ট।

#!/bin/bash
# Initialize Variables
DBCONFIG="--defaults-file=mysql-defaults.cnf"
DB="aws_security_groups"
SGLOOP=0
EC2LOOP=0
ELBLOOP=0
RDSLOOP=0
DEFAULTLOOP=0
OPSLOOP=0
CACHELOOP=0
DEL_GROUP=""

# Function to report back # of rows
function Rows {
    ROWS=`echo "select count(*) from groups" | mysql $DBCONFIG --skip-column-names $DB`
#   echo -e "Excluding $1 Security Groups.\nGroups Left to audit: "$ROWS
    echo -e $ROWS" groups left after Excluding $1 Security Groups."
}


# Empty the table
echo -e "delete from groups where groupid is not null" | mysql $DBCONFIG $DB

# Get all Security Groups
aws ec2 describe-security-groups --query "SecurityGroups[*].[GroupId,GroupName,Description]" --output text > /tmp/security_group_audit.txt
while IFS=$'\t' read -r -a myArray
do
    if [ $SGLOOP -eq 0 ];
    then
        VALUES="(\""${myArray[0]}"\",\""${myArray[1]}"\",\""${myArray[2]}"\")"
    else
        VALUES=$VALUES",(\""${myArray[0]}"\",\""${myArray[1]}"\",\""${myArray[2]}"\")"
    fi
    let SGLOOP="$SGLOOP + 1"
done < /tmp/security_group_audit.txt
echo -e "insert into groups (groupid, groupname, description) values $VALUES" | mysql $DBCONFIG $DB
echo -e $SGLOOP" security groups total."


# Exclude Security Groups assigned to Instances
for groupId in `aws ec2 describe-instances --output json | jq -r ".Reservations[].Instances[].SecurityGroups[].GroupId" | sort | uniq`
do
    if [ $EC2LOOP -eq 0 ];
    then
        DEL_GROUP="'$groupId'"
    else
        DEL_GROUP=$DEL_GROUP",'$groupId'"
    fi
    let EC2LOOP="$EC2LOOP + 1"
done
echo -e "delete from groups where groupid in ($DEL_GROUP)" | mysql $DBCONFIG $DB
Rows "EC2 Instance"
DEL_GROUP=""


# Exclude groups assigned to Elastic Load Balancers
for elbGroupId in `aws elb describe-load-balancers --output json | jq -c -r ".LoadBalancerDescriptions[].SecurityGroups" | tr -d "\"[]\"" | sort | uniq`
do
    if [ $ELBLOOP -eq 0 ];
    then
        DEL_GROUP="'$elbGroupId'"
    else
        DEL_GROUP=$DEL_GROUP",'$elbGroupId'"
    fi
    let ELBLOOP="$ELBLOOP + 1"
done
    echo -e "delete from groups where groupid in ($DEL_GROUP)" | mysql $DBCONFIG $DB
Rows "Elastic Load Balancer"
DEL_GROUP=""


# Exclude groups assigned to RDS
for RdsGroupId in `aws rds describe-db-instances --output json | jq -c -r ".DBInstances[].VpcSecurityGroups[].VpcSecurityGroupId" | sort | uniq`
do
    if [ $RDSLOOP -eq 0 ];
    then
        DEL_GROUP="'$RdsGroupId'"
    else
        DEL_GROUP=$DEL_GROUP",'$RdsGroupId'"
    fi
    let RDSLOOP="$RDSLOOP + 1"
done
    echo -e "delete from groups where groupid in ($DEL_GROUP)" | mysql $DBCONFIG $DB
Rows "RDS Instances"
DEL_GROUP=""

# Exclude groups assigned to OpsWorks
for OpsGroupId in `echo -e "select groupid from groups where groupname like \"AWS-OpsWorks%\"" | mysql $DBCONFIG $DB`
do
    if [ $OPSLOOP -eq 0 ];
    then
        DEL_GROUP="'$OpsGroupId'"
    else
        DEL_GROUP=$DEL_GROUP",'$OpsGroupId'"
    fi
    let OPSLOOP="$OPSLOOP + 1"
done
echo -e "delete from groups where groupid in ($DEL_GROUP)" | mysql $DBCONFIG $DB
Rows "OpsWorks"
DEL_GROUP=""

# Exclude default groups (can't be deleted)
for DefaultGroupId in `echo -e "select groupid from groups where groupname like \"default%\"" | mysql $DBCONFIG $DB`
do
    if [ $DEFAULTLOOP -eq 0 ];
    then
        DEL_GROUP="'$DefaultGroupId'"
    else
        DEL_GROUP=$DEL_GROUP",'$DefaultGroupId'"
    fi
    let DEFAULTLOOP="$DEFAULTLOOP + 1"
done
echo -e "delete from groups where groupid in ($DEL_GROUP)" | mysql $DBCONFIG $DB
Rows "Default"
DEL_GROUP=""

# Exclude Elasticache groups
for CacheGroupId in `aws elasticache describe-cache-clusters --output json | jq -r ".CacheClusters[].SecurityGroups[].SecurityGroupId" | sort | uniq`
do
    if [ $CACHELOOP -eq 0 ];
    then
        DEL_GROUP="'$CacheGroupId'"
    else
        DEL_GROUP=$DEL_GROUP",'$CacheGroupId'"
    fi
    let CACHELOOP="$CACHELOOP + 1"
done
echo -e "delete from groups where groupid in ($DEL_GROUP)" | mysql $DBCONFIG $DB
Rows "ElastiCache"

# Display Security Groups left to audit / delete
echo "select * from groups order by groupid" | mysql $DBCONFIG $DB | sed 's/groupid\t/groupid\t\t/'

এবং এখানে ডেটাবেস তৈরির জন্য বুদ্ধি রয়েছে।

-- MySQL dump 10.13  Distrib 5.5.41, for debian-linux-gnu (x86_64)
--
-- Host:  localhost   Database: aws_security_groups
-- ------------------------------------------------------
-- Server version   5.5.40-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `groups`
--

DROP TABLE IF EXISTS `groups`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `groups` (
  `groupid` varchar(12) DEFAULT NULL,
  `groupname` varchar(200) DEFAULT NULL,
  `description` varchar(200) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `groups`
--

LOCK TABLES `groups` WRITE;
/*!40000 ALTER TABLE `groups` DISABLE KEYS */;
/*!40000 ALTER TABLE `groups` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2015-01-27 16:07:44

3

বোটোর উদাহরণ কেবলমাত্র সুরক্ষা গোষ্ঠীর গ্রুপ আইডি এবং নামগুলি মুদ্রণ করে যার কোনও বর্তমান উদাহরণ নেই।

আপনি কোন অঞ্চলের সাথে সম্পর্কিত তা নির্দিষ্ট করে কীভাবে তা এটিও দেখায়।

import boto
import boto.ec2
EC2_REGION='ap-southeast-2'
ec2region = boto.ec2.get_region(EC2_REGION)
ec2 = boto.connect_ec2(region=ec2region)
sgs = ec2.get_all_security_groups()
for sg in sgs:
    if len(sg.instances()) == 0:
        print ("{0}\t{1}".format(sg.id, sg.name))

নিশ্চিত যা নিরাপত্তা গ্রুপ দ্বারা এখনও তোমাকে বিপরীত বা মুছে ফেলা আবশ্যক ব্যবহৃত হচ্ছে if len(sg.instances()) == 0টেস্ট এবং প্রিন্ট len(sg.instances())মান বাইরে।

যেমন

print ("{0}\t{1}\t{2} instances".format(sg.id, sg.name, len(sg.instances())))

3

নোড.জেএসস এডাব্লুএস এসডিকে ব্যবহার করে আমি নিশ্চিত করতে পারি যে অ্যাডাব্লুএস আপনাকে ব্যবহার করা সুরক্ষা গোষ্ঠীগুলি মুছতে দেয় না। আমি একটি স্ক্রিপ্ট লিখেছি যা কেবল সমস্ত গ্রুপ মুছে ফেলার চেষ্টা করে এবং ত্রুটিগুলি গ্রেফতার করে পরিচালনা করে। এটি ক্লাসিক এবং আধুনিক ভিপিসির জন্য কাজ করে। ত্রুটির বার্তাটি নীচে দেখা যাবে।

Err { [DependencyViolation: resource sg-12345678 has a dependent object]
  message: 'resource sg-12345678 has a dependent object',
  code: 'DependencyViolation',
  time: Mon Dec 07 2015 12:12:43 GMT-0500 (EST),
  statusCode: 400,
  retryable: false,
  retryDelay: 30 }


1

নেটওয়ার্ক ইন্টারফেসের সাথে সংযুক্ত এসজিগুলিতে:

নামে:

aws ec2 describe-network-interfaces --output text --query NetworkInterfaces[*].Groups[*].GroupName | tr -d '\r' | tr "\t" "\n" | sort | uniq

আইডি দ্বারা:

aws ec2 describe-network-interfaces --output text --query NetworkInterfaces[*].Groups[*].GroupId | tr -d '\r' | tr "\t" "\n" | sort | uniq

0

এডাব্লুএস মার্কেটপ্লেসে একটি সরঞ্জাম রয়েছে যা এটিকে অনেক সহজ করে তোলে। এটি আপনাকে সহজেই মুছে ফেলার জন্য কোন গ্রুপগুলি সংযুক্ত / বিচ্ছিন্ন রয়েছে তা দেখায়, তবে এটি সুরক্ষা গোষ্ঠীর নিয়মের সাথে আপনার ভিপিসি ফ্লো লগগুলিও তুলনা করে এবং আপনাকে দেখায় যে কোন এসজি বিধিগুলি ব্যবহারে বা অব্যবহৃত রয়েছে। এডাব্লুএস এটি করার জন্য একটি ইএলকে-স্ট্যাক সমাধান পোস্ট করেছে, তবে এটি হাস্যকরভাবে জটিল।

এখানে সরঞ্জাম এবং একটি অস্বীকৃতি এখানে রয়েছে। তবে আমি আশা করি আপনারা সবাই এটি প্রাসঙ্গিকভাবে খুঁজে পেয়েছেন: https://www.piasoftware.net/single-post/2018/04/24/VIDEO-Watch-as-we-clean-up-EC2-security-groups-in-just -কয়েক মিনিট


0

দুর্ভাগ্যক্রমে নির্বাচিত উত্তর আমার প্রয়োজনের মতো যথাযথ নয় (আমি এর কারণ অনুসন্ধানের চেষ্টা করেছি, তবে আমি এটি বাস্তবায়ন করতে পছন্দ করেছি)।
যদি আমি সমস্ত চেক করি NetworkInterfaces, যে কোনওটির সাথে সংযুক্তি খুঁজছি SecurityGroup, এটি আমার আংশিক ফলাফল পায়। আমি যদি কেবল পরীক্ষা করে দেখি তবে EC2Instancesএটি আমার আংশিক ফলাফলও ফিরে পাবে।

সুতরাং এই সমস্যা সম্পর্কে আমার পদ্ধতির:

  1. আমি সমস্ত ইসি 2 সুরক্ষা গ্রুপ -> পেয়েছি all_secgrp
  2. আমি সমস্ত ইসি 2 উদাহরণ পেয়েছি -> all_instances
  3. প্রতিটি দৃষ্টান্তের জন্য, আমি এটির সাথে সমস্ত সুরক্ষা গোষ্ঠীগুলি সংযুক্ত করি
    1. আমি এই সুরক্ষা গোষ্ঠীর প্রত্যেকটিকে all_secgrp থেকে সরান (কারণ সংযুক্ত)
  4. প্রতিটি সুরক্ষা গোষ্ঠীর জন্য, আমি যে কোনও নেটওয়ার্কআইন্টারফেসগুলির সাথে অ্যাসোসিয়েশন পরীক্ষা করি ( filterফাংশনটি ব্যবহার করে এবং এটি ব্যবহার করে ফিল্টারিং security-group-id)
    1. যদি কোনও সমিতি খুঁজে পাওয়া যায় না, তবে আমি সুরক্ষা-দলটিকে সরিয়ে ফেলি all_secgrp

সংযুক্ত আপনি কোডের একটি স্নিপেট দেখতে পারেন। দক্ষতার জন্য অভিযোগ করবেন না, তবে আপনি চাইলে এটি অপ্টিমাইজ করার চেষ্টা করুন।

all_secgrp = list(ec2_connector.security_groups.all())
all_instances = ec2_connector.instances.all()

for single_instance in all_instances:
    instance_secgrp = ec2_connector.Instance(single_instance.id).security_groups
    for single_sec_grp in instance_secgrp:
        if ec2.SecurityGroup(id=single_sec_grp['GroupId']) in all_secgrp:
            all_secgrp.remove(ec2.SecurityGroup(id=single_sec_grp['GroupId']))

all_secgrp_detached_tmp = all_secgrp[:]
for single_secgrp in all_secgrp_detached_tmp:
    try:
        print(single_secgrp.id)
        if len(list(ec2_connector.network_interfaces.filter(Filters=[{'Name': 'group-id', 'Values': [single_secgrp.id]}]))) > 0:
            all_secgrp.remove(single_secgrp)
    except Exception:
        all_secgrp.remove(single_secgrp)

return all_secgrp_detached  

0

বিধিগুলিতে অন্যান্য সুরক্ষা গোষ্ঠীগুলিকে রেফারেন্সযুক্ত সুরক্ষা গোষ্ঠীগুলি থাকলে এটি একটি কঠিন সমস্যা। যদি তা হয় তবে আপনাকে নির্ভরশীলতার ভুলগুলি সমাধান করতে হবে, যা তুচ্ছ নয়।

আপনি যদি কেবল আইপি ঠিকানা ব্যবহার করে থাকেন তবে আপনি বোটো 3 ক্লায়েন্ট তৈরির পরে এই সমাধানটি কার্যকর হবে:

# pull all security groups from all vpcs in the given profile and region and save as a set
all_sgs = {sg['GroupId'] for sg in client.describe_security_groups()['SecurityGroups']}

# create a new set for all of the security groups that are currently in use
in_use = set()

# cycle through the ENIs and add all found security groups to the in_use set
for eni in client.describe_network_interfaces()['NetworkInterfaces']:
    for group in eni['Groups']:
        in_use.add(group['GroupId'])

unused_security_groups = all_sgs - in_use

for security_group in unused_security_groups:
    try:
        response = client.delete_security_group(GroupId=security_group)
    except ClientError as e:
        if e.response['Error']['Code'] == 'DependencyViolation':
            print('EC2/Security Group Dependencies Exist')
    else:
        print('Unexpected error: {}'.format(e))

এটি আরডিএস দ্বারা ব্যবহৃত এসজিগুলিকে কভার করবে না
আলেকজান্দার্নস্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.