Concourse Lab Creation

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Entorno de Pruebas

Ejecutando Concourse

Con Docker-Compose

Este archivo docker-compose simplifica la instalación para realizar algunas pruebas con concourse:

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

Puede descargar la línea de comandos fly para su sistema operativo desde la web en 127.0.0.1:8080

Con Kubernetes (Recomendado)

Puede desplegar fácilmente concourse en Kubernetes (en minikube, por ejemplo) utilizando el 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

Después de generar el entorno de concourse, podrías generar un secreto y dar acceso al SA que se ejecuta en concourse web para acceder a los secretos de 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 -

Crear Pipeline

Un pipeline está compuesto por una lista de Jobs que contiene una lista ordenada de Steps.

Pasos

Se pueden utilizar varios tipos de pasos diferentes:

  • el paso task ejecuta una tarea

  • el paso get obtiene un recurso

  • el paso put actualiza un recurso

  • el paso set_pipeline configura un pipeline

  • el paso load_var carga un valor en una var local

  • el paso in_parallel ejecuta pasos en paralelo

  • el paso do ejecuta pasos en secuencia

  • el modificador de paso across ejecuta un paso múltiples veces; una vez por cada combinación de valores de variables

  • el paso try intenta ejecutar un paso y tiene éxito incluso si el paso falla

Cada paso en un plan de trabajo se ejecuta en su propio contenedor. Puedes ejecutar lo que quieras dentro del contenedor (es decir, ejecutar mis pruebas, ejecutar este script bash, construir esta imagen, etc.). Por lo tanto, si tienes un trabajo con cinco pasos, Concourse creará cinco contenedores, uno para cada paso.

Por lo tanto, es posible indicar el tipo de contenedor que cada paso necesita para ejecutarse.

Ejemplo de Pipeline Simple

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

Comprueba 127.0.0.1:8080 para ver el flujo del pipeline.

Script Bash con pipeline de entrada/salida

Es posible guardar los resultados de una tarea en un archivo e indicar que es una salida y luego señalar la entrada de la siguiente tarea como la salida de la tarea anterior. Lo que hace concourse es montar el directorio de la tarea anterior en la nueva tarea donde puedes acceder a los archivos creados por la tarea anterior.

Triggers

No necesitas activar los trabajos manualmente cada vez que necesites ejecutarlos, también puedes programarlos para que se ejecuten cada vez que:

Consulta un ejemplo de pipeline YAML que se activa con nuevos commits en master en https://concourse-ci.org/tutorial-resources.html

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización