Vorsicht
Dieses Repository für aws-nuke wird nicht mehr aktiv gepflegt. Wir empfehlen Benutzern, zum aktiv gepflegten Fork dieses Projekts unter ekristen/aws-nuke zu wechseln. Wir freuen uns über die Unterstützung und Beiträge, die wir im Laufe dieses Projekts erhalten haben. Wir glauben, dass der Fork weiterhin die Funktionalität und den Support bieten wird, die Sie von aws-nuke erwarten. Bitte beachten Sie, dass diese Einstellung bedeutet, dass wir uns nicht um Probleme kümmern, Pull-Anfragen akzeptieren oder zukünftige Versionen aus diesem Repository herausgeben. Vielen Dank für Ihr Verständnis und Ihre Unterstützung.
Entfernen Sie alle Ressourcen von einem AWS-Konto.
Der Entwicklungsstatus von aws-nuke ist stabil, es ist jedoch wahrscheinlich, dass nicht alle AWS-Ressourcen davon abgedeckt sind. Wir empfehlen Ihnen, fehlende Ressourcen hinzuzufügen und eine Pull-Anfrage oder ein Problem zu erstellen.
Seien Sie sich bewusst, dass aws-nuke ein sehr zerstörerisches Werkzeug ist, daher müssen Sie bei der Verwendung sehr vorsichtig sein. Andernfalls könnten Sie Produktionsdaten löschen.
Wir raten Ihnen dringend davon ab, diese Anwendung auf einem AWS-Konto auszuführen, da Sie es sich nicht leisten können, alle Ressourcen zu verlieren.
Um den Explosionsradius von Unfällen zu verringern, gibt es einige Sicherheitsvorkehrungen:
--no-dry-run
hinzufügen, um Ressourcen tatsächlich zu löschen.prod
enthalten. Diese Zeichenfolge ist fest codiert und es wird empfohlen, sie zu jedem tatsächlichen Produktionskonto hinzuzufügen (z. B. mycompany-production-ecr
).Wenn Sie Ideen zur Verbesserung der Sicherheitsverfahren haben, können Sie gerne ein Problem erstellen.
Normalerweise veröffentlichen wir eine neue Version, sobald genügend Änderungen vorliegen und eine Zeit lang getestet wurden.
Sie finden Linux-, macOS- und Windows-Binärdateien auf der Release-Seite, aber wir bieten auch Containerversionen auf quay.io/rebuy/aws-nuke und docker.io/rebuy/aws-nuke an. Beide sind für mehrere Architekturen verfügbar (amd64, arm64 und armv7).
Zuerst müssen Sie eine Konfigurationsdatei für aws-nuke erstellen. Dies ist eine minimale:
regions :
- eu-west-1
- global
account-blocklist :
- " 999999999999 " # production
accounts :
" 000000000000 " : {} # aws-nuke-example
Mit dieser Konfiguration können wir aws-nuke ausführen:
$ 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.
Wie wir sehen, listet aws-nuke nur alle gefundenen Ressourcen und Exits auf. Dies liegt daran, dass das Flag --no-dry-run
fehlt. Außerdem möchte es den Administrator löschen. Wir möchten dies nicht tun, da wir diesen Benutzer verwenden, um auf unser Konto zuzugreifen. Daher müssen wir die Konfiguration so erweitern, dass sie diesen Benutzer ignoriert:
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 ---
Wie Sie sehen, versucht aws-nuke nun, alle nicht gefilterten Ressourcen zu löschen, ohne sich um die Abhängigkeiten zwischen ihnen zu kümmern. Dies führt zu API-Fehlern, die ignoriert werden können. Diese Fehler werden am Ende des aws-nuke -Laufs angezeigt, sofern sie weiterhin auftreten.
aws-nuke versucht erneut, alle Ressourcen zu löschen, bis alle angegebenen gelöscht sind oder bis nur noch Ressourcen mit Fehlern übrig sind.
Es gibt zwei Möglichkeiten , aws-nuke zu authentifizieren. Es gibt statische Anmeldeinformationen und Profile. Letzteres kann in der freigegebenen Anmeldeinformationsdatei (z. B. ~/.aws/credentials
) oder der freigegebenen Konfigurationsdatei (z. B. ~/.aws/config
) konfiguriert werden.
Um statische Anmeldeinformationen zu verwenden, sind die Befehlszeilenflags --access-key-id
und --secret-access-key
erforderlich. Das Flag --session-token
ist nur für temporäre Sitzungen erforderlich.
Um freigegebene Profile zu verwenden, ist das Befehlszeilen-Flag --profile
erforderlich. Das Profil muss entweder mit statischen Anmeldeinformationen in der gemeinsamen Anmeldeinformationsdatei oder in der gemeinsamen Konfigurationsdatei mit einer übernehmenden Rolle definiert werden.
Es ist möglich, aws-nuke so zu konfigurieren, dass es auf nicht standardmäßigen AWS-Endpunkten ausgeführt wird. Es könnte für Integrationstests verwendet werden, die auf einen lokalen Endpunkt wie beispielsweise eine S3-Appliance oder einen Stratoscale-Cluster verweisen.
Um aws-nuke für die Verwendung benutzerdefinierter Endpunkte zu konfigurieren, fügen Sie die Konfigurationsanweisungen hinzu, wie im folgenden Beispiel gezeigt:
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 " :
Dieser kann dann wie folgt genutzt werden:
$ aws-nuke -c config/my.yaml --access-key-id --secret-access-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 löscht viele Ressourcen und es könnten bei jeder Veröffentlichung weitere hinzugefügt werden. Schließlich sollten alle Ressourcen gelöscht werden. Möglicherweise möchten Sie einschränken, welche Ressourcen gelöscht werden sollen. Es gibt mehrere Möglichkeiten, dies zu konfigurieren.
Eine Möglichkeit sind Filter, die bereits erwähnt wurden. Dazu ist es erforderlich, die Kennung jeder Ressource zu kennen. Es gibt auch zwei Methoden, um zu verhindern, dass ganze Ressourcentypen (z. B. S3Bucket
) gelöscht werden.
--target
beschränkt Nuking auf die angegebenen Ressourcentypen.--exclude
verhindert das Nuking der angegebenen Ressourcentypen.Es ist auch möglich, die Ressourcentypen in der Konfigurationsdatei zu konfigurieren, wie in diesen Beispielen:
---
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: {}
Wenn Ziele an mehreren Stellen angegeben werden (z. B. CLI- und kontospezifisch), muss an allen Stellen ein Ressourcentyp angegeben werden. Mit anderen Worten: Jede Konfiguration schränkt die vorherigen ein.
Wenn ein Ausschluss verwendet wird, werden nicht alle seine Ressourcentypen gelöscht.
Hinweis: Mit diesem Befehl können Sie alle verfügbaren Ressourcentypen anzeigen:
aws-nuke resource-types
Diese Funktion ist noch nicht veröffentlicht und wahrscheinlich Teil von
v2.18
.
aws-nuke unterstützt das Entfernen von Ressourcen über die AWS Cloud Control API. Beim Ausführen von aws-nuke wird automatisch ein manuell verwalteter Satz von Ressourcen über Cloud Control entfernt.
Nur eine Teilmenge der von Cloud Control unterstützten Ressourcen wird automatisch entfernt, da es möglicherweise bereits implementierte Ressourcen gibt und das Hinzufügen dieser Ressourcen bestehende Filter in Benutzerkonfigurationen umgehen würde, da Cloud Control über ein anderes Benennungsschema und einen anderen Satz von Eigenschaften verfügt. Darüber hinaus gibt es einige Cloud Control-Ressourcen, die eine besondere Behandlung erfordern, die von aws-nuke noch nicht unterstützt wird.
Auch wenn die Teilmenge der automatisch unterstützten Cloud Control-Ressourcen begrenzt ist, können Sie aws-nuke so konfigurieren, dass es jede zusätzliche Ressource ausprobiert. Entweder über Befehlszeilen-Flags oder über die Konfigurationsdatei.
Für die Konfigurationsdatei müssen Sie die Ressource zur Liste resource-types.cloud-control
hinzufügen:
resource-types :
cloud-control :
- AWS::EC2::TransitGateway
- AWS::EC2::VPC
Wenn Sie die Befehlszeile verwenden möchten, müssen Sie für jede Ressource, die Sie hinzufügen möchten, ein Flag --cloud-control
hinzufügen:
aws-nuke
-c nuke-config.yaml
--cloud-control AWS::EC2::TransitGateway
--cloud-control AWS::EC2::VPC
Hinweis: Es gibt einige Ressourcen, die von Cloud Control unterstützt werden und bereits nativ von aws-nuke implementiert sind. Wenn Sie die Verwendung von Cloud Control für diese Ressourcen konfigurieren, wird der nativ implementierte Code für diese Ressource nicht ausgeführt. Beispielsweise wird mit --cloud-control AWS::EC2::VPC
die EC2VPC
Ressource nicht verwendet.
Es gibt einige Features, die recht eigensinnig sind. Damit diese für alle funktionieren, verfügt aws-nuke über Flags zur manuellen Aktivierung dieser Funktionen. Diese können auf der Root-Ebene der Konfiguration wie folgt konfiguriert werden:
---
feature-flags :
disable-deletion-protection :
RDSInstance : true
EC2Instance : true
CloudformationStack : true
force-delete-lightsail-addons : true
Dies ist beispielsweise wichtig, um den aktuellen Benutzer nicht zu löschen, oder für Ressourcen wie S3-Buckets, die über einen global freigegebenen Namespace verfügen und möglicherweise schwer neu zu erstellen sind. Derzeit basiert die Filterung auf der Ressourcenkennung. Der Bezeichner wird als erster Schritt von aws-nuke gedruckt (z. B. i-01b489457a60298dd
für eine EC2-Instanz).
Hinweis: Auch mit Filtern sollten Sie aws-nuke nicht auf einem AWS-Konto ausführen, bei dem Sie es sich nicht leisten können, alle Ressourcen zu verlieren. Bei der Filterkonfiguration können leicht Fehler passieren. Da sich aws-nuke außerdem in einer kontinuierlichen Entwicklung befindet, besteht immer die Möglichkeit, neue Fehler einzuführen, egal wie sorgfältig wir neuen Code prüfen.
Die Filter sind Teil der kontospezifischen Konfiguration und nach Ressourcentypen gruppiert. Dies ist ein Beispiel für eine Konfiguration, die alle Ressourcen außer dem admin
Benutzer mit seinen Zugriffsberechtigungen und zwei Zugriffsschlüsseln löscht:
---
regions :
- global
- eu-west-1
account-blocklist :
- 1234567890
accounts :
0987654321 :
filters :
IAMUser :
- " admin "
IAMUserPolicyAttachment :
- " admin -> AdministratorAccess "
IAMUserAccessKey :
- " admin -> AKSDAFRETERSDF "
- " admin -> AFGDSGRTEWSFEY "
Jede Ressource, deren Ressourcen-ID genau mit einem der Filter in der Liste übereinstimmt, wird übersprungen. Diese werden bei der Ausführung von aws-nuke als „nach Konfiguration gefiltert“ markiert.
Einige Ressourcen unterstützen das Filtern über Eigenschaften. Wenn eine Ressource diese Eigenschaften unterstützt, werden sie wie in diesem Beispiel in der Ausgabe aufgelistet:
global - IAMUserPolicyAttachment - 'admin -> AdministratorAccess' - [RoleName: "admin", PolicyArn: "arn:aws:iam::aws:policy/AdministratorAccess", PolicyName: "AdministratorAccess"] - would remove
Um Eigenschaften zu verwenden, muss anstelle der einfachen Zeichenfolge ein Objekt mit properties
und value
angegeben werden.
Diese Typen können zur Vereinfachung der Konfiguration verwendet werden. Es ist beispielsweise möglich, alle Zugangsschlüssel eines einzelnen Benutzers zu schützen:
IAMUserAccessKey :
- property : UserName
value : " admin "
Neben der exakten Übereinstimmung gibt es noch weitere Vergleichsarten:
exact
– Der Bezeichner muss genau mit der angegebenen Zeichenfolge übereinstimmen. Dies ist die Standardeinstellung.contains
– Der Bezeichner muss die angegebene Zeichenfolge enthalten.glob
– Der Bezeichner muss mit dem angegebenen Glob-Muster übereinstimmen. Das bedeutet, dass die Zeichenfolge möglicherweise Platzhalter wie *
und ?
enthält. . Beachten Sie, dass Globbing für Dateipfade konzipiert ist, sodass die Platzhalter nicht mit dem Verzeichnistrennzeichen ( /
) übereinstimmen. Details zum Glob-Muster finden Sie in der Bibliotheksdokumentation.regex
– Der Bezeichner muss mit dem angegebenen regulären Ausdruck übereinstimmen. Details zur Syntax finden Sie in der Bibliotheksdokumentation.dateOlderThan
– Der Bezeichner wird als Zeitstempel analysiert. Nachdem der Offset hinzugefügt wurde (angegeben im value
), muss der resultierende Zeitstempel NACH der aktuellen Zeit liegen. Einzelheiten zur Offset-Syntax finden Sie in der Bibliotheksdokumentation. Unterstützte Datumsformate sind Epochenzeit, 2006-01-02
, 2006/01/02
, 2006-01-02T15:04:05Z
, 2006-01-02T15:04:05.999999999Z07:00
und 2006-01-02T15:04:05Z07:00
. Um einen nicht standardmäßigen Vergleichstyp zu verwenden, muss anstelle der einfachen Zeichenfolge ein Objekt mit type
und value
angegeben werden.
Diese Typen können zur Vereinfachung der Konfiguration verwendet werden. Beispielsweise ist es möglich, alle Zugriffsschlüssel eines einzelnen Benutzers zu schützen, indem glob
verwendet wird:
IAMUserAccessKey :
- type : glob
value : " admin -> * "
Es ist auch möglich, Filtereigenschaften und Filtertypen zusammen zu verwenden. Um beispielsweise alle gehosteten Zonen einer bestimmten TLD zu schützen:
Route53HostedZone :
- property : Name
type : glob
value : " *.rebuy.cloud. "
Jedes Filterergebnis kann mit invert: true
invertiert werden, zum Beispiel:
CloudFormationStack :
- property : Name
value : " foo "
invert : true
In diesem Fall werden alle CloudFormationStacks außer denen mit dem Namen „foo“ gefiltert. Beachten Sie, dass aws-nuke intern jede Ressource nutzt und jeden Filter darauf anwendet. Wenn ein Filter übereinstimmt, markiert er den Knoten als gefiltert.
Es kann vorkommen, dass einige Filter für mehrere Konten gleich sind. Dies kann insbesondere dann passieren, wenn Bereitstellungstools wie Terraform verwendet werden oder wenn IAM-Ressourcen demselben Muster folgen.
Für diesen Fall unterstützt aws-nuke voreingestellte Filter, die auf mehrere Konten angewendet werden können. Eine Konfiguration könnte so aussehen:
---
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
Der einfachste Weg, es zu installieren, besteht darin, die neueste Version von GitHub herunterzuladen.
Laden Sie $ 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
herunter und extrahieren Sie es $ 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
Führen Sie $ aws-nuke-v2.25.0-linux-amd64
aus
Um aws-nuke aus dem Quellcode zu kompilieren, benötigen Sie eine funktionierende Golang-Entwicklungsumgebung. Die Quellen müssen nach $GOPATH/src/github.com/rebuy-de/aws-nuke
geklont werden.
Außerdem müssen Sie Golint und GNU Make installieren.
Dann müssen Sie nur noch make build
ausführen, um eine Binärdatei in das Projektverzeichnis zu kompilieren, oder make install
go install aws-nuke in $GOPATH/bin
. Mit make xc
können Sie aws-nuke für andere Plattformen kompilieren.
Sie können aws-nuke mit Docker ausführen, indem Sie einen Befehl wie diesen verwenden:
$ 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
Damit es funktioniert, müssen Sie die Pfade für die AWS-Konfiguration und die aws-nuke -Konfiguration anpassen.
Außerdem müssen Sie das richtige AWS-Profil angeben. Anstatt das AWS-Verzeichnis bereitzustellen, können Sie die Flags --access-key-id
und --secret-access-key
verwenden.
Stellen Sie sicher, dass Sie im Bild-Tag die neueste Version verwenden. Alternativ können Sie main
für die neueste Entwicklungsversion verwenden. Beachten Sie jedoch, dass die Wahrscheinlichkeit höher ist, dass diese jederzeit abstürzt.
Für den Unit-Test von aws-nuke ist für einige Tests die Ausführung von Gomock erforderlich. Dies wird über go generate ./...
ausgeführt, wird jedoch automatisch über make test
ausgeführt. So führen Sie die Unit-Tests aus:
make test
Fühlen Sie sich frei, ein GitHub-Problem für Fehlerberichte oder Funktionsanfragen zu erstellen. Für Fragen nutzen Sie bitte unsere Mailingliste: [email protected]. Sie können auch im Mailinglisten-Archiv suchen, ob jemand bereits das gleiche Problem hatte: https://groups.google.com/d/forum/aws-nuke
Sie können zu aws-nuke beitragen, indem Sie dieses Repository forken, Ihre Änderungen vornehmen und eine Pull-Anfrage für unser Repository erstellen. Wenn Sie sich nicht sicher sind, wie Sie ein Problem lösen sollen, oder andere Fragen zu einem Beitrag haben, erstellen Sie bitte ein GitHub-Problem.