# DO - Osnovne informacije

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

## Osnovne informacije

DigitalOcean je **platforma za cloud računarstvo koja korisnicima pruža razne usluge**, uključujući virtuelne privatne servere (VPS) i druge resurse za izgradnju, implementaciju i upravljanje aplikacijama. **Usluge DigitalOcean-a su dizajnirane da budu jednostavne i lake za korišćenje**, što ih čini **popularnim među programerima i malim preduzećima**.

Neke od ključnih karakteristika DigitalOcean-a uključuju:

- **Virtuelni privatni serveri (VPS)**: DigitalOcean pruža VPS koji se mogu koristiti za hostovanje veb sajtova i aplikacija. Ovi VPS su poznati po svojoj jednostavnosti i lakoći korišćenja, i mogu se brzo i lako implementirati koristeći razne unapred pripremljene "droplete" ili prilagođene konfiguracije.
- **Skladištenje**: DigitalOcean nudi niz opcija za skladištenje, uključujući skladištenje objekata, blok skladištenje i upravljane baze podataka, koje se mogu koristiti za skladištenje i upravljanje podacima za veb sajtove i aplikacije.
- **Alati za razvoj i implementaciju**: DigitalOcean pruža niz alata koji se mogu koristiti za izgradnju, implementaciju i upravljanje aplikacijama, uključujući API-je i unapred pripremljene droplete.
- **Bezbednost**: DigitalOcean stavlja veliki naglasak na bezbednost i nudi niz alata i karakteristika koje pomažu korisnicima da drže svoje podatke i aplikacije sigurnim. Ovo uključuje enkripciju, rezervne kopije i druge mere bezbednosti.

Sve u svemu, DigitalOcean je platforma za cloud računarstvo koja korisnicima pruža alate i resurse potrebne za izgradnju, implementaciju i upravljanje aplikacijama u oblaku. Njegove usluge su dizajnirane da budu jednostavne i lake za korišćenje, što ih čini popularnim među programerima i malim preduzećima.

### Glavne razlike u odnosu na AWS

Jedna od glavnih razlika između DigitalOcean-a i AWS-a je **raspon usluga koje nude**. **DigitalOcean se fokusira na pružanje jednostavnih** i lakih za korišćenje virtuelnih privatnih servera (VPS), skladištenja i alata za razvoj i implementaciju. **AWS**, s druge strane, nudi **mnogo širi spektar usluga**, uključujući VPS, skladištenje, baze podataka, mašinsko učenje, analitiku i mnoge druge usluge. To znači da je AWS pogodniji za složene, aplikacije na nivou preduzeća, dok je DigitalOcean više prilagođen malim preduzećima i programerima.

Još jedna ključna razlika između dve platforme je **struktura cena**. **Cene DigitalOcean-a su generalno jednostavnije i lakše** za razumevanje od AWS-a, sa nizom planova cena koji se zasnivaju na broju dropleta i drugih korišćenih resursa. AWS, s druge strane, ima složeniju strukturu cena koja se zasniva na raznim faktorima, uključujući tip i količinu korišćenih resursa. Ovo može otežati predviđanje troškova prilikom korišćenja AWS-a.

## Hijerarhija

### Korisnik

Korisnik je ono što očekujete, korisnik. On može **kreirati timove** i **biti član različitih timova.**

### **Tim**

Tim je grupa **korisnika**. Kada korisnik kreira tim, on ima **ulogu vlasnika tog tima** i inicijalno **postavlja informacije o naplati**. **Ostali** korisnici mogu biti **pozvani** u tim.

Unutar tima može biti nekoliko **projekata**. Projekat je samo **set usluga koje rade**. Može se koristiti za **razdvajanje različitih faza infrastrukture**, kao što su prod, staging, dev...

### Projekat

Kao što je objašnjeno, projekat je samo kontejner za sve **usluge** (droplete, prostore, baze podataka, kubernetes...) **koje rade zajedno unutar njega**.\
Digital Ocean projekat je vrlo sličan GCP projektu bez IAM-a.

## Dozvole

### Tim

U suštini, svi članovi tima imaju **pristup DO resursima u svim projektima kreiranim unutar tima (sa više ili manje privilegija).**

### Uloge

Svaki **korisnik unutar tima** može imati **jednu** od sledeće tri **uloge** unutar njega:

| Uloga       | Deljeni resursi | Informacije o naplati | Podešavanja tima |
| ----------- | ---------------- | --------------------- | ----------------- |
| **Vlasnik** | Potpun pristup   | Potpun pristup        | Potpun pristup    |
| **Naplata** | Nema pristup     | Potpun pristup        | Nema pristup      |
| **Član**    | Potpun pristup   | Nema pristup          | Nema pristup      |

**Vlasnik** i **član mogu da navedu korisnike** i provere njihove **uloge** (naplata ne može).

## Pristup

### Korisničko ime + lozinka (MFA)

Kao i na većini platformi, da biste pristupili GUI-u, možete koristiti set **važećeg korisničkog imena i lozinke** za **pristup** cloud **resursima**. Kada se prijavite, možete videti **sve timove kojima pripadate** na [https://cloud.digitalocean.com/account/profile](https://cloud.digitalocean.com/account/profile).\
I možete videti sve svoje aktivnosti na [https://cloud.digitalocean.com/account/activity](https://cloud.digitalocean.com/account/activity).

**MFA** može biti **omogućena** za korisnika i **nametnuta** za sve korisnike u **timu** da pristupe timu.

### API ključevi

Da bi koristili API, korisnici mogu **generisati API ključeve**. Ovi ključevi će uvek imati Read dozvole, ali **Write dozvole su opcione**.\
API ključevi izgledaju ovako:
```
dop_v1_1946a92309d6240274519275875bb3cb03c1695f60d47eaa1532916502361836
```
Alat za komandnu liniju je [**doctl**](https://github.com/digitalocean/doctl#installing-doctl). Inicijalizujte ga (potreban vam je token) sa:
```bash
doctl auth init # Asks for the token
doctl auth init --context my-context # Login with a different token
doctl auth list # List accounts
```
Podrazumevano, ovaj token će biti zapisan u čistom tekstu na Mac-u u `/Users/<username>/Library/Application Support/doctl/config.yaml`.

### Ključevi za pristup Spaces

Ovo su ključevi koji daju **pristup Spaces** (kao S3 u AWS-u ili Storage u GCP-u).

Sastoje se od **imena**, **keyid** i **secret**. Primer bi mogao biti:
```
Name: key-example
Keyid: DO00ZW4FABSGZHAABGFX
Secret: 2JJ0CcQZ56qeFzAJ5GFUeeR4Dckarsh6EQSLm87MKlM
```
### OAuth aplikacija

OAuth aplikacije mogu dobiti **pristup preko Digital Ocean**.

Moguće je **napraviti OAuth aplikacije** na [https://cloud.digitalocean.com/account/api/applications](https://cloud.digitalocean.com/account/api/applications) i proveriti sve **dozvoljene OAuth aplikacije** na [https://cloud.digitalocean.com/account/api/access](https://cloud.digitalocean.com/account/api/access).

### SSH ključevi

Moguće je dodati **SSH ključeve u Digital Ocean tim** iz **konsole** na [https://cloud.digitalocean.com/account/security](https://cloud.digitalocean.com/account/security).

Na ovaj način, ako kreirate **novi droplet, SSH ključ će biti postavljen** na njemu i moći ćete da **se prijavite putem SSH** bez lozinke (napomena da novouploadovani [SSH ključevi nisu postavljeni na već postojeće droplete iz bezbednosnih razloga](https://docs.digitalocean.com/products/droplets/how-to/add-ssh-keys/to-existing-droplet/)).

### Token za autentifikaciju funkcija

Način **da se pokrene funkcija putem REST API** (uvek omogućen, to je metoda koju koristi cli) je slanjem zahteva sa **tokenom za autentifikaciju** kao:
```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="
```
## Logovi

### Logovi korisnika

**Logovi korisnika** mogu se pronaći na [**https://cloud.digitalocean.com/account/activity**](https://cloud.digitalocean.com/account/activity)

### Logovi tima

**Logovi tima** mogu se pronaći na [**https://cloud.digitalocean.com/account/security**](https://cloud.digitalocean.com/account/security)

## Reference

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