Concourse Lab Creation

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Testumgebung

Ausführen von Concourse

Mit Docker-Compose

Diese Docker-Compose-Datei vereinfacht die Installation, um einige Tests mit Concourse durchzuführen:

wget https://raw.githubusercontent.com/starkandwayne/concourse-tutorial/master/docker-compose.yml
docker-compose up -d

Du kannst das Befehlszeilentool fly für dein Betriebssystem von der Website unter 127.0.0.1:8080 herunterladen.

Mit Kubernetes (Empfohlen)

Du kannst Concourse einfach in Kubernetes (zum Beispiel in minikube) mithilfe des Helm-Charts bereitstellen: concourse-chart.

brew install helm
helm repo add concourse https://concourse-charts.storage.googleapis.com/
helm install concourse-release concourse/concourse
# concourse-release will be the prefix name for the concourse elements in k8s
# After the installation you will find the indications to connect to it in the console

# If you need to delete it
helm delete concourse-release

Nachdem Sie die Concourse-Umgebung generiert haben, können Sie ein Geheimnis generieren und dem SA, der in Concourse Web läuft, Zugriff auf K8s-Secrets geben:

echo 'apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: read-secrets
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get"]

---

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-secrets-concourse
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: read-secrets
subjects:
- kind: ServiceAccount
name: concourse-release-web
namespace: default

---

apiVersion: v1
kind: Secret
metadata:
name: super
namespace: concourse-release-main
type: Opaque
data:
secret: MWYyZDFlMmU2N2Rm

' | kubectl apply -f -

Erstellen Sie eine Pipeline

Eine Pipeline besteht aus einer Liste von Jobs, die eine geordnete Liste von Schritten enthalten.

Schritte

Es können verschiedene Arten von Schritten verwendet werden:

Jeder Schritt in einem Jobplan wird in seinem eigenen Container ausgeführt. Sie können alles ausführen, was Sie möchten, innerhalb des Containers (z. B. meine Tests ausführen, dieses Bash-Skript ausführen, dieses Image erstellen usw.). Wenn Sie also einen Job mit fünf Schritten haben, erstellt Concourse fünf Container, einen für jeden Schritt.

Daher ist es möglich, den Typ des Containers anzugeben, in dem jeder Schritt ausgeführt werden soll.

Einfaches Pipeline-Beispiel

jobs:
- name: simple
plan:
- task: simple-task
privileged: true
config:
# Tells Concourse which type of worker this task should run on
platform: linux
image_resource:
type: registry-image
source:
repository: busybox # images are pulled from docker hub by default
run:
path: sh
args:
- -cx
- |
sleep 1000
echo "$SUPER_SECRET"
params:
SUPER_SECRET: ((super.secret))
fly -t tutorial set-pipeline -p pipe-name -c hello-world.yml
# pipelines are paused when first created
fly -t tutorial unpause-pipeline -p pipe-name
# trigger the job and watch it run to completion
fly -t tutorial trigger-job --job pipe-name/simple --watch
# From another console
fly -t tutorial intercept --job pipe-name/simple

Überprüfen Sie 127.0.0.1:8080, um den Pipeline-Fluss zu sehen.

Bash-Skript mit Ein- und Ausgabepipeline

Es ist möglich, die Ergebnisse einer Aufgabe in einer Datei zu speichern und anzugeben, dass es sich um eine Ausgabe handelt, und dann den Eingang der nächsten Aufgabe als Ausgabe der vorherigen Aufgabe anzugeben. Was Concourse tut, ist, das Verzeichnis der vorherigen Aufgabe in der neuen Aufgabe einzuhängen, wo Sie auf die von der vorherigen Aufgabe erstellten Dateien zugreifen können.

Auslöser

Sie müssen die Jobs nicht jedes Mal manuell auslösen, wenn Sie sie ausführen müssen, Sie können sie auch programmieren, um jedes Mal ausgeführt zu werden:

Überprüfen Sie ein YAML-Pipeline-Beispiel, das bei neuen Commits im Master ausgelöst wird unter https://concourse-ci.org/tutorial-resources.html

Last updated