คำเตือน
พื้นที่เก็บข้อมูลสำหรับ aws-nuke นี้ไม่ได้รับการบำรุงรักษาอีกต่อไป เราขอแนะนำให้ผู้ใช้เปลี่ยนไปใช้ Fork ที่ได้รับการดูแลอย่างดีของโปรเจ็กต์นี้ที่ ekristen/aws-nuke เราขอขอบคุณการสนับสนุนและการสนับสนุนทั้งหมดที่เราได้รับตลอดช่วงชีวิตของโครงการนี้ เราเชื่อว่า fork จะยังคงมอบฟังก์ชันการทำงานและการสนับสนุนที่คุณคาดหวังจาก aws-nuke ต่อไป โปรดทราบว่าการเลิกใช้งานนี้หมายความว่าเราจะไม่แก้ไขปัญหา ยอมรับคำขอดึงข้อมูล หรือเผยแพร่พื้นที่เก็บข้อมูลนี้ในอนาคต ขอบคุณสำหรับความเข้าใจและการสนับสนุนของคุณ
ลบทรัพยากรทั้งหมดออกจากบัญชี AWS
สถานะการพัฒนา aws-nuke มีเสถียรภาพ แต่มีแนวโน้มว่าทรัพยากร AWS จะไม่ครอบคลุมทั้งหมด ได้รับการสนับสนุนให้เพิ่มทรัพยากรที่ขาดหายไป และสร้างคำขอดึงหรือสร้างปัญหา
โปรดทราบว่า aws-nuke เป็นเครื่องมือทำลายล้างสูง ดังนั้นคุณต้องใช้ความระมัดระวังให้มากในขณะใช้งาน มิฉะนั้นคุณอาจลบข้อมูลการผลิต
เราขอแนะนำอย่างยิ่งให้คุณไม่เรียกใช้แอปพลิเคชันนี้บนบัญชี AWS ใดๆ ซึ่งคุณไม่สามารถสูญเสียทรัพยากรทั้งหมดได้
เพื่อลดรัศมีการระเบิดของอุบัติเหตุ มีข้อควรระวังด้านความปลอดภัยบางประการ:
--no-dry-run
เพื่อลบทรัพยากรจริงprod
สตริงนี้เป็นฮาร์ดโค้ด และขอแนะนำให้เพิ่มลงในบัญชีที่ใช้งานจริงทุกบัญชี (เช่น mycompany-production-ecr
)อย่าลังเลที่จะสร้างปัญหา หากคุณมีแนวคิดใดๆ ที่จะปรับปรุงขั้นตอนด้านความปลอดภัย
โดยปกติเราจะออกเวอร์ชันใหม่เมื่อมีการเปลี่ยนแปลงเพียงพอและได้รับการทดสอบมาระยะหนึ่งแล้ว
คุณสามารถค้นหาไบนารี Linux, macOS และ Windows ได้ในหน้าเผยแพร่ แต่เรายังให้บริการเวอร์ชันคอนเทนเนอร์บน quay.io/rebuy/aws-nuke และ docker.io/rebuy/aws-nuke ทั้งสองมีให้ใช้งานสำหรับสถาปัตยกรรมหลายตัว (amd64, arm64 & armv7)
ในตอนแรกคุณต้องสร้างไฟล์ปรับแต่งสำหรับ 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
นอกจากนี้ยังต้องการลบผู้ดูแลระบบ เราไม่ต้องการทำเช่นนี้ เนื่องจากเราใช้ผู้ใช้รายนี้เพื่อเข้าถึงบัญชีของเรา ดังนั้นเราจึงต้องขยายการกำหนดค่าเพื่อไม่ให้ผู้ใช้รายนี้:
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 -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-nuke ตอนนี้พยายามลบทรัพยากรทั้งหมดที่ไม่ได้กรอง โดยไม่คำนึงถึงการขึ้นต่อกันระหว่างทรัพยากรเหล่านั้น ซึ่งส่งผลให้เกิดข้อผิดพลาด API ซึ่งสามารถละเว้นได้ ข้อผิดพลาดเหล่านี้จะแสดงเมื่อสิ้นสุดการเรียกใช้ aws-nuke หากยังคงปรากฏอยู่
aws-nuke พยายามลบทรัพยากรทั้งหมดอีกครั้งจนกว่าจะลบทรัพยากรที่ระบุทั้งหมดหรือจนกว่าจะเหลือเพียงทรัพยากรที่มีข้อผิดพลาด
มีสองวิธีในการตรวจสอบสิทธิ์ aws-nuke มีข้อมูลรับรองและโปรไฟล์แบบคงที่ อันหลังสามารถกำหนดค่าได้ในไฟล์ข้อมูลรับรองที่ใช้ร่วมกัน (เช่น ~/.aws/credentials
) หรือไฟล์กำหนดค่าที่ใช้ร่วมกัน (เช่น ~/.aws/config
)
หากต้องการใช้ ข้อมูลรับรองแบบคงที่ จำเป็นต้องมีแฟล็กบรรทัดคำสั่ง --access-key-id
และ --secret-access-key
แฟล็ก --session-token
จำเป็นสำหรับเซสชันชั่วคราวเท่านั้น
หากต้องการใช้ โปรไฟล์ที่แชร์ จำเป็นต้องมีแฟล็กบรรทัดคำสั่ง --profile
โปรไฟล์จะต้องถูกกำหนดด้วยข้อมูลรับรองแบบคงที่ในไฟล์ข้อมูลประจำตัวที่ใช้ร่วมกันหรือในไฟล์กำหนดค่าที่ใช้ร่วมกันที่มีบทบาทสมมติ
คุณสามารถกำหนดค่า aws-nuke ให้ทำงานกับตำแหน่งข้อมูล AWS ที่ไม่ใช่ค่าเริ่มต้นได้ สามารถใช้สำหรับการทดสอบการรวมที่ชี้ไปยังตำแหน่งข้อมูลภายในเครื่อง เช่น อุปกรณ์ 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
คุณลักษณะนี้ยังไม่เปิดตัวและอาจเป็นส่วนหนึ่งของ
v2.18
aws-nuke รองรับการลบทรัพยากรผ่าน AWS Cloud Control API เมื่อดำเนินการ aws-nuke ระบบจะลบชุดทรัพยากรที่ได้รับการจัดการด้วยตนเองโดยอัตโนมัติผ่าน Cloud Control
เฉพาะทรัพยากรที่รองรับ Cloud Control เพียงบางส่วนเท่านั้นที่จะถูกนำออกโดยอัตโนมัติ เนื่องจากอาจมีทรัพยากรที่ใช้งานอยู่แล้ว และการเพิ่มทรัพยากรเหล่านั้นก็จะข้ามตัวกรองที่มีอยู่ในการกำหนดค่าผู้ใช้ เนื่องจาก Cloud Control มีรูปแบบการตั้งชื่ออื่นและชุดคุณสมบัติอื่น นอกจากนี้ยังมีทรัพยากร Cloud Control บางส่วนที่จำเป็นต้องมีการจัดการพิเศษซึ่ง aws-nuke ยังไม่รองรับ
แม้ว่าชุดย่อยของทรัพยากร 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
มีคุณสมบัติบางอย่างที่ค่อนข้างดื้อรั้น เพื่อให้การทำงานเหล่านั้นสำหรับทุกคน aws-nuke มีแฟล็กเพื่อเปิดใช้งานคุณสมบัติเหล่านั้นด้วยตนเอง สิ่งเหล่านี้สามารถกำหนดค่าได้ที่ระดับรูทของการกำหนดค่า เช่นนี้
---
feature-flags :
disable-deletion-protection :
RDSInstance : true
EC2Instance : true
CloudformationStack : true
force-delete-lightsail-addons : true
คุณสามารถกรองสิ่งนี้ได้ซึ่งเป็นสิ่งสำคัญสำหรับการไม่ลบผู้ใช้ปัจจุบัน เช่น หรือสำหรับทรัพยากร เช่น S3 Buckets ซึ่งมีเนมสเปซที่แชร์ทั่วโลกและอาจสร้างใหม่ได้ยาก ขณะนี้การกรองจะขึ้นอยู่กับตัวระบุทรัพยากร ตัวระบุจะถูกพิมพ์เป็นขั้นตอนแรกของ aws-nuke (เช่น i-01b489457a60298dd
สำหรับอินสแตนซ์ EC2)
หมายเหตุ: แม้จะมีตัวกรอง คุณไม่ควรเรียกใช้ aws-nuke บนบัญชี AWS ใดๆ ซึ่งคุณไม่สามารถสูญเสียทรัพยากรทั้งหมดได้ เป็นเรื่องง่ายที่จะเกิดข้อผิดพลาดในการกำหนดค่าตัวกรอง นอกจากนี้ เนื่องจาก aws-nuke มีการพัฒนาอย่างต่อเนื่อง จึงมีความเป็นไปได้ที่จะแนะนำข้อบกพร่องใหม่ๆ อยู่เสมอ ไม่ว่าเราจะตรวจสอบโค้ดใหม่ด้วยความระมัดระวังเพียงใดก็ตาม
ตัวกรองเป็นส่วนหนึ่งของการกำหนดค่าเฉพาะบัญชีและจัดกลุ่มตามประเภททรัพยากร นี่คือตัวอย่างของการกำหนดค่าที่จะลบทรัพยากรทั้งหมด ยกเว้นผู้ใช้ admin
ที่มีสิทธิ์การเข้าถึงและคีย์การเข้าถึงสองคีย์:
---
regions :
- global
- eu-west-1
account-blocklist :
- 1234567890
accounts :
0987654321 :
filters :
IAMUser :
- " admin "
IAMUserPolicyAttachment :
- " admin -> AdministratorAccess "
IAMUserAccessKey :
- " admin -> AKSDAFRETERSDF "
- " admin -> AFGDSGRTEWSFEY "
ทรัพยากรใดๆ ที่มีตัวระบุทรัพยากรตรงกับตัวกรองใดๆ ในรายการจะถูกข้ามไป สิ่งเหล่านี้จะถูกทำเครื่องหมายเป็น "กรองโดยการกำหนดค่า" ในการรัน aws-nuke
ทรัพยากรบางอย่างรองรับการกรองผ่านคุณสมบัติ เมื่อทรัพยากรสนับสนุนคุณสมบัติเหล่านี้ พวกเขาจะถูกแสดงรายการในผลลัพธ์เหมือนในตัวอย่างนี้:
global - IAMUserPolicyAttachment - 'admin -> AdministratorAccess' - [RoleName: "admin", PolicyArn: "arn:aws:iam::aws:policy/AdministratorAccess", PolicyName: "AdministratorAccess"] - would remove
หากต้องการใช้คุณสมบัติ จำเป็นต้องระบุออบเจ็กต์ที่มี properties
และ value
แทนสตริงธรรมดา
ประเภทเหล่านี้สามารถใช้เพื่อทำให้การกำหนดค่าง่ายขึ้น ตัวอย่างเช่น คุณสามารถปกป้องคีย์การเข้าถึงทั้งหมดของผู้ใช้คนเดียวได้:
IAMUserAccessKey :
- property : UserName
value : " admin "
นอกจากนี้ยังมีประเภทการเปรียบเทียบเพิ่มเติมนอกเหนือจากการจับคู่แบบตรงทั้งหมด:
exact
– ตัวระบุจะต้องตรงกับสตริงที่กำหนดทุกประการ นี่คือค่าเริ่มต้นcontains
– ตัวระบุต้องมีสตริงที่กำหนดglob
– ตัวระบุจะต้องตรงกับรูปแบบ glob ที่กำหนด ซึ่งหมายความว่าสตริงอาจมีไวด์การ์ด เช่น *
และ ?
- โปรดทราบว่าการวนรอบได้รับการออกแบบมาสำหรับเส้นทางของไฟล์ ดังนั้นไวด์การ์ดจึงไม่ตรงกับตัวคั่นไดเร็กทอรี ( /
) รายละเอียดเกี่ยวกับรูปแบบ glob สามารถพบได้ในเอกสารประกอบของห้องสมุดregex
– ตัวระบุต้องตรงกับนิพจน์ทั่วไปที่กำหนด รายละเอียดเกี่ยวกับไวยากรณ์สามารถพบได้ในเอกสารประกอบของห้องสมุดdateOlderThan
- ตัวระบุจะถูกแยกวิเคราะห์เป็นการประทับเวลา หลังจากเพิ่มออฟเซ็ตเข้าไปแล้ว (ระบุไว้ในฟิลด์ value
) การประทับเวลาผลลัพธ์จะต้องอยู่หลังเวลาปัจจุบัน รายละเอียดเกี่ยวกับไวยากรณ์ออฟเซ็ตสามารถพบได้ในเอกสารประกอบของห้องสมุด รูปแบบวันที่ที่รองรับคือเวลายุค 2006-01-02
, 2006/01/02
, 2006-01-02T15:04:05Z
, 2006-01-02T15:04:05.999999999Z07:00
และ 2006-01-02T15:04:05Z07:00
. หากต้องการใช้ประเภทการเปรียบเทียบที่ไม่ใช่ค่าเริ่มต้น จำเป็นต้องระบุออบเจ็กต์ที่มี type
และ value
แทนสตริงธรรมดา
ประเภทเหล่านี้สามารถใช้เพื่อทำให้การกำหนดค่าง่ายขึ้น ตัวอย่างเช่น เป็นไปได้ที่จะปกป้องคีย์การเข้าถึงทั้งหมดของผู้ใช้คนเดียวโดยใช้ glob
:
IAMUserAccessKey :
- type : glob
value : " admin -> * "
นอกจากนี้ยังสามารถใช้คุณสมบัติตัวกรองและประเภทตัวกรองร่วมกันได้ ตัวอย่างเช่น เพื่อปกป้อง Hosted Zone ทั้งหมดของ TLD เฉพาะ:
Route53HostedZone :
- property : Name
type : glob
value : " *.rebuy.cloud. "
ผลลัพธ์ตัวกรองใดๆ สามารถกลับด้านได้โดยใช้ invert: true
เช่น:
CloudFormationStack :
- property : Name
value : " foo "
invert : true
ในกรณีนี้ CloudFormationStack ใดๆ ยกเว้น อันที่เรียกว่า "foo" จะถูกกรอง โปรดทราบว่า aws-nuke จะใช้ทรัพยากรทั้งหมดเป็นการภายใน และใช้ทุกตัวกรองกับทรัพยากรนั้น หากตัวกรองตรงกัน จะทำเครื่องหมายโหนดว่ากรองแล้ว
อาจเป็นกรณีที่ตัวกรองบางตัวเหมือนกันในหลายบัญชี โดยเฉพาะอย่างยิ่งสิ่งนี้อาจเกิดขึ้นได้ หากใช้เครื่องมือการจัดเตรียม เช่น 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 "
brew install aws-nuke
วิธีที่ง่ายที่สุดในการติดตั้งคือดาวน์โหลดรุ่นล่าสุดจาก GitHub
ดาวน์โหลดและแยก $ wget -c https://github.com/rebuy-de/aws-nuke/releases/download/v2.25.0/aws-nuke-v2.25.0-linux-amd64.tar.gz -O - | tar -xz -C $HOME/bin
เรียกใช้ $ aws-nuke-v2.25.0-linux-amd64
หากต้องการคอมไพล์ aws-nuke จากแหล่งที่มา คุณต้องมีสภาพแวดล้อมการพัฒนา Golang ที่ใช้งานได้ แหล่งที่มาจะต้องถูกโคลนไปที่ $GOPATH/src/github.com/rebuy-de/aws-nuke
คุณต้องติดตั้ง golint และ GNU Make ด้วย
จากนั้นคุณเพียงแค่ต้องเรียกใช้ make build
เพื่อคอมไพล์ไบนารีลงในไดเร็กทอรีโปรเจ็กต์ หรือ make install
go install aws-nuke ลงใน $GOPATH/bin
ด้วย make xc
คุณสามารถข้ามการคอมไพล์ aws-nuke สำหรับแพลตฟอร์มอื่นได้
คุณสามารถรัน aws-nuke ด้วย Docker ได้โดยใช้คำสั่งดังนี้:
$ 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.25.0
--profile default
--config /home/aws-nuke/config.yml
เพื่อให้ได้ผล คุณต้องปรับเส้นทางสำหรับการกำหนดค่า AWS และการกำหนดค่า aws-nuke
นอกจากนี้ คุณต้องระบุโปรไฟล์ AWS ที่ถูกต้องด้วย แทนที่จะติดตั้งไดเรกทอรี AWS คุณสามารถใช้แฟล็ก --access-key-id
และ --secret-access-key
ตรวจสอบให้แน่ใจว่าคุณใช้เวอร์ชันล่าสุดในแท็กรูปภาพ หรือคุณสามารถใช้ main
สำหรับเวอร์ชันการพัฒนาล่าสุดได้ แต่โปรดทราบว่าสิ่งนี้มีแนวโน้มที่จะหยุดทำงานเมื่อใดก็ได้
หากต้องการทดสอบหน่วย aws-nuke การทดสอบบางอย่างต้องใช้ gomock จึงจะทำงานได้ สิ่งนี้จะทำงานผ่าน go generate ./...
แต่จะรันโดยอัตโนมัติผ่าน make test
หากต้องการรันการทดสอบหน่วย:
make test
อย่าลังเลที่จะสร้างปัญหา GitHub สำหรับรายงานข้อผิดพลาดหรือคำขอคุณสมบัติ โปรดใช้รายชื่ออีเมลของเราสำหรับคำถาม: [email protected] คุณยังสามารถค้นหาในไฟล์เก็บถาวรรายชื่อผู้รับจดหมายว่ามีคนประสบปัญหาเดียวกันหรือไม่: https://groups.google.com/d/forum/aws-nuke
คุณสามารถสนับสนุน aws-nuke ได้โดยการฟอร์กพื้นที่เก็บข้อมูลนี้ ทำการเปลี่ยนแปลง และสร้าง Pull Request กับพื้นที่เก็บข้อมูลของเรา หากคุณไม่แน่ใจวิธีแก้ปัญหาหรือมีคำถามอื่นๆ เกี่ยวกับการร่วมให้ข้อมูล โปรดสร้างปัญหา GitHub