Concourse Lab Creation

Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :

Environnement de Test

Exécuter Concourse

Avec Docker-Compose

Ce fichier docker-compose simplifie l'installation pour faire quelques tests avec concourse :

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

Vous pouvez télécharger la ligne de commande fly pour votre OS depuis le web à 127.0.0.1:8080

Avec Kubernetes (Recommandé)

Vous pouvez facilement déployer concourse dans Kubernetes (dans minikube par exemple) en utilisant le helm-chart : 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

Après avoir généré l'environnement concourse, vous pourriez générer un secret et donner un accès au SA exécuté dans concourse web pour accéder aux secrets K8s :

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 -

Création de Pipeline

Un pipeline est composé d'une liste de Jobs qui contient une liste ordonnée de Steps.

Étapes

Plusieurs types d'étapes différents peuvent être utilisés :

  • l'étape task exécute une tâche

  • l'étape get récupère une ressource

  • l'étape put met à jour une ressource

  • l'étape set_pipeline configure un pipeline

  • l'étape load_var charge une valeur dans une var locale

  • l'étape in_parallel exécute des étapes en parallèle

  • l'étape do exécute des étapes en séquence

  • le modificateur d'étape across exécute une étape plusieurs fois ; une fois pour chaque combinaison de valeurs de variables

  • l'étape try tente d'exécuter une étape et réussit même si l'étape échoue

Chaque étape dans un plan de job s'exécute dans son propre conteneur. Vous pouvez exécuter tout ce que vous voulez à l'intérieur du conteneur (c.-à-d. exécuter mes tests, exécuter ce script bash, construire cette image, etc.). Donc, si vous avez un job avec cinq étapes, Concourse créera cinq conteneurs, un pour chaque étape.

Par conséquent, il est possible d'indiquer le type de conteneur dont chaque étape a besoin pour être exécutée.

Exemple Simple de Pipeline

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

Vérifiez 127.0.0.1:8080 pour voir le flux du pipeline.

Script Bash avec pipeline de sortie/entrée

Il est possible de sauvegarder les résultats d'une tâche dans un fichier et d'indiquer qu'il s'agit d'une sortie, puis d'indiquer l'entrée de la tâche suivante comme la sortie de la tâche précédente. Ce que fait concourse, c'est de monter le répertoire de la tâche précédente dans la nouvelle tâche où vous pouvez accéder aux fichiers créés par la tâche précédente.

Déclencheurs

Vous n'avez pas besoin de déclencher les jobs manuellement à chaque fois que vous devez les exécuter, vous pouvez également les programmer pour qu'ils s'exécutent chaque fois que :

Consultez un exemple de pipeline YAML qui se déclenche sur de nouveaux commits sur master à https://concourse-ci.org/tutorial-resources.html

Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :

Dernière mise à jour