AWS Account Lifecycle

Illustration of account-lifecycle-illustration
5. Januar 2022 | Lesezeit 5 min
Link has been copied to clipboard.

Kontext

Sobald Ihre AWS Umgebung wächst, entsteht meist der Wunsch und die Anforderung, sichere und konforme AWS Accounts auf automatisierte Weise bereitzustellen. Der Nuvibit Cloud Foundation Blueprint beinhaltet unseren Account Lifecycle mit genau dieser Funktionalität. Unsere Lösung ist nicht nur in der Lage, neue AWS Accounts bereitzustellen, sondern hält sie auch auf dem neuesten Stand und recycelt sie, wenn sie nicht mehr benötigt werden (eine typische Anforderung für experimentelle Workloads).

GitOps by design

Wir sind überzeugt, dass GitOps die beste Methode für Mitarbeiter ist, um neue technische Ressourcen zu bestellen. Aus diesem Grund haben wir unsere Lösung so konzipiert, dass ein neuer AWS Account mit einem einfachen Pull Request bestellt werden kann, der die erforderlichen Informationen enthält.

50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
  "aws-c1-lifecycle" = {
    title         = "lifecycle account"
    account_owner = "max.muster@customer1.com"
    tenant        = "core"
    environment   = "prod"
  }
  "aws-c1-logging" = {
    title         = "logging account"
    account_owner = "max.muster@customer1.com"
    tenant        = "core"
    environment   = "prod"
  }
  "aws-c1-security" = {
    title         = "security account"
    account_owner = "max.muster@customer1.com"
    tenant        = "core"
    environment   = "prod"
  }
  "aws-c1-0001" = {
    title         = "marketing application - nonprod"
    account_owner = "max.muster@customer1.com"
    tenant        = "marketing"
    environment   = "nonprod"
  }

Jeder AWS Account wird in einem eigenen Konfigurations-Block definiert. Das Team, welches für die Cloud Foundation zuständig ist, kann diese Pull Requests sorgfältig prüfen und im Anschluss freigeben oder ablehnen.

Der Account Lifecycle entscheidet anhand der Attribute welche AWS Organizations Unit (OU) ein Account zugewiesen wird. Die Liste kann selbstverständlich mit den Attributen erweitert werden, die für Ihre Organisation wichtig sind (z.B. Kostenstelle, Team Name, DNS Zone, Kostenverantwortlicher, etc). Der Account Lifecycle kann diese Attribute auch zu einem späteren Zeitpunkt aktualisieren, den Account in eine andere OU schieben, die Bereitstellung von Netzwerkressourcen einleiten und beispielsweise einen neuen Account Owner hinterlegen.
Alle diese Attribute werden als Tags des AWS Accounts gespeichert und können in Ihrer IaC Definition aufgerufen werden.

Account Rollout

Der Rollout eines neuen AWS Accounts kann in vier Phasen unterteilt werden:


Phase Beschreibung
1. Pull Request Der User erstellt einen Pull Request im Account Inventory Repository welcher einen neuen Account Block beinhaltet. Der Pull Request wird von dem Cloud Foundation Team überprüft und freigegeben.
2. Account Erstellung Terraform wird durch den Merge Commit angestossen. Der neue Account wird erstellt und zu AWS SSO hinzugefügt. Zusätzlich wird ein neues Repository und eine CI/CD Pipeline erstellt, mit der später die Workload-Ressourcen für den AWS Account bereitgestellt werden können.
In diesem Beispiel verwenden wir Github für die Code-Repositories und Terraform Cloud für CI/CD.
3. Account Konfiguration Nicht alles kann via Terraform deployed und konfiguriert werden, da hierzu der Terraform Support noch fehlt. Um diese Fälle abzudecken, verwenden wir AWS Step Functions.
Der AWS Step Functions workflow wird von einem CloudTrail Event angestossen, das durch die Erstellung des Accounts ausgelöst wird.
In unserem Beispiel haben wir drei Schritte deployed:
- setup account: Löscht das default VPC und alle dazugehörigen Ressourcen im neu erstellten Account
- create email alias: Erstellt den E-Mail Alias in Microsoft Exchange, der als Account Root Mail verwendet wird
- add account to baseline: Fügt den Account im Global Baseline Repo hinzu.
4. Global Baseline Der Commit im Global Baseline Repository stösst die Pipeline der Global Baseline an. Dadurch wird die Account Baseline im neu erstellten Account ausgerollt. Zusätzlich werden die zentralen Komponenten der Foundation aktualisiert, so dass diese mit den neuen Account interagieren.
Wenn Sie mehr über die Global Baseline und ihre Komponenten wissen wollen, lesen Sie unseren Blogbeitrag über die Referenzarchitektur für AWS Multi-Account Kunden.

Account Recycling

AWS bietet keine einfache Lösung, um Accounts zu löschen. Um diese Einschränkung zu umgehen, haben wir ein Account Recycling implementiert. Um einen AWS Account zu recyclen, reicht es, im Account Inventory Repository das Attribut recycled zu aktivieren:

50
51
52
53
54
55
56
 "aws-c1-0001" = {
    title         = "marketing application - nonprod"
    account_owner = "max.muster@customer1.com"
    tenant        = "marketing"
    environment   = "nonprod"
    recycled      = "true"
  }

Das Recycling wird in fünf Phasen ausgeführt:


Phase Beschreibung
1. Account Cleanup Der User muss mit terraform destroy in seinem Workspace alle Ressourcen löschen, die er von sich aus erstellt hat.
2. Pull Request Der User aktiviert das recycled Attribut (true) in seinem Account per Pull Request.
3. Account Recycling Terraform löscht die Account Pipeline, das Account Repository und deaktiviert den Account in AWS SSO. Der Account wird zusätzlich mit dem recycled Tag versehen.
4. Baseline Die Änderung an den Account Tags löst ein CloudTrail Event aus, das wiederum die Step Function startet, die den Account aus dem Global Baseline Repository löscht.
5. Global Baseline Aufgrund des Commits im Global Baseline Repository startet die Pipeline der global Baseline. Die Account Baseline wird aus dem Account gelöscht und die zentralen Komponenten der Foundation werden aktualisiert, so dass der Account keinen Zugriff mehr hat.
Wenn Sie mehr über die Global Baseline und ihre Komponenten wissen wollen, lesen Sie unseren Blogbeitrag über die Referenzarchitektur für AWS Multi-Account Kunden.

Das Einzige, was bleibt, ist eine leere Hülle des AWS Accounts, die keine Kosten verursacht.

Sobald ein neuer Account benötigt wird, kann ein recycelter Account wiederverwendet werden, indem das Kennzeichen recyceled entfernt und die Attribute des Accounts aktualisiert werden:

50
51
52
53
54
55
  "aws-c1-0001" = {
    title         = "sales application - nonprod"
    account_owner = "john.doe@customer1.com"
    tenant        = "sales"
    environment   = "nonprod"
  }

Massgeschneidert für Ihre Umgebung

Uns ist bewusst, dass die Toolchain in jeder Firma eine individuelle Entscheidung ist. Es ist essentiell, dass der Account Lifecycle in die bestehende Toolchain passt. Dadurch wird die Einstiegshürde für die Teams auch deutlich verringert. Aus diesem Grund haben wir unsere Lösung so konzipiert, dass sie extrem flexibel ist.

Die CI/CD Workflows können mit den Tools Ihrer Wahl implementiert werden (z.B Jenkins, Bamboo, Gitlab, CircleCI, GitHub Action, AWS CodeStar etc). Auch der Git Provider kann beliebig ausgetauscht werden (GitHub, GitLab, Bitbucket, etc).

Wir empfehlen wo immer möglich Terraform für das Bereitstellung und die Konfiguration Ihrer AWS Accounts und allen Umsystemen zu verwenden. Wenn Sie weder Terraform Cloud noch Terraform Enterprise verwenden wollen, können die Workflows auch mit der Community Edition von Terraform und dem CI/CD Tool Ihrer Wahl implementiert werden.

Unsere Dienstleistung

Nuvibit ist darauf spezialisiert, Cloud Foundation Capabilities in Unternehmen einzuführen.

Wir passen unseren Foundation Blueprint an Ihre Bedürfnisse an und befähigen Sie Foundation Capabilities mit einem hohen Reifegrad für Ihre Cloud Workload Development Teams bereitzustellen.

Kontaktieren Sie uns für weitere Informationen.