# DO - Informazioni di Base

{{#include ../../banners/hacktricks-training.md}}

## Informazioni di Base

DigitalOcean è una **piattaforma di cloud computing che fornisce agli utenti una varietà di servizi**, inclusi server virtuali privati (VPS) e altre risorse per costruire, distribuire e gestire applicazioni. **I servizi di DigitalOcean sono progettati per essere semplici e facili da usare**, rendendoli **popolari tra sviluppatori e piccole imprese**.

Alcune delle caratteristiche principali di DigitalOcean includono:

- **Server virtuali privati (VPS)**: DigitalOcean fornisce VPS che possono essere utilizzati per ospitare siti web e applicazioni. Questi VPS sono noti per la loro semplicità e facilità d'uso, e possono essere rapidamente e facilmente distribuiti utilizzando una varietà di "droplets" pre-costruiti o configurazioni personalizzate.
- **Storage**: DigitalOcean offre una gamma di opzioni di storage, inclusi storage a oggetti, storage a blocchi e database gestiti, che possono essere utilizzati per memorizzare e gestire dati per siti web e applicazioni.
- **Strumenti di sviluppo e distribuzione**: DigitalOcean fornisce una gamma di strumenti che possono essere utilizzati per costruire, distribuire e gestire applicazioni, inclusi API e droplets pre-costruiti.
- **Sicurezza**: DigitalOcean pone una forte enfasi sulla sicurezza e offre una gamma di strumenti e funzionalità per aiutare gli utenti a mantenere i propri dati e applicazioni al sicuro. Questo include crittografia, backup e altre misure di sicurezza.

In generale, DigitalOcean è una piattaforma di cloud computing che fornisce agli utenti gli strumenti e le risorse di cui hanno bisogno per costruire, distribuire e gestire applicazioni nel cloud. I suoi servizi sono progettati per essere semplici e facili da usare, rendendoli popolari tra sviluppatori e piccole imprese.

### Principali Differenze da AWS

Una delle principali differenze tra DigitalOcean e AWS è la **gamma di servizi offerti**. **DigitalOcean si concentra sulla fornitura di server virtuali privati (VPS)** semplici e facili da usare, storage e strumenti di sviluppo e distribuzione. **AWS**, d'altra parte, offre una **gamma di servizi molto più ampia**, inclusi VPS, storage, database, machine learning, analisi e molti altri servizi. Questo significa che AWS è più adatto per applicazioni complesse a livello enterprise, mentre DigitalOcean è più adatto per piccole imprese e sviluppatori.

Un'altra differenza chiave tra le due piattaforme è la **struttura dei prezzi**. **I prezzi di DigitalOcean sono generalmente più chiari e facili** da comprendere rispetto a AWS, con una gamma di piani tariffari basati sul numero di droplets e altre risorse utilizzate. AWS, d'altra parte, ha una struttura dei prezzi più complessa basata su una varietà di fattori, inclusi il tipo e la quantità di risorse utilizzate. Questo può rendere più difficile prevedere i costi quando si utilizza AWS.

## Gerarchia

### Utente

Un utente è ciò che ti aspetti, un utente. Può **creare Team** e **essere membro di diversi team.**

### **Team**

Un team è un gruppo di **utenti**. Quando un utente crea un team, ha il **ruolo di proprietario di quel team** e inizialmente **imposta le informazioni di fatturazione**. **Altri** utenti possono quindi essere **invitati** nel team.

All'interno del team possono esserci diversi **progetti**. Un progetto è semplicemente un **insieme di servizi in esecuzione**. Può essere utilizzato per **separare diverse fasi infrastrutturali**, come prod, staging, dev...

### Progetto

Come spiegato, un progetto è semplicemente un contenitore per tutti i **servizi** (droplets, spaces, database, kubernetes...) **in esecuzione insieme al suo interno**.\
Un progetto di Digital Ocean è molto simile a un progetto GCP senza IAM.

## Permessi

### Team

Fondamentalmente, tutti i membri di un team hanno **accesso alle risorse DO in tutti i progetti creati all'interno del team (con più o meno privilegi).**

### Ruoli

Ogni **utente all'interno di un team** può avere **uno** dei seguenti tre **ruoli** al suo interno:

| Ruolo      | Risorse Condivise | Informazioni di Fatturazione | Impostazioni del Team |
| ---------- | ----------------- | --------------------------- | --------------------- |
| **Proprietario** | Accesso completo | Accesso completo           | Accesso completo      |
| **Fatturatore**  | Nessun accesso    | Accesso completo           | Nessun accesso        |
| **Membro**       | Accesso completo   | Nessun accesso             | Nessun accesso        |

**Il Proprietario** e **il membro possono elencare gli utenti** e controllare i loro **ruoli** (il fatturatore non può).

## Accesso

### Nome utente + password (MFA)

Come nella maggior parte delle piattaforme, per accedere alla GUI puoi utilizzare un insieme di **nome utente e password validi** per **accedere** alle **risorse** cloud. Una volta effettuato l'accesso, puoi vedere **tutti i team di cui fai parte** in [https://cloud.digitalocean.com/account/profile](https://cloud.digitalocean.com/account/profile).\
E puoi vedere tutta la tua attività in [https://cloud.digitalocean.com/account/activity](https://cloud.digitalocean.com/account/activity).

**MFA** può essere **abilitato** per un utente e **imposto** per tutti gli utenti in un **team** per accedere al team.

### Chiavi API

Per utilizzare l'API, gli utenti possono **generare chiavi API**. Queste avranno sempre permessi di lettura, ma **i permessi di scrittura sono opzionali**.\
Le chiavi API hanno questo aspetto:
```
dop_v1_1946a92309d6240274519275875bb3cb03c1695f60d47eaa1532916502361836
```
Lo strumento cli è [**doctl**](https://github.com/digitalocean/doctl#installing-doctl). Inizializzalo (hai bisogno di un token) con:
```bash
doctl auth init # Asks for the token
doctl auth init --context my-context # Login with a different token
doctl auth list # List accounts
```
Per impostazione predefinita, questo token verrà scritto in chiaro su Mac in `/Users/<username>/Library/Application Support/doctl/config.yaml`.

### Chiavi di accesso agli Spaces

Queste sono chiavi che danno **accesso agli Spaces** (come S3 in AWS o Storage in GCP).

Sono composte da un **nome**, un **keyid** e un **secret**. Un esempio potrebbe essere:
```
Name: key-example
Keyid: DO00ZW4FABSGZHAABGFX
Secret: 2JJ0CcQZ56qeFzAJ5GFUeeR4Dckarsh6EQSLm87MKlM
```
### OAuth Application

Le applicazioni OAuth possono essere concesse **accesso su Digital Ocean**.

È possibile **creare applicazioni OAuth** in [https://cloud.digitalocean.com/account/api/applications](https://cloud.digitalocean.com/account/api/applications) e controllare tutte le **applicazioni OAuth consentite** in [https://cloud.digitalocean.com/account/api/access](https://cloud.digitalocean.com/account/api/access).

### SSH Keys

È possibile aggiungere **chiavi SSH a un Team di Digital Ocean** dalla **console** in [https://cloud.digitalocean.com/account/security](https://cloud.digitalocean.com/account/security).

In questo modo, se crei un **nuovo droplet, la chiave SSH sarà impostata** su di esso e potrai **accedere via SSH** senza password (nota che le [chiavi SSH caricate di recente non sono impostate nei droplet già esistenti per motivi di sicurezza](https://docs.digitalocean.com/products/droplets/how-to/add-ssh-keys/to-existing-droplet/)).

### Functions Authentication Token

Il modo **per attivare una funzione tramite REST API** (sempre abilitato, è il metodo utilizzato dal cli) è attivare una richiesta con un **token di autenticazione** come:
```bash
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="
```
## Log

### Log utente

I **log di un utente** possono essere trovati in [**https://cloud.digitalocean.com/account/activity**](https://cloud.digitalocean.com/account/activity)

### Log di squadra

I **log di una squadra** possono essere trovati in [**https://cloud.digitalocean.com/account/security**](https://cloud.digitalocean.com/account/security)

## Riferimenti

- [https://docs.digitalocean.com/products/teams/how-to/manage-membership/](https://docs.digitalocean.com/products/teams/how-to/manage-membership/)

{{#include ../../banners/hacktricks-training.md}}
