Ontwerp van PHX S3-gebaseerde Ansible Software Repository

Ontwerp voor een Ansible Software Repository in het PHX-project, met gebruik van vRA S3-buckets voor het opslaan van binaries en installers, met een herbruikbare Ansible-rol voor veilige downloads op Linux- en Windows-doelen.

Projecten:  c2platform/phx/ansible


Inleiding

Dit ontwerpdocument schetst de architectuur en implementatie van een Ansible Software Repository voor het PHX-project. De oplossing maakt gebruik van vRA S3-buckets als opslagbackend, omdat er geen alternatieve servers zoals Nexus beschikbaar zijn. Het combineert S3-opslag met een generieke, herbruikbare Ansible-rol om veilige en efficiënte software-downloads te faciliteren voor lifecycle management (LCM) en onderhoudstaken. De Ansible-rol voor downloads ondersteunt directe downloads en S3-downloads out-of-the-box.

Doelen en scope

Momenteel worden de software-artefacten die Ansible nodig heeft opgeslagen op een Windows-share. Het doel is om een betere oplossing te bieden voor het voorzien van Ansible-gebaseerde automatisering met de benodigde software-artefacten. Het moet even goed werken voor Linux- en Windows-hosts, beter schalen dan een Windows-share en het meest gangbare downloadprotocol gebruiken, namelijk HTTP.

De primaire doelen van dit ontwerp zijn om een robuuste, veilige methode te bieden voor het beheren van software-artefacten in de air-gapped PHX-omgeving, waardoor geautomatiseerde LCM-processen mogelijk zijn zonder externe afhankelijkheden. De scope omvat opslag van binaries voor Linux- en Windows-systemen, integratie met bestaande Ansible-workflows en uitbreiding van rollen voor bredere compatibiliteit. Belangrijke voordelen zijn verminderde handmatige interventie, verbeterde idempotentie voor herhaalde operaties en verbeterde beveiliging door gecontroleerde toegangsmechanismen.

Aannames en beperkingen

Dit ontwerp gaat uit van een volledig air-gapped opzet zonder internettoegang, de afwezigheid van dedicated repository servers zoals Nexus en afhankelijkheid van vRA-beheerde S3-buckets. Het voldoet aan de Nederlandse overheidsbeveiligingsbeleidsregels, zoals die geschetst in de PoLP en dataproductienormen, en zorgt ervoor dat alle operaties voldoen aan interne richtlijnen voor automatisering in gevoelige omgevingen. Verwijzingen naar gerelateerde normen omvatten Ansible best practices voor idempotente configuraties en vRA-integratieprotocollen.

Vereisten

Functionele vereisten

  • Software-artefacten (binaries, installers) opslaan en beheren in een air-gapped omgeving met behulp van vRA S3-buckets.
  • Ondersteuning voor downloads op zowel Linux- als Windows-doelen via Ansible.
  • Een generiek, herbruikbaar mechanisme bieden voor S3-interacties, waarbij bestaande rollen zoals c2platform.wincore.downloads worden uitgebreid met Linux- en S3-ondersteuning.
  • Idempotente operaties garanderen in lijn met desired state configuration.

Niet-functionele vereisten

  • Beveiliging: Gebruik presigned URL’s voor tijdelijke, veilige toegang.
  • Compatibiliteit: Werken met standaard Ansible-modules zonder AWS-afhankelijkheden op Windows.
  • Schaalbaarheid: Een groot aantal applicaties (~200) efficiënt afhandelen.
  • Omgevingsbeperkingen: Werken zonder internettoegang of extra repository servers zoals Nexus.

Ontwerpoverzicht

Het ontwerp maakt gebruik van vRA S3-buckets als kernopslag voor software-artefacten. Downloads worden beheerd via de c2platform.core.downloads Ansible-rol, die de Amazon AWS Ansible-collecties (via de s3_object module) op een Linux-delegatieserver gebruikt om presigned URL’s te genereren. Deze URL’s maken eenvoudige, afhankelijkheidsvrije downloads op doelservers mogelijk met modules zoals get_url of win_get_url.

Deze opzet breidt de Windows-only c2platform.wincore.downloads-rol uit met ondersteuning voor Linux en S3, en zorgt voor een uniforme, herbruikbare aanpak voor Ansible operations in air-gapped omgevingen.

High-level architectuurdiagram

Belangrijke componenten

S3-buckets (via vRA)

Veilige, lokale opslag voor software-artefacten in het air-gapped PHX-domein. Wat betreft flexibiliteit, Ansible staat flexibele beleidsregels toe voor het aantal buckets, zoals één bucket per Ansible-inventarisproject, per applicatie, voor de hele organisatie, etc. Verantwoordelijkheden omvatten versiebeheer, toegangscontrole en metadata-tagging voor artefacten. Afhankelijkheden: vRA API voor provisioning; geconfigureerd met SSE versleuteling. Configuratie: Buckets worden genoemd naar applicatie (bijv. phx-app-binaries), met lifecycle-beleidsregels voor retentie.

Delegatieserver

Een RHEL Linux-host uitgerust met boto3 en botocore bibliotheken om S3-interacties af te handelen en presigned URL’s te genereren. Verantwoordelijkheden: Uitvoeren van gedelegeerde taken, beheren van AWS-collectiemodules. Afhankelijkheden: Python 3.x, AWS SDK; netwerktoegang tot vRA S3-eindpunten. Configuratie: Installeren via Ansible-rol, zorgen voor IAM-achtige credentials voor vRA-authenticatie.

Doelservers

Linux- of Windows-hosts die downloads uitvoeren met standaard Ansible-modules. Verantwoordelijkheden: Bestanden ophalen via presigned URL’s, integriteit verifiëren (bijv. checksums). Afhankelijkheden: Geen buiten kern-Ansible; ondersteunt offline uitvoering. Configuratie: Gedefinieerd in inventaris met groep/host-variabelen voor downloadpaden.

Ansible-downloadsrol

Kernlogica voor downloads, met ondersteuning voor S3 en directe URL’s, met idempotentie voor desired state configuration. Verantwoordelijkheden: URL-generatie orkestreren, delegatie afhandelen, checksum-validatie garanderen. Afhankelijkheden: AWS-collectie.

Downloadproces

Het downloadproces wordt georkestreerd door de downloadsrol. Hieronder volgt een gedetailleerd volgdiagram dat de workflow illustreert.

Processtappen

  1. Delegeer S3-interactie naar de Linux-delegatieserver met delegate_to in de Ansible-taak.
  2. Genereer een presigned URL met de AWS Ansible-collecties s3_object-module met parameters zoals bucket, object en expiry.
  3. Geef de URL door aan de doelserver voor download via get_url (Linux) of win_get_url (Windows), inclusief checksum-validatie voor idempotentie.
  4. Bevestig download en handel idempotentie af door bestandsexistentie en hash te controleren voordat opnieuw wordt gedownload.

Overwogen alternatieven

Verschillende opties werden geëvalueerd voor de PHX-softwareopslagplaats, waarbij S3 via vRA werd geselecteerd vanwege de balans tussen beveiliging, eenvoud en afstemming met bestaande infrastructuur.

  • Nexus Repository: Voordelen: Robuust artefactbeheer, versiebeheer en zoekfunctionaliteit. Nadelen: Vereist extra serveruitrol, niet beschikbaar in air-gapped PHX-opzet, hoge onderhoudsoverhead. Afgewezen vanwege omgevingsbeperkingen en gebrek aan resources, zoals bevestigd in PHX-prototypes die uitroluitdagingen toonden.
  • Directe URL-downloads: Voordelen: Eenvoudig, geen delegatie nodig. Nadelen: Minder veilig zonder tijdelijke toegang, blootstelling van eindpunten voor onbepaalde tijd, moeilijker te beheren in air-gapped scenario’s. Gekozen als fallback maar niet primair vanwege beveiligingsrisico’s; evaluaties benadrukten kwetsbaarheid voor ongeautoriseerde toegang.
  • Aangepaste scripts: Voordelen: Op maat gemaakte controle. Nadelen: Slechte onderhoudbaarheid, ontbreekt idempotentie, dupliceert inspanning vergeleken met Ansible-rollen. Vermeden ten gunste van herbruikbare Ansible-rollen voor betere schaalbaarheid, aangezien PHX-testen toonden dat scripts vatbaar zijn voor fouten in multi-platformomgevingen.

S3 met Ansible werd gekozen vanwege de integratie met vRA, ondersteuning voor presigned URL’s die de beveiliging verbeteren en hergebruik van bestaande rollen, waardoor ontwikkelingstijd wordt verminderd op basis van PHX-pilot-evaluaties.

Toekomstige verbeteringen

Potentiële verbeteringen omvatten:

  • Geautomatiseerd uploaden van artefacten naar S3 met Ansible en AWS-modules.

Aanvullende informatie

  • Creëren en testen van S3-service: Richt een op MinIO gebaseerde S3-service in een lokale ontwikkelomgeving in en test deze met behulp van Ansible-plays om buckets aan te maken, bestanden te uploaden en te downloaden.
  • Ontwerpen van een Flexibel Software Repositorium voor Ansible: Dit document presenteert de benadering van RWS voor het beheren van softwaredownloads met behulp van Ansible, met nadruk op de c2platform.wincore.download Ansible-rol. Deze rol is veelzijdig, ondersteunend zowel een eenvoudig op Apache2 gebaseerd repositorium als meer geavanceerde setups zoals Sonatype Nexus Repository Manager. - scripts - scripts