VPC 구성 후 추가했던 보안 그룹이 default 보안 그룹이랑 얽혀서 삭제가 안돼 .... !!!!
어차피 지금 사용하는 AWS 계정은 오로지 실습 용도로 쓰고 있어서
aws-nuke라는 소스를 사용해 aws 리소스를 모두 날리는 방법을 사용해보려 한다.
사용한 aws-nuke 소스의 github이다.
✔️ 주의 사항
주의 사항을 먼저 알아보자
일단 aws-nuke는 AWS의 모든 리소스를 날릴 수 있으므로 실제 어플리케이션을 서비스하는 AWS 계정에서는 절대 사용하지 않는 것을 권장한다.
aws-nuke에는 실수에 대한 몇가지 안전 예방 장치가 있다.
1. 기본적으로 aws-nuke는 nukeable 리소스만을 나열해주며
실제로 리소스를 삭제하기 위해서는 --no-dry-run을 추가해야 한다.
2. aws-nuke는 계정 별칭을 입력하여 삭제 확인은 2번 요청한다.
시작 직후에 한번 모든 nukeable 자원을 나열한 뒤에 한번
3. 사람이 무시할 수 있는 계정 ID (예를 들어 4651-8916-1651)만을 표시하는 것을 방지하기 위해
실제로 계정에 대한 별칭을 생성해야 하며 그렇지 않으면 aws-nuke는 중단된다.
4. 계정의 별칭에는 prod 문자열이 포함되어서는 안된다.
이 문자열은 하드 코딩되어 있으며 모든 실제 프로덕션 계정 (예 : mycompany-production-ecr)에 추가하는 것이 좋다.)
5. config file에는 blocklist field가 있다.
nuke를 제거하려는 계정의 계정 ID가 이 차단 목록의 일부인 경우 aws-nuke가 중단된다.
그러니까 만약 실제 어플리케이션을 서비스하는 중요한 프로덕션 계정이 있다면 blocklist field에 추가하는 것이 좋다.
6. 차단 목록 기능을 사용하려면 차단 목록에 하나 이상의 계정 ID을 추가해야 한다.
7. config file에는 account specific settings(예 : 필터)이 포함되어 있다.
nuke를 제거하려는 계정이 account specific settings에 나열되어 있어야 한다.
8. 임의의 계정을 실수로 삭제하지 않도록 config file을 지정해야 한다.
단일 config file만 가지고 중앙 저장소에 추가하는 것이 좋다.
이렇게 하면 계정 차단 목록을 보다 쉽게 관리하고 최신 상태로 유지할 수 있다.
✔️ 설치
Use Released Binaries
가장 쉬운 설치 방법은 GitHub에서 최신 릴리스를 다운로드하는 것이다.
우리가 쉽게 설치할 수 있는 방법은 명령줄 설치 방법일 것이다.
Example for Linux Intel/AMD
# 다운로드 및 추출
$ wget -c https://github.com/rebuy-de/aws-nuke/releases/download/v2.16.0/aws-nuke-v2.16.0-linux-amd64.tar.gz -O - | sudo tar -xz -C $HOME/bin
# 실행
$ aws-nuke-v2.16.0-linux-amd64
Compile from Source
소스에서 aws-nuke를 컴파일하려면 작동하는 Golang 개발 환경이 필요하다.
소스는 $GOPATH/src/github.com/rebuy-de/aws-nuke에 복제되어야 한다.
또한 Glide, golint 및 GNU Make를 설치해야 한다.
그런 다음 make build를 실행하여 바이너리를 프로젝트 디렉터리로 컴파일하거나 make install go install aws-nuke를 $GOPATH/bin으로 실행하면 된다. make xc를 사용하면 다른 플랫폼용으로 aws-nuke를 교차 컴파일할 수 있다.
Docker
다음과 같은 명령을 사용하여 Docker와 함께 aws-nuke를 실행할 수 있다.
$ docker run \
--rm -it \
-v /full-path/to/nuke-config.yml:/home/aws-nuke/config.yml \
-v /home/user/.aws:/home/aws-nuke/.aws \
quay.io/rebuy/aws-nuke:v2.11.0 \
--profile default \
--config /home/aws-nuke/config.yml
작동하려면 AWS 구성 및 aws-nuke 구성의 경로를 조정해야 한다.
또한 올바른 AWS 프로필을 지정해야 한다.
AWS 디렉터리를 탑재하는 대신 --access-key-id 및 --secret-access-key 플래그를 사용할 수 있다.
이미지 태그에서 최신 버전을 사용하고 있는지 확인이 필요하다.
또는 최신 개발 버전에 대해 main을 사용할 수 있지만 이는 언제든지 중단될 가능성이 더 높다는 점에 유의해야한다.
✔️ 사용법
먼저 aws-nuke에 대한 구성 파일을 생성해야 한다. 최소한의 구성은 다음과 같다.
regions:
- eu-west-1
- global
account-blocklist:
- "999999999999" # production
accounts:
"000000000000": {} # aws-nuke-example
이 구성으로 aws-nuke를 실행할 수 있다.
$ aws-nuke -c config/nuke-config.yml --profile aws-nuke-example
aws-nuke version v1.0.39.gc2f318f - Fri Jul 28 16:26:41 CEST 2017 - c2f318f37b7d2dec0e646da3d4d05ab5296d5bce
Do you really want to nuke the account with the ID 000000000000 and the alias 'aws-nuke-example'?
Do you want to continue? Enter account alias to continue.
> aws-nuke-example
eu-west-1 - EC2DHCPOption - 'dopt-bf2ec3d8' - would remove
eu-west-1 - EC2Instance - 'i-01b489457a60298dd' - would remove
eu-west-1 - EC2KeyPair - 'test' - would remove
eu-west-1 - EC2NetworkACL - 'acl-6482a303' - cannot delete default VPC
eu-west-1 - EC2RouteTable - 'rtb-ffe91e99' - would remove
eu-west-1 - EC2SecurityGroup - 'sg-220e945a' - cannot delete group 'default'
eu-west-1 - EC2SecurityGroup - 'sg-f20f958a' - would remove
eu-west-1 - EC2Subnet - 'subnet-154d844e' - would remove
eu-west-1 - EC2Volume - 'vol-0ddfb15461a00c3e2' - would remove
eu-west-1 - EC2VPC - 'vpc-c6159fa1' - would remove
eu-west-1 - IAMUserAccessKey - 'my-user -> ABCDEFGHIJKLMNOPQRST' - would remove
eu-west-1 - IAMUserPolicyAttachment - 'my-user -> AdministratorAccess' - [UserName: "my-user", PolicyArn: "arn:aws:iam::aws:policy/AdministratorAccess", PolicyName: "AdministratorAccess"] - would remove
eu-west-1 - IAMUser - 'my-user' - would remove
Scan complete: 13 total, 11 nukeable, 2 filtered.
Would delete these resources. Provide --no-dry-run to actually destroy resources.
aws-nuke는 첫번째로는 발견된 모든 리소스와 종료만 나열한다. --no-dry-run 플래그가 없기 때문이다.
또한 관리자를 삭제하려고 하는데 우리가 AWS 계정에 액세스 할 때 IAM 사용자를 이용하기 때문에 이 작업을 수행하면 안될 것이다.
따라서 이 사용자를 무시하도록 구성을 확장해야 한다.
regions:
- eu-west-1
account-blocklist:
- "999999999999" # production
accounts:
"000000000000": # aws-nuke-example
filters:
IAMUser:
- "my-user"
IAMUserPolicyAttachment:
- "my-user -> AdministratorAccess"
IAMUserAccessKey:
- "my-user -> ABCDEFGHIJKLMNOPQRST"
aws-nuke는 이제 필터링되지 않은 모든 리소스를 리소스 간의 종속성을 신경 쓰지 않고 삭제하려고 한다.
무시할 수 있는 API 오류가 발생하지만 이러한 오류는 계속 표시되는 경우 aws-nuke 실행이 끝날 때 표시된다.
aws-nuke는 지정된 모든 리소스가 삭제되거나 오류가 있는 리소스만 남을 때까지 모든 리소스 삭제를 재시도한다.
$ aws-nuke -c config/nuke-config.yml --profile aws-nuke-example --no-dry-run
aws-nuke version v1.0.39.gc2f318f - Fri Jul 28 16:26:41 CEST 2017 - c2f318f37b7d2dec0e646da3d4d05ab5296d5bce
Do you really want to nuke the account with the ID 000000000000 and the alias 'aws-nuke-example'?
Do you want to continue? Enter account alias to continue.
> aws-nuke-example
eu-west-1 - EC2DHCPOption - 'dopt-bf2ec3d8' - would remove
eu-west-1 - EC2Instance - 'i-01b489457a60298dd' - would remove
eu-west-1 - EC2KeyPair - 'test' - would remove
eu-west-1 - EC2NetworkACL - 'acl-6482a303' - cannot delete default VPC
eu-west-1 - EC2RouteTable - 'rtb-ffe91e99' - would remove
eu-west-1 - EC2SecurityGroup - 'sg-220e945a' - cannot delete group 'default'
eu-west-1 - EC2SecurityGroup - 'sg-f20f958a' - would remove
eu-west-1 - EC2Subnet - 'subnet-154d844e' - would remove
eu-west-1 - EC2Volume - 'vol-0ddfb15461a00c3e2' - would remove
eu-west-1 - EC2VPC - 'vpc-c6159fa1' - would remove
eu-west-1 - IAMUserAccessKey - 'my-user -> ABCDEFGHIJKLMNOPQRST' - filtered by config
eu-west-1 - IAMUserPolicyAttachment - 'my-user -> AdministratorAccess' - [UserName: "my-user", PolicyArn: "arn:aws:iam::aws:policy/AdministratorAccess", PolicyName: "AdministratorAccess"] - would remove
eu-west-1 - IAMUser - 'my-user' - filtered by config
Scan complete: 13 total, 8 nukeable, 5 filtered.
Do you really want to nuke these resources on the account with the ID 000000000000 and the alias 'aws-nuke-example'?
Do you want to continue? Enter account alias to continue.
> aws-nuke-example
eu-west-1 - EC2DHCPOption - 'dopt-bf2ec3d8' - failed
eu-west-1 - EC2Instance - 'i-01b489457a60298dd' - triggered remove
eu-west-1 - EC2KeyPair - 'test' - triggered remove
eu-west-1 - EC2RouteTable - 'rtb-ffe91e99' - failed
eu-west-1 - EC2SecurityGroup - 'sg-f20f958a' - failed
eu-west-1 - EC2Subnet - 'subnet-154d844e' - failed
eu-west-1 - EC2Volume - 'vol-0ddfb15461a00c3e2' - failed
eu-west-1 - EC2VPC - 'vpc-c6159fa1' - failed
eu-west-1 - S3Object - 's3://rebuy-terraform-state-138758637120/run-terraform.lock' - triggered remove
Removal requested: 2 waiting, 6 failed, 5 skipped, 0 finished
eu-west-1 - EC2DHCPOption - 'dopt-bf2ec3d8' - failed
eu-west-1 - EC2Instance - 'i-01b489457a60298dd' - waiting
eu-west-1 - EC2KeyPair - 'test' - removed
eu-west-1 - EC2RouteTable - 'rtb-ffe91e99' - failed
eu-west-1 - EC2SecurityGroup - 'sg-f20f958a' - failed
eu-west-1 - EC2Subnet - 'subnet-154d844e' - failed
eu-west-1 - EC2Volume - 'vol-0ddfb15461a00c3e2' - failed
eu-west-1 - EC2VPC - 'vpc-c6159fa1' - failed
Removal requested: 1 waiting, 6 failed, 5 skipped, 1 finished
--- truncating long output ---
✔️ AWS 자격 증명
aws-nuke를 인증하는 두 가지 방법이 있다.
static credentials
profile
profile
공유 자격 증명 파일 (ex. ~/.aws/credentials) 또는 공유 구성 파일 (ex. ~/.aws/config)에서 구성할 수 있다.
static credentials
명령줄에 --access-key-id 또는 --secret-access-key 플래그를 써서 사용한다.
--session-token 플래그는 임시 세션에만 필요하다.
공유 프로필을 사용하려면 명령줄 플래그 --profile이 필요하다.
프로필은 공유 자격 증명 파일의 정적 자격 증명이나 수임 역할이 있는 공유 구성 파일에 정의되어야 한다.
✔️ 사용자 지정 AWS 엔드포인트 사용하기
기본이 아닌 AWS 엔드포인트에 대해 실행하도록 aws-nuke를 구성할 수 있다.
ex) S3 어플라이언스 또는 Stratoscale 클러스터와 같은 로컬 엔드포인트를 가리키는 통합 테스트에 사용할 수 있다.
사용자 지정 엔드포인트를 사용하도록 aws-nuke를 구성하려면 다음 예제와 같이 구성 지시문을 추가하면 된다.
regions:
- demo10
# inspired by https://www.terraform.io/docs/providers/aws/guides/custom-service-endpoints.html
endpoints:
- region: demo10
tls_insecure_skip_verify: true
services:
- service: ec2
url: https://10.16.145.115/api/v2/aws/ec2
- service: s3
url: https://10.16.145.115:1060
- service: rds
url: https://10.16.145.115/api/v2/aws/rds
- service: elbv2
url: https://10.16.145.115/api/v2/aws/elbv2
- service: efs
url: https://10.16.145.115/api/v2/aws/efs
- service: emr
url: https://10.16.145.115/api/v2/aws/emr
- service: autoscaling
url: https://10.16.145.115/api/v2/aws/autoscaling
- service: cloudwatch
url: https://10.16.145.115/api/v2/aws/cloudwatch
- service: sns
url: https://10.16.145.115/api/v2/aws/sns
- service: iam
url: https://10.16.145.115/api/v2/aws/iam
- service: acm
url: https://10.16.145.115/api/v2/aws/acm
account-blocklist:
- "account-id-of-custom-region-prod" # production
accounts:
"account-id-of-custom-region-demo10":
그러면 다음과 같이 사용할 수 있다.
$ aws-nuke -c config/my.yaml --access-key-id <access-key> --secret-access-key <secret-key> --default-region demo10
aws-nuke version v2.11.0.2.gf0ad3ac.dirty - Tue Nov 26 19:15:12 IST 2019 - f0ad3aca55eb66b93b88ce2375f8ad06a7ca856f
Do you really want to nuke the account with the ID account-id-of-custom-region-demo10 and the alias 'account-id-of-custom-region-demo10'?
Do you want to continue? Enter account alias to continue.
> account-id-of-custom-region-demo10
demo10 - EC2Volume - vol-099aa1bb08454fd5bc3499897f175fd8 - [tag:Name: "volume_of_5559b38e-0a56-4078-9a6f-eb446c21cadf"] - would remove
demo10 - EC2Volume - vol-11e9b09c71924354bcb4ee77e547e7db - [tag:Name: "volume_of_e4f8c806-0235-4578-8c08-dce45d4c2952"] - would remove
demo10 - EC2Volume - vol-1a10cb3f3119451997422c435abf4275 - [tag:Name: "volume-dd2e4c4a"] - would remove
demo10 - EC2Volume - vol-1a2e649df1ef449686ef8771a078bb4e - [tag:Name: "web-server-5"] - would remove
demo10 - EC2Volume - vol-481d09bbeb334ec481c12beee6f3012e - [tag:Name: "volume_of_15b606ce-9dcd-4573-b7b1-4329bc236726"] - would remove
demo10 - EC2Volume - vol-48f6bd2bebb945848b029c80b0f2de02 - [tag:Name: "Data volume for 555e9f8a"] - would remove
demo10 - EC2Volume - vol-49f0762d84f0439da805d11b6abc1fee - [tag:Name: "Data volume for acb7f3a5"] - would remove
demo10 - EC2Volume - vol-4c34656f823542b2837ac4eaff64762b - [tag:Name: "wpdb"] - would remove
demo10 - EC2Volume - vol-875f091078134fee8d1fe3b1156a4fce - [tag:Name: "volume-f1a7c95f"] - would remove
demo10 - EC2Volume - vol-8776a0d5bd4e4aefadfa8038425edb20 - [tag:Name: "web-server-6"] - would remove
demo10 - EC2Volume - vol-8ed468bfab0b42c3bc617479b8f33600 - [tag:Name: "web-server-3"] - would remove
demo10 - EC2Volume - vol-94e0370b6ab54f03822095d74b7934b2 - [tag:Name: "web-server-2"] - would remove
demo10 - EC2Volume - vol-9ece34dfa7f64dd583ab903a1273340c - [tag:Name: "volume-4ccafc2e"] - would remove
demo10 - EC2Volume - vol-a3fb3e8800c94452aff2fcec7f06c26b - [tag:Name: "web-server-0"] - would remove
demo10 - EC2Volume - vol-a53954e17cb749a283d030f26bbaf200 - [tag:Name: "volume-5484e330"] - would remove
demo10 - EC2Volume - vol-a7afe64f4d0f4965a6703cc0cfab2ba4 - [tag:Name: "Data volume for f1a7c95f"] - would remove
demo10 - EC2Volume - vol-d0bc3f2c887f4072a9fda0b8915d94c1 - [tag:Name: "physical_volume_of_39c29f53-eac4-4f02-9781-90512cc7c563"] - would remove
demo10 - EC2Volume - vol-d1f066d8dac54ae59d087d7e9947e8a9 - [tag:Name: "Data volume for 4ccafc2e"] - would remove
demo10 - EC2Volume - vol-d9adb3f084cd4d588baa08690349b1f9 - [tag:Name: "volume_of_84854c9b-98aa-4f5b-926a-38b3398c3ad2"] - would remove
demo10 - EC2Volume - vol-db42e471b19f42b7835442545214bc1a - [tag:Name: "lb-tf-lb-20191126090616258000000002"] - would remove
demo10 - EC2Volume - vol-db80932fb47243efa67c9dd34223c647 - [tag:Name: "web-server-5"] - would remove
demo10 - EC2Volume - vol-dbea1d1083654d30a43366807a125aed - [tag:Name: "volume-555e9f8a"] - would remove
--- truncating long output ---
✔️ 삭제할 리소스 유형 지정
aws-nuke는 많은 리소스를 삭제하며 릴리스에 따라 더 추가될 수 있다. 결국 모든 리소스를 삭제해야 한다.
삭제할 리소스를 제한할 수 있다. 이를 구성하는 방법에는 여러 가지가 있다.
한 가지 방법은 이미 언급한 필터이다. 이를 위해서는 각 리소스의 식별자를 알아야 한다.
두 가지 방법으로 전체 리소스 유형(예: S3Bucket)이 삭제되는 것을 방지할 수도 있다.
--target 플래그는 nuking을 지정된 리소스 유형으로 제한한다.
--exclude 플래그는 지정된 리소스 유형의 핵 공격을 방지한다.
다음 예와 같이 구성 파일에서 리소스 유형을 구성할 수도 있다.
---
regions:
- "eu-west-1"
account-blocklist:
- 1234567890
resource-types:
# only nuke these three resources
targets:
- S3Object
- S3Bucket
- IAMRole
accounts:
555133742: {}
---
regions:
- "eu-west-1"
account-blocklist:
- 1234567890
resource-types:
# don't nuke IAM users
excludes:
- IAMUser
accounts:
555133742: {}
대상이 여러 위치(예: CLI 및 계정별)에 지정된 경우 모든 위치에서 자원 유형을 지정해야 한다.
즉, 각 구성은 이전 구성을 제한한다.
제외를 사용하면 모든 리소스 유형이 삭제되지 않는다.
다음 명령으로 사용 가능한 모든 리소스 유형을 볼 수 있다.
aws-nuke resource-types
✔️ AWS Cloud Control API 지원
이 기능은 아직 출시되지 않았으며 아마도 v2.18의 일부로 출시될 수 있다.
aws-nuke는 AWS Cloud Control API를 통한 리소스 제거를 지원한다.
aws-nuke를 실행하면 Cloud Control을 통해 수동으로 관리되는 리소스 집합이 자동으로 제거된다.
Cloud Control에서 지원하는 리소스의 하위 집합만 자동으로 제거된다. 이미 구현된 리소스가 있을 수 있고 이를 추가하면 Cloud Control에 다른 이름 지정 체계와 다른 속성 집합이 있기 때문에 사용자 구성의 기존 필터를 우회할 수 있기 때문이다. 또한 aws-nuke에서 아직 지원하지 않는 특수 처리가 필요한 일부 Cloud Control 리소스가 있다.
자동으로 지원되는 Cloud Control 리소스의 하위 집합은 제한되어 있지만 추가 리소스를 시도하도록 aws-nuke를 구성할 수 있다. 구성 파일을 통한 명령줄 플래그를 통해.
구성 파일의 경우 리소스를 resource-types.cloud-control 목록에 추가해야 한다.
resource-types:
cloud-control:
- AWS::EC2::TransitGateway
- AWS::EC2::VPC
명령줄을 사용하려면 추가하려는 각 리소스에 대해 --cloud-control 플래그를 추가해야 한다.
aws-nuke \
-c nuke-config.yaml \
--cloud-control AWS::EC2::TransitGateway \
--cloud-control AWS::EC2::VPC
참고: Cloud Control에서 지원하고 이미 기본적으로 aws-nuke에 의해 구현된 일부 리소스가 있다.
해당 리소스에 대해 Cloud Control을 사용하도록 구성하면 이 리소스에 대해 기본적으로 구현된 코드가 실행되지 않다. 예를 들어 --cloud-control AWS::EC2::VPC의 경우 EC2VPC 리소스를 사용하지 않는다.
✔️ Feature Flags
독단적인 몇 가지 기능이 있다.
모든 사람이 이러한 기능을 사용할 수 있도록 aws-nuke에는 이러한 기능을 수동으로 활성화하는 플래그가 있다.
다음과 같이 구성의 루트 수준에서 구성할 수 있다.
---
feature-flags:
disable-deletion-protection:
RDSInstance: true
EC2Instance: true
CloudformationStack: true
force-delete-lightsail-addons: true
✔️ 리소스 필터링하기
예를 들어 현재 사용자를 삭제하지 않거나 전역적으로 공유된 네임스페이스가 있고 다시 생성하기 어려울 수 있는 S3 버킷과 같은 리소스에 대해 이것을 필터링하는 것이 중요하다. 현재 필터링은 리소스 식별자를 기반으로 한다.
식별자는 aws-nuke의 첫 번째 단계로 출력된다.(예: EC2 인스턴스의 경우 i-01b489457a60298dd).
참고: 필터를 사용하더라도 어플리케이션 서비스 중인 AWS 계정에서 aws-nuke를 실행하면 안된다.
필터 구성에서 실수를 하기 쉽기 때문이며 또한 aws-nuke는 지속적으로 개발 중이므로 새 코드를 아무리 주의 깊게 검토하더라도 새 버그가 발생할 가능성은 항상 있기 때문이다.
필터는 계정별 구성의 일부이며 리소스 유형별로 그룹화된다.
다음은 액세스 권한과 두 개의 액세스 키가 있는 관리자를 제외한 모든 리소스를 삭제하는 구성의 예이다.
---
regions:
- global
- eu-west-1
account-blocklist:
- 1234567890
accounts:
0987654321:
filters:
IAMUser:
- "admin"
IAMUserPolicyAttachment:
- "admin -> AdministratorAccess"
IAMUserAccessKey:
- "admin -> AKSDAFRETERSDF"
- "admin -> AFGDSGRTEWSFEY"
리소스 식별자가 목록의 필터와 정확히 일치하는 리소스는 건너뛴다.
이는 aws-nuke 실행 시 "filtered by config"으로 표시된다.
✔️ Filter Properties
일부 리소스는 속성을 통한 필터링을 지원한다. 리소스가 이러한 속성을 지원하면 다음 예와 같이 출력에 나열된다.
global - IAMUserPolicyAttachment - 'admin -> AdministratorAccess' - [RoleName: "admin", PolicyArn: "arn:aws:iam::aws:policy/AdministratorAccess", PolicyName: "AdministratorAccess"] - would remove
속성을 사용하려면 일반 문자열이 아닌 속성과 값이 있는 객체를 지정해야 한다.
이러한 유형을 사용하여 구성을 단순화할 수 있다. 예를 들어 단일 사용자의 모든 액세스 키를 보호할 수 있다.
IAMUserAccessKey:
- property: UserName
value: "admin"
✔️ Filter Types
완전 일치 이외의 추가 비교 유형도 있다.
exact – 식별자는 주어진 문자열과 정확히 일치해야 한다. 이것이 기본값이다.
contains – 식별자는 주어진 문자열을 포함해야 한다.
glob – 식별자는 지정된 glob 패턴과 일치해야 한다. 이는 문자열에 * 및 ?와 같은 와일드카드가 포함될 수 있음을 의미한다. 글로빙은 파일 경로용으로 설계되었으므로 와일드카드는 디렉토리 구분 기호(/)와 일치하지 않는다.
glob 패턴에 대한 자세한 내용은 라이브러리 설명서에서 찾을 수 있다.
regex – 식별자는 지정된 정규식과 일치해야 한다. 구문에 대한 자세한 내용은 라이브러리 설명서에서 찾을 수 있다.
dateOlderThan - 식별자가 타임스탬프로 구문 분석된다. 오프셋이 추가된 후(값 필드에 지정됨) 결과 타임스탬프는 현재 시간 이후여야 한다. 오프셋 구문에 대한 자세한 내용은 라이브러리 설명서에서 찾을 수 있다.
지원되는 날짜 형식은 epoch time, 2006-01-02, 2006/01/02, 2006-01-02T15:04:05Z, 2006-01-02T15:04:05.999999999Z07:00, and 2006-01-02T15:04:05Z07:00.
기본이 아닌 비교 유형을 사용하려면 일반 문자열 대신 유형 및 값으로 객체를 지정해야 한다.
이러한 유형을 사용하여 구성을 단순화할 수 있다.
예를 들어, glob을 사용하여 단일 사용자의 모든 액세스 키를 보호할 수 있다.
IAMUserAccessKey:
- type: glob
value: "admin -> *"
✔️ Using Them Together
필터 속성과 필터 유형을 함께 사용할 수도 있다.
예를 들어 특정 TLD의 모든 호스팅 영역을 보호하려면 다음을 수행한다.
Route53HostedZone:
- property: Name
type: glob
value: "*.rebuy.cloud."
✔️ Inverting Filter Results
모든 필터 결과는 invert: true를 사용하여 반전될 수 있다. 예를 들면 다음과 같다.
CloudFormationStack:
- property: Name
value: "foo"
invert: true
이 경우 "foo"라는 이름을 제외한 모든 CloudFormationStack이 필터링된다.
aws-nuke는 내부적으로 모든 리소스를 가져와 모든 필터를 적용한다. 필터가 일치하면 노드를 필터링된 것으로 표시한다.
✔️ Filter Presets
일부 필터가 여러 계정에서 동일한 경우일 수 있다.
이는 특히 Terraform과 같은 프로비저닝 도구를 사용하거나 IAM 리소스가 동일한 패턴을 따르는 경우 발생할 수 있다.
이 경우 aws-nuke는 여러 계정에 적용할 수 있는 필터 사전 설정을 지원한다. 구성은 다음과 같다.
---
regions:
- "global"
- "eu-west-1"
account-blocklist:
- 1234567890
accounts:
555421337:
presets:
- "common"
555133742:
presets:
- "common"
- "terraform"
555134237:
presets:
- "common"
- "terraform"
filters:
EC2KeyPair:
- "notebook"
presets:
terraform:
filters:
S3Bucket:
- type: glob
value: "my-statebucket-*"
DynamoDBTable:
- "terraform-lock"
common:
filters:
IAMRole:
- "OrganizationAccountAccessRole"
✔️ 테스팅
Unit Tests
aws-nuke를 단위 테스트하려면 일부 테스트에서 gomock을 실행해야 한다.
이것은 go generate ./...를 통해 실행되지만 make 테스트를 통해 자동으로 실행된다.
단위 테스트를 실행하려면:
make test
'Public Cloud > AWS' 카테고리의 다른 글
[AWS] AWS CloudFormation으로 웹 앱 런칭 및 관리하기 (0) | 2022.04.16 |
---|---|
[AWS] AWS CLI와 SDK를 이용한 DynamoDB CRUD (0) | 2022.04.16 |
[AWS] AMI 이미지 생성 및 관리 (0) | 2022.04.07 |
[AWS] IAM 실습 (0) | 2022.04.06 |
[AWS] S3를 이용한 CloudFront 실습 (0) | 2022.04.06 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!