# DO - Información Básica {{#include ../../banners/hacktricks-training.md}} ## Información Básica DigitalOcean es una **plataforma de computación en la nube que proporciona a los usuarios una variedad de servicios**, incluyendo servidores privados virtuales (VPS) y otros recursos para construir, desplegar y gestionar aplicaciones. **Los servicios de DigitalOcean están diseñados para ser simples y fáciles de usar**, lo que los hace **populares entre desarrolladores y pequeñas empresas**. Algunas de las características clave de DigitalOcean incluyen: - **Servidores privados virtuales (VPS)**: DigitalOcean proporciona VPS que pueden ser utilizados para alojar sitios web y aplicaciones. Estos VPS son conocidos por su simplicidad y facilidad de uso, y pueden ser desplegados rápida y fácilmente utilizando una variedad de "droplets" preconstruidos o configuraciones personalizadas. - **Almacenamiento**: DigitalOcean ofrece una gama de opciones de almacenamiento, incluyendo almacenamiento de objetos, almacenamiento en bloque y bases de datos gestionadas, que pueden ser utilizados para almacenar y gestionar datos para sitios web y aplicaciones. - **Herramientas de desarrollo y despliegue**: DigitalOcean proporciona una variedad de herramientas que pueden ser utilizadas para construir, desplegar y gestionar aplicaciones, incluyendo APIs y droplets preconstruidos. - **Seguridad**: DigitalOcean pone un fuerte énfasis en la seguridad y ofrece una gama de herramientas y características para ayudar a los usuarios a mantener sus datos y aplicaciones seguros. Esto incluye cifrado, copias de seguridad y otras medidas de seguridad. En general, DigitalOcean es una plataforma de computación en la nube que proporciona a los usuarios las herramientas y recursos que necesitan para construir, desplegar y gestionar aplicaciones en la nube. Sus servicios están diseñados para ser simples y fáciles de usar, lo que los hace populares entre desarrolladores y pequeñas empresas. ### Principales Diferencias con AWS Una de las principales diferencias entre DigitalOcean y AWS es la **gama de servicios que ofrecen**. **DigitalOcean se centra en proporcionar servidores privados virtuales (VPS)** simples y fáciles de usar, almacenamiento y herramientas de desarrollo y despliegue. **AWS**, por otro lado, ofrece una **gama de servicios mucho más amplia**, incluyendo VPS, almacenamiento, bases de datos, aprendizaje automático, análisis y muchos otros servicios. Esto significa que AWS es más adecuado para aplicaciones complejas a nivel empresarial, mientras que DigitalOcean es más adecuado para pequeñas empresas y desarrolladores. Otra diferencia clave entre las dos plataformas es la **estructura de precios**. **Los precios de DigitalOcean son generalmente más sencillos y fáciles** de entender que los de AWS, con una variedad de planes de precios basados en el número de droplets y otros recursos utilizados. AWS, por otro lado, tiene una estructura de precios más compleja que se basa en una variedad de factores, incluyendo el tipo y la cantidad de recursos utilizados. Esto puede dificultar la predicción de costos al usar AWS. ## Jerarquía ### Usuario Un usuario es lo que esperas, un usuario. Puede **crear Equipos** y **ser miembro de diferentes equipos.** ### **Equipo** Un equipo es un grupo de **usuarios**. Cuando un usuario crea un equipo, tiene el **rol de propietario en ese equipo** y inicialmente **configura la información de facturación**. **Otros** usuarios pueden ser **invitados** al equipo. Dentro del equipo puede haber varios **proyectos**. Un proyecto es solo un **conjunto de servicios en ejecución**. Puede ser utilizado para **separar diferentes etapas de infraestructura**, como producción, staging, desarrollo... ### Proyecto Como se explicó, un proyecto es solo un contenedor para todos los **servicios** (droplets, espacios, bases de datos, kubernetes...) **que se ejecutan juntos dentro de él**.\ Un proyecto de Digital Ocean es muy similar a un proyecto de GCP sin IAM. ## Permisos ### Equipo Básicamente, todos los miembros de un equipo tienen **acceso a los recursos de DO en todos los proyectos creados dentro del equipo (con más o menos privilegios).** ### Roles Cada **usuario dentro de un equipo** puede tener **uno** de los siguientes tres **roles** dentro de él: | Rol | Recursos Compartidos | Información de Facturación | Configuración del Equipo | | ---------- | ---------------- | ------------------- | ------------- | | **Propietario** | Acceso total | Acceso total | Acceso total | | **Facturador** | Sin acceso | Acceso total | Sin acceso | | **Miembro** | Acceso total | Sin acceso | Sin acceso | **El propietario** y **el miembro pueden listar los usuarios** y verificar sus **roles** (el facturador no puede). ## Acceso ### Nombre de usuario + contraseña (MFA) Como en la mayoría de las plataformas, para acceder a la GUI puedes usar un conjunto de **nombre de usuario y contraseña válidos** para **acceder** a los **recursos** de la nube. Una vez que inicies sesión, puedes ver **todos los equipos de los que eres parte** en [https://cloud.digitalocean.com/account/profile](https://cloud.digitalocean.com/account/profile).\ Y puedes ver toda tu actividad en [https://cloud.digitalocean.com/account/activity](https://cloud.digitalocean.com/account/activity). **MFA** puede ser **habilitado** en un usuario y **exigido** para todos los usuarios en un **equipo** para acceder al equipo. ### Claves API Para utilizar la API, los usuarios pueden **generar claves API**. Estas siempre vendrán con permisos de lectura, pero **los permisos de escritura son opcionales**.\ Las claves API se ven así: ``` dop_v1_1946a92309d6240274519275875bb3cb03c1695f60d47eaa1532916502361836 ``` La herramienta de línea de comandos es [**doctl**](https://github.com/digitalocean/doctl#installing-doctl). Inicialízala (necesitas 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 ``` Por defecto, este token se escribirá en texto claro en Mac en `/Users//Library/Application Support/doctl/config.yaml`. ### Claves de acceso a Spaces Estas son claves que dan **acceso a los Spaces** (como S3 en AWS o Storage en GCP). Se componen de un **nombre**, un **keyid** y un **secret**. Un ejemplo podría ser: ``` Name: key-example Keyid: DO00ZW4FABSGZHAABGFX Secret: 2JJ0CcQZ56qeFzAJ5GFUeeR4Dckarsh6EQSLm87MKlM ``` ### Aplicación OAuth Las aplicaciones OAuth pueden recibir **acceso a Digital Ocean**. Es posible **crear aplicaciones OAuth** en [https://cloud.digitalocean.com/account/api/applications](https://cloud.digitalocean.com/account/api/applications) y verificar todas las **aplicaciones OAuth permitidas** en [https://cloud.digitalocean.com/account/api/access](https://cloud.digitalocean.com/account/api/access). ### Claves SSH Es posible agregar **claves SSH a un equipo de Digital Ocean** desde la **consola** en [https://cloud.digitalocean.com/account/security](https://cloud.digitalocean.com/account/security). De esta manera, si creas un **nuevo droplet, la clave SSH se configurará** en él y podrás **iniciar sesión a través de SSH** sin contraseña (ten en cuenta que las [claves SSH recién subidas no se configuran en droplets ya existentes por razones de seguridad](https://docs.digitalocean.com/products/droplets/how-to/add-ssh-keys/to-existing-droplet/)). ### Token de Autenticación de Funciones La forma de **activar una función a través de REST API** (siempre habilitado, es el método que utiliza el cli) es activando una solicitud con un **token de autenticación** como: ```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=" ``` ## Registros ### Registros de usuario Los **registros de un usuario** se pueden encontrar en [**https://cloud.digitalocean.com/account/activity**](https://cloud.digitalocean.com/account/activity) ### Registros de equipo Los **registros de un equipo** se pueden encontrar en [**https://cloud.digitalocean.com/account/security**](https://cloud.digitalocean.com/account/security) ## Referencias - [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}}