Automatisches Erstellen und Bereitstellen einer Java-Anwendung auf Amazon EKS mithilfe einer CI/CD-Pipeline - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Automatisches Erstellen und Bereitstellen einer Java-Anwendung auf Amazon EKS mithilfe einer CI/CD-Pipeline

Erstellt von MAHESH RAGHUNANDANAN (AWS), James Radtke (AWS) und Jomcy Pappachen (AWS)

Code-Repository: aws-cicd-java-eks

Umgebung: Produktion

Technologien: Container und Mikroservices; CloudNative DevOps; Modernisierung

Arbeitslast: Alle anderen Workloads

AWS-Dienste: AWS CloudFormation; AWS CodeCommit CodePipeline; Amazon EC2 Container Registry; Amazon EKS

Übersicht

Dieses Muster beschreibt, wie Sie eine CI/CD-Pipeline (Continuous Integration and Continuous Delivery) erstellen, die automatisch eine Java-Anwendung mit empfohlenen DevSecOps Verfahren für einen Amazon Elastic Kubernetes Service (Amazon EKS) -Cluster in der Amazon Web Services (AWS) -Cloud erstellt und bereitstellt. Dieses Muster verwendet eine Begrüßungsanwendung, die mit einem Spring Boot Java-Framework entwickelt wurde und Apache Maven verwendet.

Sie können den Ansatz dieses Musters verwenden, um den Code für eine Java-Anwendung zu erstellen, die Anwendungsartefakte als Docker-Image zu verpacken, das Image sicherheitstechnisch zu scannen und das Image als Workload-Container auf Amazon EKS hochzuladen. Der Ansatz dieses Musters ist nützlich, wenn Sie von einer eng gekoppelten monolithischen Architektur zu einer Microservices-Architektur migrieren möchten. Dieser Ansatz hilft Ihnen auch dabei, den gesamten Lebenszyklus einer Java-Anwendung zu überwachen und zu verwalten, wodurch ein höheres Maß an Automatisierung gewährleistet und Fehler oder Bugs vermieden werden können.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Ein aktives AWS-Konto.

  • AWS-Befehlszeilenschnittstelle (AWS CLI) Version 2, installiert und konfiguriert. Weitere Informationen dazu finden Sie unter Installation, Aktualisierung und Deinstallation von AWS CLI Version 2 in der AWS CLI-Dokumentation.

  • AWS CLI Version 2 muss mit derselben IAM-Rolle konfiguriert werden, die den Amazon EKS-Cluster erstellt, da nur diese Rolle berechtigt ist, dem weitere IAM-Rollen hinzuzufügen. aws-auth ConfigMap Informationen und Schritte zur Konfiguration von AWS CLI finden Sie unter Grundlagen der Konfiguration in der AWS-CLI-Dokumentation.

  • Rollen und Berechtigungen von AWS Identity and Access Management (IAM) mit vollem Zugriff auf AWS CloudFormation. Weitere Informationen dazu finden Sie in der CloudFormation AWS-Dokumentation unter Zugriffskontrolle mit IAM.

  • Ein vorhandener Amazon EKS-Cluster mit Details zum IAM-Rollennamen und zum Amazon Resource Name (ARN) der IAM-Rolle der Worker-Knoten im EKS-Cluster.

  • Kubernetes Cluster Autoscaler, installiert und konfiguriert in Ihrem Amazon EKS-Cluster. Weitere Informationen finden Sie unter Cluster Autoscaler in der Amazon EKS-Dokumentation. 

  • Zugriff auf Code im Repository. GitHub

Wichtiger Hinweis

AWS Security Hub wird als Teil der CloudFormation AWS-Vorlagen aktiviert, die im Code enthalten sind. Standardmäßig wird Security Hub nach der Aktivierung mit einer kostenlosen 30-Tage-Testversion geliefert. Danach fallen für diesen AWS-Service Kosten an. Weitere Informationen zu den Preisen finden Sie unter AWS Security Hub Hub-Preise.

Produktversionen

  • Helm Version 3.4.2 oder höher

  • Apache Maven Version 3.6.3 oder höher

  • BridgeCrew Checkov Version 2.2 oder höher

  • Aqua Security Trivy Version 0.37 oder höher

Architektur

Technologie-Stack

  • AWS CodeBuild

  • AWS CodeCommit

  • Amazon CodeGuru

  • AWS CodePipeline

  • Amazon Elastic Container Registry

  • Amazon Elastic Kubernetes Service

  • Amazon EventBridge

  • AWS Security Hub

  • Amazon-Simple-Notification-Service (Amazon-SNS)

Zielarchitektur

""

Das Diagramm zeigt den folgenden Workflow:

  1. Der Entwickler aktualisiert den Java-Anwendungscode im Basiszweig des CodeCommit Repositorys, wodurch eine Pull-Anfrage (PR) erstellt wird.

  2. Sobald die PR eingereicht wurde, überprüft Amazon CodeGuru Reviewer den Code automatisch, analysiert ihn auf der Grundlage von Best Practices für Java und gibt dem Entwickler Empfehlungen.

  3. Nachdem der PR mit dem Basiszweig zusammengeführt wurde, wird ein EventBridge Amazon-Event erstellt.

  4. Das EventBridge Ereignis initiiert die CodePipeline Pipeline, die gestartet wird.

  5. CodePipeline führt die CodeSecurity Scan-Phase aus (kontinuierliche Sicherheit).

  6. CodeBuild startet den Sicherheitsscan-Prozess, bei dem die Helm-Dateien für die Dockerfile- und Kubernetes-Bereitstellung mit Checkov gescannt werden und der Quellcode der Anwendung auf der Grundlage inkrementeller Codeänderungen gescannt wird. Der Anwendungsquellcodescan wird vom CodeGuru Reviewer Command Line Interface (CLI) -Wrapper durchgeführt.

  7. Wenn die Sicherheitsscan-Phase erfolgreich ist, wird die Build-Phase (kontinuierliche Integration) eingeleitet.

  8. In der CodeBuild Build-Phase erstellt das Artefakt, packt das Artefakt in ein Docker-Image, scannt das Image mithilfe von Aqua Security Trivy auf Sicherheitslücken und speichert das Image in Amazon ECR.

  9. Die in Schritt 8 erkannten Sicherheitslücken werden zur weiteren Analyse durch Entwickler oder Techniker auf Security Hub hochgeladen. Security Hub bietet einen Überblick und Empfehlungen zur Behebung der Sicherheitslücken.

  10. E-Mail-Benachrichtigungen zu verschiedenen Phasen innerhalb der CodePipeline Pipeline werden über Amazon SNS gesendet.

  11. Nachdem die Phasen der kontinuierlichen Integration abgeschlossen sind, CodePipeline beginnt die Bereitstellungsphase (kontinuierliche Bereitstellung).

  12. Das Docker-Image wird mithilfe von Helm-Diagrammen als Container-Workload (Pod) in Amazon EKS bereitgestellt.

  13. Der Anwendungs-Pod ist mit Amazon CodeGuru Profiler Agent konfiguriert, der die Profilerstellungsdaten der Anwendung (CPU, Heap-Nutzung und Latenz) an Amazon CodeGuru Profiler sendet, was Entwicklern hilft, das Verhalten der Anwendung zu verstehen.

Tools

AWS-Services

  • AWS CloudFormation hilft Ihnen dabei, AWS-Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus über AWS-Konten und Regionen hinweg zu verwalten.

  • AWS CodeBuild ist ein vollständig verwalteter Build-Service, der Sie beim Kompilieren von Quellcode, beim Ausführen von Komponententests und beim Erstellen von Artefakten unterstützt, die sofort einsatzbereit sind.

  • AWS CodeCommit ist ein Versionskontrollservice, mit dem Sie Git-Repositorys privat speichern und verwalten können, ohne Ihr eigenes Quellcodeverwaltungssystem verwalten zu müssen.

  • Amazon CodeGuru Profiler sammelt Laufzeitleistungsdaten aus Ihren Live-Anwendungen und gibt Empfehlungen, die Ihnen bei der Feinabstimmung Ihrer Anwendungsleistung helfen können.

  • Amazon CodeGuru Reviewer verwendet Programmanalyse und maschinelles Lernen, um potenzielle Fehler zu erkennen, die für Entwickler schwer zu finden sind, und bietet Vorschläge zur Verbesserung Ihres Java- und Python-Codes.

  • AWS CodePipeline hilft Ihnen dabei, die verschiedenen Phasen einer Softwareversion schnell zu modellieren und zu konfigurieren und die Schritte zu automatisieren, die für die kontinuierliche Veröffentlichung von Softwareänderungen erforderlich sind.

  • Amazon Elastic Container Registry (Amazon ECR) ist ein verwalteter Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist.

  • Amazon Elastic Kubernetes Service (Amazon EKS) hilft Ihnen dabei, Kubernetes auf AWS auszuführen, ohne Ihre eigene Kubernetes-Steuerebene oder Knoten installieren oder verwalten zu müssen.

  • Amazon EventBridge ist ein serverloser Event-Bus-Service, mit dem Sie Ihre Anwendungen mit Echtzeitdaten aus einer Vielzahl von Quellen verbinden können. Zum Beispiel AWS-Lambda-Funktionen, HTTP-Aufruf-Endpunkte, die API-Ziele verwenden, oder Event-Busse in anderen AWS-Konten.

  • AWS Identity and Access Management (IAM) hilft Ihnen dabei, den Zugriff auf Ihre AWS-Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.

  • AWS Security Hub bietet einen umfassenden Überblick über Ihren Sicherheitsstatus in AWS. Es hilft Ihnen auch dabei, Ihre AWS-Umgebung anhand von Sicherheitsstandards und Best Practices der Branche zu überprüfen.

  • Amazon Simple Notification Service (Amazon SNS) unterstützt Sie bei der Koordination und Verwaltung des Nachrichtenaustauschs zwischen Herausgebern und Kunden, einschließlich Webservern und E-Mail-Adressen.

  • Amazon Simple Storage Service (Amazon S3) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.

Andere Dienste

  • Helm ist ein Open-Source-Paketmanager für Kubernetes.

  • Apache Maven ist ein Tool für die Verwaltung und Untersuchung von Softwareprojekten.

  • BridgeCrew Checkov ist ein statisches Code-Analyse-Tool zum Scannen von IaC-Dateien (Infrastructure as Code) auf Fehlkonfigurationen, die zu Sicherheits- oder Compliance-Problemen führen können.

  • Aqua Security Trivy ist ein umfassender Scanner für Sicherheitslücken in Container-Images, Dateisystemen und Git-Repositorys sowie für Konfigurationsprobleme.

Code

Der Code für dieses Muster ist im Repository verfügbar. GitHub aws-codepipeline-devsecops-amazoneks

Bewährte Methoden

  • Das Prinzip der geringsten Rechte wurde für IAM-Entitäten in allen Phasen dieser Lösung befolgt. Wenn Sie die Lösung um zusätzliche AWS-Services oder Tools von Drittanbietern erweitern möchten, empfehlen wir, dem Prinzip der geringsten Rechte zu folgen.

  • Wenn Sie über mehrere Java-Anwendungen verfügen, empfehlen wir, für jede Anwendung separate CI/CD-Pipelines zu erstellen.

  • Wenn Sie eine Monolith-Anwendung haben, empfehlen wir, die Anwendung so weit wie möglich in Microservices aufzuteilen. Microservices sind flexibler, sie erleichtern die Bereitstellung von Anwendungen als Container und bieten einen besseren Einblick in den gesamten Aufbau und die Bereitstellung der Anwendung.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Klonen Sie das GitHub Repository.

Führen Sie den folgenden Befehl aus, um das Repository zu klonen.

git clone https://github.com/aws-samples/aws-codepipeline-devsecops-amazoneks
App-Entwickler, DevOps Ingenieur

Erstellen Sie einen S3-Bucket und laden Sie den Code hoch.

  1. Melden Sie sich bei der AWS-Managementkonsole an, öffnen Sie die Amazon S3 S3-Konsole und erstellen Sie dann einen S3-Bucket in der AWS-Region, in der Sie diese Lösung bereitstellen möchten. Weitere Informationen finden Sie in der Amazon S3 S3-Dokumentation unter Bucket erstellen.

  2. Erstellen Sie im S3-Bucket einen Ordner mit dem Namencode.

  3. Navigieren Sie zu dem Ort, an dem Sie das Repository geklont haben. Führen Sie die folgenden Befehle nacheinander aus, um eine komprimierte Version des gesamten Codes mit der Erweiterung .zip (cicdstack.zip) zu erstellen und die ZIP-Datei zu überprüfen.

    Hinweis: Wenn der python Befehl fehlschlägt und angibt, dass Python nicht gefunden wurde, verwenden Sie python3 stattdessen.

    cd aws-codepipeline-devsecops-amazoneks python -m zipfile -c cicdstack.zip * python -m zipfile -t cicdstack.zip
  4. Laden Sie die cicdstack.zip Datei in den Codeordner hoch, den Sie zuvor im S3-Bucket erstellt haben.

AWS DevOps, DevOps Ingenieur, Cloud-Administrator, DevOps

Erstellen Sie einen CloudFormation AWS-Stack.

  1. Öffnen Sie die CloudFormation AWS-Konsole und wählen Sie Create Stack.

  2. Wählen Sie unter Vorlage angeben die Option Eine Vorlagendatei hochladen, laden Sie die cf_templates/codecommit_ecr.yaml Datei hoch und klicken Sie dann auf Weiter.

  3. Geben Sie im Feld Stackdetails angeben den Stack-Namen und anschließend die folgenden Eingabeparameterwerte ein:

    • CodeCommitRepositoryBranchName: Der Name der Filiale, in der sich Ihr Code befinden wird (die Standardeinstellung ist main)

    • CodeCommitRepositoryName: Der Name des zu erstellenden CodeCommit Repos.

    • CodeCommitRepositoryS3Bucket: Der Name des S3-Buckets, in dem Sie den Code-Ordner erstellt haben

    • CodeCommitRepositoryS3: BucketObjKey code/cicdstack.zip

    • ECR RepositoryName: Der Name des zu erstellenden Amazon ECR-Repos

  4. Wählen Sie Weiter, verwenden Sie die Standardeinstellungen für die Optionen „Stack konfigurieren“ und wählen Sie dann Weiter.

  5. Überprüfen Sie im Abschnitt Überprüfen die Vorlagen- und Stack-Details und wählen Sie dann Stapel erstellen aus. Anschließend wird der Stack erstellt, einschließlich der Repositorys CodeCommit und der Amazon ECR Repositorys.

  6. Notieren Sie sich die Namen der Repositorys CodeCommit und der Amazon ECR-Repositorys, die für die Einrichtung der Java CI/CD-Pipeline erforderlich sind.

AWS DevOps, DevOps

Validieren Sie die CloudFormation Stack-Bereitstellung.

  1. Überprüfen Sie auf der CloudFormation Konsole unter Stacks den Status des CloudFormation Stacks, den Sie bereitgestellt haben. Der Status des Stacks sollte CREATE COMPLETE lauten.

  2. Überprüfen Sie außerdem von der Konsole aus, ob CodeCommit und Amazon ECR bereitgestellt wurden und bereit sind.

DevOps Ingenieur

Löschen Sie den S3-Bucket.

Leeren und löschen Sie den S3-Bucket, den Sie zuvor erstellt haben. Weitere Informationen finden Sie unter Löschen eines Buckets in der Amazon S3 S3-Dokumentation.

AWS DevOps, DevOps
AufgabeBeschreibungErforderliche Fähigkeiten

Konfigurieren Sie die Helm-Charts Ihrer Java-Anwendung.

  1. Navigieren Sie an dem Ort, an dem Sie das GitHub Repository geklont haben, zu dem Ordnerhelm_charts/aws-proserve-java-greeting. In diesem Ordner enthält die values.dev.yaml Datei Informationen zur Konfiguration der Kubernetes-Ressourcen, die Sie für Ihre Container-Bereitstellungen in Amazon EKS ändern können. Aktualisieren Sie den Docker-Repository-Parameter, indem Sie Ihre AWS-Konto-ID, Ihre AWS-Region und den Namen des Amazon ECR-Repositorys angeben.

    image: repository: <account-id>.dkr.ecr.<region>.amazonaws.com/<app-ecr-repo-name>
  2. Der Servicetyp des Java-Pods ist auf eingestellt. LoadBalancer

    service: type: LoadBalancer port: 80 targetPort: 8080 path: /hello initialDelaySeconds: 60 periodSeconds: 30

    Um einen anderen Dienst zu verwenden (z. B.NodePort), können Sie die Parameter ändern. Weitere Informationen finden Sie in der Kubernetes-Dokumentation.

  3. Sie können den Kubernetes Horizontal Pod Autoscaler aktivieren, indem Sie den Parameter auf ändern. autoscaling enabled: true

    autoscaling: enabled: true minReplicas: 1 maxReplicas: 100 targetCPUUtilizationPercentage: 80 # targetMemoryUtilizationPercentage: 80

Sie können verschiedene Funktionen für die Kubernetes-Workloads aktivieren, indem Sie die Werte in der values.<ENV>.yaml Datei ändern, in der sich Ihre Entwicklungs-, Produktions-, UAT- oder QA-Umgebung <ENV> befindet.

DevOps

Überprüfen Sie Helm-Diagramme auf Syntaxfehler.

  1. Vergewissern Sie sich vom Terminal aus, dass Helm v3 auf Ihrer lokalen Workstation installiert ist, indem Sie den folgenden Befehl ausführen.

    helm --version

    Wenn Helm v3 nicht installiert ist, installieren Sie es.

  2. Navigieren Sie im Terminal zum Verzeichnis Helm Charts (helm_charts/aws-proserve-java-greeting) und führen Sie den folgenden Befehl aus.

    helm lint . -f values.dev.yaml

    Dadurch werden die Helm-Charts auf Syntaxfehler überprüft.

DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie die CI/CD-Pipeline.

  1. Öffnen Sie die CloudFormation AWS-Konsole und wählen Sie Create Stack aus.

  2. Wählen Sie unter Vorlage angeben die Option Eine Vorlagendatei hochladen, laden Sie die cf_templates/build_deployment.yaml Vorlage hoch und klicken Sie dann auf Weiter.

  3. Geben Sie im Feld Stackdetails angeben den Stack-Namen und anschließend die folgenden Werte für die Eingabeparameter an:

    • CodeBranchName: Name der Filiale des CodeCommit Repositorys, in dem sich Ihr Code befindet

    • EKSClusterName: Name Ihres EKS-Clusters (nicht die EKSCluster ID)

    • EKS CodeBuildAppName: Name der App Helm-Diagramm (aws-proserve-java-greeting)

    • WorkerNodeRoleEKS-ARN: ARN der IAM-Rolle der Amazon EKS-Worker-Knoten

    • EKS WorkerNodeRoleName: Name der IAM-Rolle, die den Amazon EKS-Worker-Knoten zugewiesen ist

    • EcrDockerRepository: Name des Amazon ECR-Repos, in dem die Docker-Images Ihres Codes gespeichert werden

    • EmailRecipient: E-Mail-Adresse, an die Build-Benachrichtigungen gesendet werden müssen

    • EnvType: Umgebung (zum Beispiel dev, test oder prod)

    • SourceRepoName: Name des CodeCommit Repos, in dem sich Ihr Code befindet

  4. Wählen Sie Weiter aus. Verwenden Sie die Standardeinstellungen unter Stack-Optionen konfigurieren und wählen Sie dann Weiter.

  5. Überprüfen Sie im Abschnitt Überprüfen die CloudFormation AWS-Vorlage und die Stack-Details und wählen Sie dann Weiter aus.

  6. Wählen Sie Stack erstellen aus. 

  7. Während der CloudFormation Stack-Bereitstellung erhält der Besitzer der E-Mail-Adresse, die Sie in den Parametern angegeben haben, eine Nachricht, in der er aufgefordert wird, ein SNS-Thema zu abonnieren. Um Amazon SNS zu abonnieren, muss der Eigentümer den Link in der Nachricht auswählen.

  8. Nachdem der Stack erstellt wurde, öffnen Sie die Registerkarte Outputs des Stacks und notieren Sie dann den ARN-Wert für den EksCodeBuildkubeRoleARN Ausgabeschlüssel. Dieser IAM-ARN-Wert wird später benötigt, um der CodeBuild IAM-Rolle Berechtigungen zur Bereitstellung von Workloads im Amazon EKS-Cluster zu gewähren.

AWS DevOps
AufgabeBeschreibungErforderliche Fähigkeiten

Schalten Sie die Aqua Security-Integration ein.

Dieser Schritt ist erforderlich, um die von Trivy gemeldeten Ergebnisse der Docker-Image-Sicherheitslücke auf Security Hub hochzuladen. Da AWS CloudFormation keine Security Hub Hub-Integrationen unterstützt, muss dieser Prozess manuell durchgeführt werden.

  1. Öffnen Sie die AWS Security Hub Hub-Konsole und navigieren Sie zu Integrationen.

  2. Suchen Sie nach Aqua Security und wählen Sie Aqua Security: Aqua Security aus.

  3. Wählen Sie Ergebnisse akzeptieren aus.

AWS-Administrator, DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

CodeBuild Erlaubt die Ausführung von Helm- oder kubectl-Befehlen im Amazon EKS-Cluster.

CodeBuild Um für die Verwendung von Helm oder kubectl Befehlen mit dem EKS-Cluster authentifiziert zu werden, müssen Sie die IAM-Rollen zum hinzufügen. aws-auth ConfigMapFügen Sie in diesem Fall den ARN der IAM-Rolle hinzu. Dabei handelt es sich um die IAM-RolleEksCodeBuildkubeRoleARN, die für den CodeBuild Dienst erstellt wurde, um auf den EKS-Cluster zuzugreifen und Workloads darauf bereitzustellen. Dies ist eine einmalige Aktivität.

Wichtig: Das folgende Verfahren muss vor der Genehmigung der Bereitstellung abgeschlossen sein CodePipeline.

  1. Öffnen Sie das cf_templates/kube_aws_auth_configmap_patch.sh Shell-Skript in Ihrer Amazon Linux- oder macOS-Umgebung.

  2. Authentifizieren Sie sich beim Amazon EKS-Cluster, indem Sie den folgenden Befehl ausführen.

    aws eks --region <aws-region> update-kubeconfig --name <eks-cluster-name>
  3. Führen Sie das Shell-Skript mit dem folgenden Befehl aus und ersetzen <rolearn-eks-codebuild-kubectl> Sie es durch den ARN-WertEksCodeBuildkubeRoleARN, den Sie zuvor aufgezeichnet haben.

    bash cf_templates/kube_aws_auth_configmap_patch.sh <rolearn-eks-codebuild-kubectl> 

Der aws_auth ConfigMap ist konfiguriert und der Zugriff ist gewährt.

DevOps
AufgabeBeschreibungErforderliche Fähigkeiten

Stellen Sie sicher, dass die CI/CD-Pipeline automatisch initiiert wird.

  1. Die CodeSecurity Scan-Phase in der Pipeline schlägt normalerweise fehl, wenn Checkov Schwachstellen in den Dockerfile- oder Helm-Diagrammen entdeckt. Der Zweck dieses Beispiels besteht jedoch darin, einen Prozess zur Identifizierung potenzieller Sicherheitslücken einzurichten, anstatt sie über die CI/CD-Pipeline zu beheben, was normalerweise ein Prozess ist. DevSecOps In der Datei verwendet der checkov Befehl das --soft-fail Flagbuildspec/buildspec_secscan.yaml, um einen Pipeline-Ausfall zu vermeiden.

    - echo -e "\n Running Dockerfile Scan" - checkov -f code/app/Dockerfile --framework dockerfile --soft-fail --summary-position bottom - echo -e "\n Running Scan of Helm Chart files" - cp -pv helm_charts/$EKS_CODEBUILD_APP_NAME/values.dev.yaml helm_charts/$EKS_CODEBUILD_APP_NAME/values.yaml - checkov -d helm_charts/$EKS_CODEBUILD_APP_NAME --framework helm --soft-fail --summary-position bottom - rm -rfv helm_charts/$EKS_CODEBUILD_APP_NAME/values.yaml

    Damit die Pipeline fehlschlägt, wenn Sicherheitslücken in den Dockerfile- und Helm-Diagrammen gemeldet werden, muss die --soft-fail Option aus dem checkov Befehl entfernt werden. Entwickler oder Techniker können die Sicherheitslücken dann beheben und die Änderungen in das CodeCommit Quellcode-Repository übertragen.

  2. Ähnlich wie bei CodeSecurity Scan verwendet die Build-Phase Aqua Security Trivy, um HOHE und KRITISCHE Docker-Image-Schwachstellen zu identifizieren, bevor die Anwendung an Amazon ECR weitergeleitet wird. In diesem Beispiel sorgen wir nicht dafür, dass die Pipeline aufgrund von Docker-Image-Schwachstellen fehlschlägt. In der Datei buildspec/buildspec.yml enthält der trivy Befehl das Flag --exit-codemit einem Wert 0, weshalb die Pipeline nicht fehlschlägt, wenn DOCKER-Image-Schwachstellen vom Typ HIGH oder CRITICAL gemeldet werden.

    - AWS_REGION=$AWS_DEFAULT_REGION AWS_ACCOUNT_ID=$AWS_ACCOUNT_ID trivy -d image --no-progress --ignore-unfixed --exit-code 0 --severity HIGH,CRITICAL --format template --template "@securityhub/asff.tpl" -o securityhub/report.asff $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$CODEBUILD_RESOLVED_SOURCE_VERSION

    Damit die Pipeline fehlschlägt, wenn HIGH, CRTICAL Sicherheitslücken gemeldet werden, ändern Sie den Wert von --exit-code auf1.

    Entwickler oder Techniker können die Sicherheitslücken dann beheben und die Änderungen in das CodeCommit Quellcode-Repository übernehmen.

  3. Von Aqua Security Trivy gemeldete Docker-Image-Schwachstellen werden auf den Security Hub hochgeladen. Navigieren Sie in der AWS Security Hub Hub-Konsole zu Findings. Filtern Sie die Ergebnisse mit Record State = Active und Product = Aqua Security. Dadurch werden die Docker-Image-Schwachstellen in Security Hub aufgelistet. Es kann 15 Minuten bis 1 Stunde dauern, bis Sicherheitslücken im Security Hub auftauchen.

Weitere Informationen zum Starten der Pipeline mithilfe CodePipeline von finden Sie in der CodePipeline AWS-Dokumentation unter Starten einer Pipeline in CodePipeline, Manuelles Starten einer Pipeline und Starten einer Pipeline nach einem Zeitplan.

DevOps

Genehmigen Sie die Bereitstellung.

  1. Nach Abschluss der Erstellungsphase gibt es eine Genehmigungsstelle für die Bereitstellung. Der Prüfer oder ein Release-Manager sollte den Build überprüfen und ihn genehmigen, wenn alle Anforderungen erfüllt sind. Dies ist der empfohlene Ansatz für Teams, die Continuous Delivery für die Anwendungsbereitstellung verwenden.

  2. Nach der Genehmigung leitet die Pipeline die Bereitstellungsphase ein.

  3. Nachdem die Bereitstellungsphase erfolgreich war, enthält das CodeBuild Protokoll für diese Phase die URL der Anwendung. Verwenden Sie die URL, um zu überprüfen, ob die Anwendung bereit ist.

DevOps

Überprüfen Sie die Anwendungsprofilerstellung.

Nachdem die Bereitstellung abgeschlossen und der Anwendungs-Pod in Amazon EKS bereitgestellt wurde, versucht der in der Anwendung konfigurierte Amazon CodeGuru Profiler-Agent, Profilerstellungsdaten der Anwendung (CPU, Heap-Zusammenfassung, Latenz und Engpässe) an Amazon Profiler zu senden. CodeGuru

Bei der ersten Bereitstellung einer Anwendung benötigt Amazon CodeGuru Profiler etwa 15 Minuten, um die Profilerstellungsdaten zu visualisieren.

AWS DevOps

Zugehörige Ressourcen

Zusätzliche Informationen

CodeGuru Profiler sollte in Bezug auf die Funktionalität nicht mit dem AWS X-Ray-Service verwechselt werden. CodeGuru Profiler wird bevorzugt, um die teuersten Codezeilen zu identifizieren, die zu Engpässen oder Sicherheitsproblemen führen können, und um sie zu beheben, bevor sie zu einem potenziellen Risiko werden. Der AWS X-Ray-Service dient der Überwachung der Anwendungsleistung.

In diesem Muster sind die Ereignisregeln dem Standard-Event-Bus zugeordnet. Bei Bedarf können Sie das Muster erweitern, um einen benutzerdefinierten Event-Bus zu verwenden.

Dieses Muster verwendet CodeGuru Reviewer als statisches Tool zum Testen der Anwendungssicherheit (SAST) für Anwendungscode. Sie können diese Pipeline auch für andere Tools wie SonarQube Checkmarx verwenden. Die entsprechenden Anweisungen zur Scaneinrichtung für jedes dieser Tools können hinzugefügt werden und ersetzen so die Scananweisungen von CodeGuru. buildspec/buildspec_secscan.yaml