DO - Functions

Supporta HackTricks

Informazioni di Base

Le Funzioni di DigitalOcean, conosciute anche come "DO Functions", sono una piattaforma di calcolo serverless che ti permette di eseguire codice senza preoccuparti dell'infrastruttura sottostante. Con DO Functions, puoi scrivere e distribuire il tuo codice come "funzioni" che possono essere attivate tramite API, richieste HTTP (se abilitate) o cron. Queste funzioni vengono eseguite in un ambiente completamente gestito, quindi non devi preoccuparti di ridimensionamento, sicurezza o manutenzione.

In DO, per creare una funzione prima devi creare uno spazio dei nomi che raggrupperà le funzioni. All'interno dello spazio dei nomi puoi quindi creare una funzione.

Trigger

Il modo per attivare una funzione tramite REST API (sempre abilitato, è il metodo che usa la CLI) è inviando una richiesta con un token di autenticazione come:

curl -X POST "https://faas-lon1-129376a7.doserverless.co/api/v1/namespaces/fn-c100c012-65bf-4040-1230-2183764b7c23/actions/functionname?blocking=true&result=true" \
-H "Content-Type: application/json" \
-H "Authorization: Basic MGU0NTczZGQtNjNiYS00MjZlLWI2YjctODk0N2MyYTA2NGQ4OkhwVEllQ2t4djNZN2x6YjJiRmFGc1FERXBySVlWa1lEbUxtRE1aRTludXA1UUNlU2VpV0ZGNjNqWnVhYVdrTFg="

Per vedere come il tool cli doctl ottiene questo token (così puoi replicarlo), il seguente comando mostra l'intero tracciato di rete:

doctl serverless connect --trace

Quando il trigger HTTP è abilitato, una funzione web può essere invocata attraverso questi metodi HTTP GET, POST, PUT, PATCH, DELETE, HEAD e OPTIONS.

Nelle funzioni DO, le variabili d'ambiente non possono essere crittografate (al momento della stesura di questo testo). Non ho trovato alcun modo per leggerle dalla CLI, ma dalla console è semplice.

Gli URL delle funzioni sono simili a questo: https://<random>.doserverless.co/api/v1/web/<namespace-id>/default/<function-name>

Enumerazione

# Namespace
doctl serverless namespaces list

# Functions (need to connect to a namespace)
doctl serverless connect
doctl serverless functions list
doctl serverless functions invoke <func-name>
doctl serverless functions get <func-name>

# Logs of executions
doctl serverless activations list
doctl serverless activations get <activation-id> # Get all the info about execution
doctl serverless activations logs <activation-id> # get only the logs of execution
doctl serverless activations result <activation-id> # get only the response result of execution

# I couldn't find any way to get the env variables form the CLI

Non c'è un endpoint dei metadati dalla sandbox delle Funzioni.

Supporta HackTricks

Last updated