Automatisieren der GitHub-Konfiguration mit Terraform


Bicycle

Die Sicherung der eigenen GitHub-Organisation ist entscheidend, da sie sensiblen Code und Daten enthalten kann. Daher ist es wichtig, Mitwirkende und deren Beiträge zu überwachen, um die Einhaltung von Vorschriften und die Integrität des Codes zu gewährleisten. Die manuelle Verwaltung von GitHub-Konfigurationen kann zeitaufwändig und fehleranfällig sein. Terraform bietet eine Lösung, indem es ermöglicht, die Einrichtung und Pflege von GitHub Organisationen, Repositories, Teams und Berechtigungen zu automatisieren. Durch die Verwendung von Terraform für die GitHub-Konfiguration lassen sich Arbeitsabläufe rationalisieren, die Sicherheit verbessern und die Einhaltung von Best Practices gewährleisten. In diesem Leitfaden werfen wir einen Blick auf den GitHub Terraform-Provider und bauen eine sichere Umgebung für eine GitHub-Infrastruktur auf, die den Sicherheitsstandards von Mondoo entspricht.

In unserem Blog-Beitrag über GitHub und Mondoo haben wir besprochen, wie Mondoo dabei helfen kann, GitHub-Repositories sicher zu halten. Wenn man die Integration seiner Ressourcen in Mondoo automatisieren möchte, bietet unser Blogpost über die Verwendung von Mondoo mit Terraform einen guten Ansatz. Mondoo kann dabei helfen, die Sicherheit der eigenen Infrastruktur zu verbessern, indem es nach Schwachstellen sucht und Best-Practice-Einstellungen für Assets empfiehlt.

Voraussetzungen

  • GitHub-Konto
  • GitHub-Organisation
  • Persönliches Zugangstoken (PAT) mit den notwendigen Berechtigungen
  • Terraform lokal installiert

Konfigurieren des GitHub Providers

  1. Installieren des GitHub-Providers: Wir installieren den GitHub-Provider über die Terraform Registry. Dieser Provider wird verwendet, um mit der API von GitHub zu interagieren und GitHub-Ressourcen programmatisch zu verwalten.

  2. Konfigurieren des GitHub-Providers: Wir konfigurieren den GitHub-Provider, indem wir die Attribute token und owner festlegen. Das Token-Attribut sollte auf den richtigen GitHub-PAT gesetzt werden und das Owner-Attribut auf den Namen der GitHub-Organisation.

     1terraform {
     2    required_providers {
     3        github = {
     4        source  = "integrations/github"
     5        version = "~> 6.0"
     6        }
     7    }
     8}
     9
    10provider "github" {
    11    token = var.token
    12    owner = var.owner
    13}
    

GitHub Ressourcen verwalten

Der GitHub Terraform-Provider ermöglicht die Verwaltung verschiedener GitHub-Ressourcen, darunter:

  • Organisationen
  • Repositories
  • Teams
  • Benutzerberechtigungen
  • Regeln zum Schutz von Branches
  • Projekte
  • Actions
  • ...

Wir werden nun einen Blick auf die Erstellung von sicheren Repositories und Branch-Schutzregeln werfen, die mit Mondoos Sicherheitsstandards übereinstimmen.

  1. Erstellen eines GitHub-Repositorys: Wir verwenden die Ressource github_repository, um ein neues GitHub-Repository zu erstellen. Mit dieser Ressource können wir den Namen des Repositorys, die Beschreibung, die Sichtbarkeit und andere sicherheitsrelevante Einstellungen festlegen, die für einen hohen Mondoo Asset Score ausschlaggebend sind.

     1resource "github_repository" "secure_repo" {
     2    name        = "secure_repo"
     3    description = "Getting started: A secure repository with advanced security features. Authors: x"
     4
     5    visibility = "public"
     6
     7    default_branch = "main"
     8
     9    has_issues   = true
    10    has_projects = true
    11    has_wiki     = true
    12
    13    allow_merge_commit = true
    14    allow_squash_merge = false
    15    allow_rebase_merge = false
    16    allow_auto_merge   = true
    17
    18    delete_branch_on_merge      = true
    19    web_commit_signoff_required = true
    20
    21    has_downloads = false
    22    auto_init     = true
    23
    24    archived           = false
    25    archive_on_destroy = false
    26
    27}
    
  2. Repository-Dateien verwalten: Wir verwenden die Ressource github_repository_file zur Verwaltung wichtiger Dateien wie README, LICENSE, CODEOWNERS, support.md, security.md und code_of_conduct.md. Dies ist eine Beispielimplementierung für eine Datei:

     1resource "github_repository_file" "security_policy" {
     2    repository          = github_repository.secure_repo.name
     3    branch              = "main"
     4    file                = "security.md"
     5    content             = "This is a secure file."
     6    commit_message      = "Add security policy file"
     7    commit_author       = "Trusted User"
     8    commit_email        = "user@example.com"
     9    overwrite_on_create = true
    10}
    

    Zu beachten ist, dass die Mondoo-Checks die oben angegebenen Dateinamen erwarten.

    Eine README-Datei wird automatisch erstellt, wenn eine Repository-Beschreibung angeben wird. Stellen Sie sicher, dass Sie einen Abschnitt "Getting started:" und "Authors:" in das README einfügen.

    Stellen Sie sicher, dass der Inhalt der CODEOWNERS-Datei zumindest die Code-Eigentümer für das Verzeichnis .github/workflows/ angibt.

  3. Verwaltung von Regeln zum Schutz von Branches: Wir verwenden die Ressource github_branch_protection, um Regeln zum Schutz von Branches für unser GitHub-Repository zu verwalten. Mit dieser Ressource können wir unter anderem den Namen des betroffenen Branches angeben, die Einhaltung der Regeln erzwingen und die erforderliche Überprüfung von Pull Requests festlegen.

     1resource "github_branch_protection" "branch_protection" {
     2    repository_id = github_repository.secure_repo.id
     3    pattern       = "main"
     4    enforce_admins                  = true
     5    require_signed_commits          = true
     6    require_conversation_resolution = true
     7    required_status_checks {
     8        strict   = true
     9        contexts = ["ci/mondoo"]
    10    }
    11    required_pull_request_reviews {
    12        dismiss_stale_reviews           = true
    13        restrict_dismissals             = true
    14        required_approving_review_count = 2
    15        require_code_owner_reviews      = true
    16        dismissal_restrictions = [
    17            "/user1",
    18        ]
    19    }
    20    restrict_pushes {
    21        push_allowances = [
    22            "/user1",
    23        ]
    24    }
    25    allows_force_pushes = false
    26}
    

Diese Konfigurationen erhöhen die Sicherheit der Repositories drastisch und sorgen für eine bessere Bewertung der Assets in Mondoo. Leider kann der GitHub Terraform-Provider keine neuen GitHub Actions-Workflows erstellen und daher nicht alle Mondoo-Checks bestehen. Wir können jedoch neue Repositories mit Hilfe von Repository-Templates erstellen.

Repository-Template

Repository-Templates werden verwendet, um die Erstellung neuer Repositories mit vordefinierten Konfigurationen und Einstellungen zu standardisieren. Obwohl wir in Terraform keine Workflows erstellen können, können wir vordefinierte Repositories verwenden, welche die fehlenden sicherheitsrelevanten Dateien enthalten. In diesem Beispiel verwenden wir ein Template einer von uns erstellten Demo-Organisation, die bereits alle relevanten Einstellungen und Dateien enthält. So verwenden wir ein Template innerhalb einer neuen Repository-Ressource:

 1resource "github_repository" "template_example" {
 2    name        = "another_example"
 3    description = "My awesome codebase from a template."
 4    visibility  = "public"
 5
 6    template {
 7        owner                = "whatacoolorg"
 8        repository           = "demorepo"
 9        include_all_branches = true
10    }
11}

Wir können alle Mondoo-Compliance-Checks für GitHub erfolgreich bestehen, nachdem wir das neue Repository aus einem Template und Branch-Schutzregeln erstellt haben.

High Score

Fazit

Zusammenfassend lässt sich sagen, dass die Sicherung der eigenen GitHub-Organisation und der Repositories entscheidend für den Schutz von sensiblem Code und Daten ist. Durch die Automatisierungsmöglichkeiten von Terraform lässt sich die Infrastruktur von GitHub effizient verwalten, Sicherheitsstandards durchsetzen und die Einhaltung von Best Practices sicherstellen. Während einige Mondoo-Checks aufgrund von Einschränkungen bei der Erstellung von GitHub-Actions-Workflows über Terraform nicht berücksichtigt werden können, kann die Nutzung von Repository-Templates helfen, die Lücke zu schließen und die Erstellung von sicheren Repositories von Anfang an zu erleichtern. Wenn die in diesem Leitfaden beschriebenen Schritte befolgt werden und Mondoo für das Scannen von Schwachstellen und die Durchsetzung von Richtlinien integriert wird, lässt sich die Sicherheitslage auf GitHub verbessern und potenzielle Risiken effektiv eindämmen.

Zurück Unsere Trainings entdecken

Wir sind für Sie da

Sie interessieren sich für unsere Trainings oder haben einfach eine Frage, die beantwortet werden muss? Sie können uns jederzeit kontaktieren! Wir werden unser Bestes tun, um alle Ihre Fragen zu beantworten.

Hier kontaktieren