사용되지 않는 AWS 보안 그룹을 세척
노라 보안 그룹이 없습니까?
조직에서 공유하고 있는 AWS의 개발 환경·테스트 환경에서는, 사용되지 않게 된 채 방치되고 있는 리소스가 나오는 것으로, 관리자의 여러분은 정기적으로 재고를 하고 있다고 생각합니다.
그러나 보안 그룹이 재고되지 않은 환경은 적지 않다고 생각합니다.
그렇다고 하는 것도 , 시큐리티 그룹측으로부터는 붙어 있는 인스턴스·네트워크 인터페이스를 추적할 수 없기 때문에 , 꽤 힘든 일이 걸립니다. 게다가 인스턴스를 만들 때 생겼다 launch-wizard-xxx
가 산 정도 있어, 일람을 보는 것만으로 마음이 부러질 것 같아집니다.
마지막으로, 어차피 보안 그룹은 있어도 과금되지 않기 때문에, 라고 하는 이유로 전망 재고의 대상외로 된다, 라고.
하지만 정리할 수 있는 것이라면 정리하고 싶네요.
그래서 여기는 하나의 도구를 사용하여 정리해 봅시다.
먼저 나열
1. 모든 보안 그룹
AWS CLI를 사용하여 모든 보안 그룹을 all.txt
에 저장합니다.
aws ec2 describe-security-groups --query 'SecurityGroups[].[GroupId, GroupName]' --output text > all.txt
2. 사용되는 보안 그룹
모든 네트워크 인터페이스(ENI)에서 사용하는 보안 그룹을 using.txt
에 저장합니다.
aws ec2 describe-network-interfaces --query 'NetworkInterfaces[].[Groups]' --output text > using.txt
세탁
그리고는 필터를 조금 걸립니다.
sort all.txt using.txt | uniq -u
default
를 사용하지 않는 사람(환경)도 많다고 생각하므로, 그것을 깎아 버리는 것도 좋을지도 모릅니다.
sort all.txt using.txt | grep -v default | uniq -u
이상입니다. 간단하네요.
1과 2의 출력이 같은 형식인 것이 된장입니다. 이 결과를 동시에 출력하면 사용되는 보안 그룹이 중복됩니다. 여기서 uniq -u
하고 중복하지 않은 행만 표시하면 사용되지 않은 것만 씻을 수 있다는 것입니다.
(덤)
우리의 환경에서 시험해 보았습니다.
$ cat all.txt | wc -l
176
$ sort all.txt using.txt | grep -v default | uniq -u | wc -l
117
$ perl -le 'print 117/174'
0.672413793103448
default
를 제외하면, 사용되지 않는 보안 그룹이 67%……( ^o^)ノ
(덧붙여서 VPC가 37 개있었습니다. 이것도 재고가 갈 것 같습니다)
그럼 지울까요?
그리고는 지우는 것만입니다만, 손으로 지우는 것은 귀찮고, 라고 해 스크립트로 일괄 삭제하는 것은 용기가 있습니다. 여기에서는 보안 그룹을 삭제하기위한 쉘 스크립트를 작성하기로 결정했습니다.
먼저 사용되지 않는 보안 그룹 목록을 저장합니다.
이 단계에서 정말 지워도 괜찮은 것을 육안으로 확인하면 좋다고 생각합니다.
sort all.txt using.txt | grep -v default | uniq -u > targets.txt
쉘 스크립트는 Perl의 원라이너로 만듭니다.
주의를 기울여 먼저 dry-run 1 을 위한 것을 만듭니다.
dryrun="--dry-run" perl -lane 'print "# $F[1]\naws $ENV{dryrun} ec2 delete-security-group --group-id $F[0]\n"' targets.txt > delete_sgs.sh
내용은,
$ head delete_sgs.sh
# adtest-site02
aws --dry-run ec2 delete-security-group --group-id sg-0011eb5bcXXXXXXXX
# launch-wizard-35
aws --dry-run ec2 delete-security-group --group-id sg-004c8e17bXXXXXXXX
# AD-DCsg-hoge
aws --dry-run ec2 delete-security-group --group-id sg-0078856e3XXXXXXXX
# test-hoge-auth-sg
좋아 보인다.
dry-run이므로 삼가 bash -x delete_sgs.sh
로 실행해 봅시다.
$ bash -x delete_sgs.sh
+ aws --dry-run ec2 delete-security-group --group-id sg-0011eb5bcXXXXXXXX
An error occurred (DryRunOperation) when calling the DeleteSecurityGroup operation: Request would have succeeded, but DryRun flag is set.
+ aws --dry-run ec2 delete-security-group --group-id sg-004c8e17bXXXXXXXX
An error occurred (DryRunOperation) when calling the DeleteSecurityGroup operation: Request would have succeeded, but DryRun flag is set.
+ aws --dry-run ec2 delete-security-group --group-id sg-0078856e3XXXXXXXX
An error occurred (DryRunOperation) when calling the DeleteSecurityGroup operation: Request would have succeeded, but DryRun flag is set.
:
:
이것으로 문제가 없다면 dry-run
가 아닌 것을 만드십시오.
방금 시작하는 dryrun="--dry-run"
를 제거하고 실행하십시오.
perl -lane 'print "# $F[1]\naws $ENV{dryrun} ec2 delete-security-group --group-id $F[0]\n"' targets.txt > delete_sgs.sh
내부를 확인합니다.
$ head delete_sgs.sh
# adtest-site02
aws ec2 delete-security-group --group-id sg-0011eb5bcXXXXXXXX
# launch-wizard-35
aws ec2 delete-security-group --group-id sg-004c8e17bXXXXXXXX
# AD-DCsg-hoge
aws ec2 delete-security-group --group-id sg-0078856e3XXXXXXXX
# test-hoge-auth-sg
괜찮을까요? 괜찮을 것 같네요?
그럼, 그 후에는 실행할 뿐입니다.
기도하면서 bash -x delete_sgs.sh
라고 두드리자!
God bless you!
dry run이란 「리허설」「예행 연습」이라고 하는 의미로, 실제의 변경은 행해지지 않습니다만, 그때까지의 부분(구문의 체크나 대상의 존재 확인)을 제대로 실행하는 것입니다. 대부분의 경우 dry run이 성공하면 프로덕션도 성공하도록 만들어졌습니다. ↩
Reference
이 문제에 관하여(사용되지 않는 AWS 보안 그룹을 세척), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/keys/items/5c298ea1777586bf25a4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
aws ec2 describe-security-groups --query 'SecurityGroups[].[GroupId, GroupName]' --output text > all.txt
aws ec2 describe-network-interfaces --query 'NetworkInterfaces[].[Groups]' --output text > using.txt
sort all.txt using.txt | uniq -u
sort all.txt using.txt | grep -v default | uniq -u
$ cat all.txt | wc -l
176
$ sort all.txt using.txt | grep -v default | uniq -u | wc -l
117
$ perl -le 'print 117/174'
0.672413793103448
sort all.txt using.txt | grep -v default | uniq -u > targets.txt
dryrun="--dry-run" perl -lane 'print "# $F[1]\naws $ENV{dryrun} ec2 delete-security-group --group-id $F[0]\n"' targets.txt > delete_sgs.sh
$ head delete_sgs.sh
# adtest-site02
aws --dry-run ec2 delete-security-group --group-id sg-0011eb5bcXXXXXXXX
# launch-wizard-35
aws --dry-run ec2 delete-security-group --group-id sg-004c8e17bXXXXXXXX
# AD-DCsg-hoge
aws --dry-run ec2 delete-security-group --group-id sg-0078856e3XXXXXXXX
# test-hoge-auth-sg
$ bash -x delete_sgs.sh
+ aws --dry-run ec2 delete-security-group --group-id sg-0011eb5bcXXXXXXXX
An error occurred (DryRunOperation) when calling the DeleteSecurityGroup operation: Request would have succeeded, but DryRun flag is set.
+ aws --dry-run ec2 delete-security-group --group-id sg-004c8e17bXXXXXXXX
An error occurred (DryRunOperation) when calling the DeleteSecurityGroup operation: Request would have succeeded, but DryRun flag is set.
+ aws --dry-run ec2 delete-security-group --group-id sg-0078856e3XXXXXXXX
An error occurred (DryRunOperation) when calling the DeleteSecurityGroup operation: Request would have succeeded, but DryRun flag is set.
:
:
perl -lane 'print "# $F[1]\naws $ENV{dryrun} ec2 delete-security-group --group-id $F[0]\n"' targets.txt > delete_sgs.sh
$ head delete_sgs.sh
# adtest-site02
aws ec2 delete-security-group --group-id sg-0011eb5bcXXXXXXXX
# launch-wizard-35
aws ec2 delete-security-group --group-id sg-004c8e17bXXXXXXXX
# AD-DCsg-hoge
aws ec2 delete-security-group --group-id sg-0078856e3XXXXXXXX
# test-hoge-auth-sg
Reference
이 문제에 관하여(사용되지 않는 AWS 보안 그룹을 세척), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/keys/items/5c298ea1777586bf25a4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)