# DO - Informations de base

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

## Informations de base

DigitalOcean est une **plateforme de cloud computing qui fournit aux utilisateurs une variété de services**, y compris des serveurs privés virtuels (VPS) et d'autres ressources pour construire, déployer et gérer des applications. **Les services de DigitalOcean sont conçus pour être simples et faciles à utiliser**, ce qui les rend **populaires parmi les développeurs et les petites entreprises**.

Certaines des caractéristiques clés de DigitalOcean incluent :

- **Serveurs privés virtuels (VPS)** : DigitalOcean fournit des VPS qui peuvent être utilisés pour héberger des sites web et des applications. Ces VPS sont connus pour leur simplicité et leur facilité d'utilisation, et peuvent être déployés rapidement et facilement à l'aide d'une variété de "droplets" préconçus ou de configurations personnalisées.
- **Stockage** : DigitalOcean propose une gamme d'options de stockage, y compris le stockage d'objets, le stockage en bloc et les bases de données gérées, qui peuvent être utilisées pour stocker et gérer des données pour des sites web et des applications.
- **Outils de développement et de déploiement** : DigitalOcean fournit une gamme d'outils qui peuvent être utilisés pour construire, déployer et gérer des applications, y compris des API et des droplets préconçus.
- **Sécurité** : DigitalOcean accorde une grande importance à la sécurité et propose une gamme d'outils et de fonctionnalités pour aider les utilisateurs à protéger leurs données et leurs applications. Cela inclut le chiffrement, les sauvegardes et d'autres mesures de sécurité.

Dans l'ensemble, DigitalOcean est une plateforme de cloud computing qui fournit aux utilisateurs les outils et les ressources dont ils ont besoin pour construire, déployer et gérer des applications dans le cloud. Ses services sont conçus pour être simples et faciles à utiliser, ce qui les rend populaires parmi les développeurs et les petites entreprises.

### Principales différences avec AWS

L'une des principales différences entre DigitalOcean et AWS est la **gamme de services qu'ils offrent**. **DigitalOcean se concentre sur la fourniture de serveurs privés virtuels (VPS)** simples et faciles à utiliser, de stockage et d'outils de développement et de déploiement. **AWS**, en revanche, propose une **gamme de services beaucoup plus large**, y compris des VPS, du stockage, des bases de données, de l'apprentissage automatique, de l'analyse et de nombreux autres services. Cela signifie qu'AWS est plus adapté aux applications complexes de niveau entreprise, tandis que DigitalOcean est plus adapté aux petites entreprises et aux développeurs.

Une autre différence clé entre les deux plateformes est la **structure tarifaire**. **La tarification de DigitalOcean est généralement plus simple et plus facile** à comprendre que celle d'AWS, avec une gamme de plans tarifaires basés sur le nombre de droplets et d'autres ressources utilisées. AWS, en revanche, a une structure tarifaire plus complexe qui est basée sur une variété de facteurs, y compris le type et la quantité de ressources utilisées. Cela peut rendre plus difficile la prévision des coûts lors de l'utilisation d'AWS.

## Hiérarchie

### Utilisateur

Un utilisateur est ce à quoi vous vous attendez, un utilisateur. Il peut **créer des équipes** et **être membre de différentes équipes.**

### **Équipe**

Une équipe est un groupe d'**utilisateurs**. Lorsqu'un utilisateur crée une équipe, il a le **rôle de propriétaire de cette équipe** et il **configure initialement les informations de facturation**. **D'autres** utilisateurs peuvent ensuite être **invités** à l'équipe.

À l'intérieur de l'équipe, il peut y avoir plusieurs **projets**. Un projet est juste un **ensemble de services en cours d'exécution**. Il peut être utilisé pour **séparer différentes étapes d'infrastructure**, comme prod, staging, dev...

### Projet

Comme expliqué, un projet est juste un conteneur pour tous les **services** (droplets, espaces, bases de données, kubernetes...) **fonctionnant ensemble à l'intérieur de celui-ci**.\
Un projet Digital Ocean est très similaire à un projet GCP sans IAM.

## Permissions

### Équipe

Fondamentalement, tous les membres d'une équipe ont **accès aux ressources DO dans tous les projets créés au sein de l'équipe (avec plus ou moins de privilèges).**

### Rôles

Chaque **utilisateur au sein d'une équipe** peut avoir **l'un** des trois **rôles** suivants :

| Rôle       | Ressources partagées | Informations de facturation | Paramètres de l'équipe |
| ---------- | --------------------- | --------------------------- | ---------------------- |
| **Propriétaire**  | Accès complet      | Accès complet               | Accès complet          |
| **Facturier** | Pas d'accès        | Accès complet               | Pas d'accès            |
| **Membre** | Accès complet        | Pas d'accès                 | Pas d'accès            |

**Le propriétaire** et **le membre peuvent lister les utilisateurs** et vérifier leurs **rôles** (le facturier ne peut pas).

## Accès

### Nom d'utilisateur + mot de passe (MFA)

Comme dans la plupart des plateformes, pour accéder à l'interface graphique, vous pouvez utiliser un ensemble de **nom d'utilisateur et mot de passe valides** pour **accéder** aux **ressources** cloud. Une fois connecté, vous pouvez voir **toutes les équipes dont vous faites partie** sur [https://cloud.digitalocean.com/account/profile](https://cloud.digitalocean.com/account/profile).\
Et vous pouvez voir toute votre activité sur [https://cloud.digitalocean.com/account/activity](https://cloud.digitalocean.com/account/activity).

**MFA** peut être **activé** pour un utilisateur et **imposé** à tous les utilisateurs d'une **équipe** pour accéder à l'équipe.

### Clés API

Pour utiliser l'API, les utilisateurs peuvent **générer des clés API**. Celles-ci auront toujours des permissions de lecture, mais **les permissions d'écriture sont optionnelles**.\
Les clés API ressemblent à ceci :
```
dop_v1_1946a92309d6240274519275875bb3cb03c1695f60d47eaa1532916502361836
```
L'outil cli est [**doctl**](https://github.com/digitalocean/doctl#installing-doctl). Initialisez-le (vous avez besoin d'un jeton) avec :
```bash
doctl auth init # Asks for the token
doctl auth init --context my-context # Login with a different token
doctl auth list # List accounts
```
Par défaut, ce jeton sera écrit en texte clair sur Mac dans `/Users/<username>/Library/Application Support/doctl/config.yaml`.

### Clés d'accès aux Spaces

Ce sont des clés qui donnent **accès aux Spaces** (comme S3 dans AWS ou Storage dans GCP).

Elles sont composées d'un **nom**, d'un **keyid** et d'un **secret**. Un exemple pourrait être :
```
Name: key-example
Keyid: DO00ZW4FABSGZHAABGFX
Secret: 2JJ0CcQZ56qeFzAJ5GFUeeR4Dckarsh6EQSLm87MKlM
```
### Application OAuth

Les applications OAuth peuvent se voir accorder **l'accès à Digital Ocean**.

Il est possible de **créer des applications OAuth** dans [https://cloud.digitalocean.com/account/api/applications](https://cloud.digitalocean.com/account/api/applications) et de vérifier toutes les **applications OAuth autorisées** dans [https://cloud.digitalocean.com/account/api/access](https://cloud.digitalocean.com/account/api/access).

### Clés SSH

Il est possible d'ajouter des **clés SSH à une équipe Digital Ocean** depuis la **console** dans [https://cloud.digitalocean.com/account/security](https://cloud.digitalocean.com/account/security).

De cette façon, si vous créez un **nouveau droplet, la clé SSH sera configurée** dessus et vous pourrez **vous connecter via SSH** sans mot de passe (notez que les [clés SSH nouvellement téléchargées ne sont pas configurées dans les droplets déjà existants pour des raisons de sécurité](https://docs.digitalocean.com/products/droplets/how-to/add-ssh-keys/to-existing-droplet/)).

### Jeton d'authentification des fonctions

La manière **de déclencher une fonction via l'API REST** (toujours activée, c'est la méthode utilisée par le cli) est de déclencher une requête avec un **jeton d'authentification** comme :
```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="
```
## Journaux

### Journaux des utilisateurs

Les **journaux d'un utilisateur** peuvent être trouvés à [**https://cloud.digitalocean.com/account/activity**](https://cloud.digitalocean.com/account/activity)

### Journaux de l'équipe

Les **journaux d'une équipe** peuvent être trouvés à [**https://cloud.digitalocean.com/account/security**](https://cloud.digitalocean.com/account/security)

## Références

- [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}}
