diff --git "a/Notes/AdministracionServidoresLinux/Administraci\303\263n-de-servidores-Linux.md" "b/Notes/AdministracionServidoresLinux/Administraci\303\263n-de-servidores-Linux.md" deleted file mode 100644 index 02a62db..0000000 --- "a/Notes/AdministracionServidoresLinux/Administraci\303\263n-de-servidores-Linux.md" +++ /dev/null @@ -1,34 +0,0 @@ -# 1. Administración de servidores Linux - -Es recomendable siempre usar versiones Long Term Support(LTS), pues -cuenta con 10 años de soporte, tanto para CentOS, como para Ubuntu -Server. - -Ubuntu Server es la versión más popular de distribución de GNU/Linux, de -acuerdo a las estadísticas de w3tech. - - -[comment]:STARTING_GENERATED_TOC - -* [1.1-Terminales-de-GNULinux](<./content/1.1-Terminales-de-GNULinux.md>) -* [1.2-Manejo-de-redes](<./content/1.2-Manejo-de-redes.md>) -* [1.3-Administración-de-paquetes](<./content/1.3-Administración-de-paquetes.md>) -* [1.4-Descomprimir-archivos](<./content/1.4-Descomprimir-archivos.md>) -* [1.5-Trabajando-con-usuarios](<./content/1.5-Trabajando-con-usuarios.md>) -* [1.6-grupos](<./content/1.6-grupos.md>) -* [1.7-PAM](<./content/1.7-PAM.md>) -* [1.8-SSH](<./content/1.8-SSH.md>) -* [1.9-Configurando-DNS-con-bind](<./content/1.9-Configurando-DNS-con-bind.md>) -* [1.10-Arranque-detención-y-recarga-de-servicios](<./content/1.10-Arranque-detención-y-recarga-de-servicios.md>) -* [1.11-Configuración-de-Nginx](<./content/1.11-Configuración-de-Nginx.md>) -* [1.12-MySQL-con-Nagios](<./content/1.12-MySQL-con-Nagios.md>) -* [1.13-Manejo-de-logs](<./content/1.13-Manejo-de-logs.md>) -* [1.14-awk](<./content/1.14-awk.md>) -* [1.15-Otros-servicios](<./content/1.15-Otros-servicios.md>) -* [1.16-Bash](<./content/1.16-Bash.md>) -* [1.17-Variables-de-entorno](<./content/1.17-Variables-de-entorno.md>) -* [1.18-Vulnerabilidades-en-el-servidor](<./content/1.18-Vulnerabilidades-en-el-servidor.md>) -* [1.19-Lynis](<./content/1.19-Lynis.md>) -* [1.20-ComandosUtiles](<./content/1.20-ComandosUtiles.md>) - -[comment]:ENDING_GENERATED_TOC \ No newline at end of file diff --git a/Notes/AdministracionServidoresLinux/content/1.1-Terminales-de-GNULinux.md b/Notes/AdministracionServidoresLinux/content/1.1-Terminales-de-GNULinux.md deleted file mode 100644 index 916d455..0000000 --- a/Notes/AdministracionServidoresLinux/content/1.1-Terminales-de-GNULinux.md +++ /dev/null @@ -1,52 +0,0 @@ -## 1.1 Terminales de GNU/Linux - -Las consolas físicas tienen una terminación de tty1 hasta tty6. Cada -usuario activo en nuestro sistema operativo crea una nueva conexión. -Podemos ver todas estas. Para verlas usamos el comando w o who. Es -recomendable matar aquellas que no estamos usando. - -### 1.1.1 chvt - -Se encarga de cambiar la terminal. - -Para matar las consolas usamos el siguiente comando: - -``` bash -ps -ft tty0 -``` - -### 1.1.2 sort - -El comando sort nos permite ordenar un output por una llave específica. - -El flag -n compara según el número, el flag -r los invierte y el flag -k -sirve para indicar la llave. - -Siendo las keys la columna respectiva - -``` bash -# ps auxf -# USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND -sort -n -k 2 # Ordena según la columna 2 -``` - -### 1.1.3 Conocer el número de procesadores - -Para mirar el número de procesadores usamos - -``` bash -cat /proc/cpuinfo | grep "processor" -``` - -Muestra los 5 procesos que más consumen CPU - -``` bash -sudo ps auxf | sort -nr -k 3 | head -5 -``` - -Muestra los 5 procesos que usan más RAM - -``` bash -sudo ps auxf | sort -nr -k 4 | head -5 -``` - diff --git "a/Notes/AdministracionServidoresLinux/content/1.10-Arranque-detenci\303\263n-y-recarga-de-servicios.md" "b/Notes/AdministracionServidoresLinux/content/1.10-Arranque-detenci\303\263n-y-recarga-de-servicios.md" deleted file mode 100644 index a0e00ad..0000000 --- "a/Notes/AdministracionServidoresLinux/content/1.10-Arranque-detenci\303\263n-y-recarga-de-servicios.md" +++ /dev/null @@ -1,97 +0,0 @@ -## 1.10 Arranque, detención y recarga de servicios - -Systemd se encarga de la gestión de todos los servicios, los comandos -más comunes son: - -Verificar el estado de un servicio usamos - -``` bash -sudo systemctl status -``` - -Para que un servicio cargue al iniciar el sistema - -``` bash -sudo systemctl enable -``` - -Para remover un servicio del arranque del sistema - -``` bash -sudo systemctl disable -``` - -Iniciar un servicio - -``` bash -sudo systemctl start -``` - -Detener un servicio - -``` bash -sudo systemctl stop -``` - -Reiniciar un servicio - -``` bash -sudo systemctl restart -``` - -Para listar los servicios del sistema - -``` bash -sudo systemctl list-units -t --all -``` - -si queremos ver los logs de un servicio. La -f es para realizar un -follow, escuchará cambios en los logs. - -``` bash -sudo journalctl -fu -``` - -Muestra cuanto pesan los logs en el sistema operativo. - -``` bash -sudo journalctl --disk-usage -``` - -Muestra los reinicios del ordenador - -``` bash -sudo journalctl --list-boots -``` - -Muestra los mensajes que corresponden con determinada categoría - -``` bash -sudo journalctl -p critic|notice|info|warning|error -``` - -Es posible obtener los logs en formato JSON con - -``` bash -sudo journalctl -o json -``` - -Para recargar los archivos de configuración de un servicio sin -reiniciarlo - -``` bash -sudo systemctl reload -``` - -Para reducir el tamaño de los logs cierta cantidad - -``` bash -sudo journalctl --vacuum-size=100M -``` - -Para reducir el tamaño de los logs a cierta cantidad de días - -``` bash -sudo journalctl --vacuum-time=2days -``` - diff --git "a/Notes/AdministracionServidoresLinux/content/1.11-Configuraci\303\263n-de-Nginx.md" "b/Notes/AdministracionServidoresLinux/content/1.11-Configuraci\303\263n-de-Nginx.md" deleted file mode 100644 index 22aa985..0000000 --- "a/Notes/AdministracionServidoresLinux/content/1.11-Configuraci\303\263n-de-Nginx.md" +++ /dev/null @@ -1,47 +0,0 @@ -## 1.11 Configuración de Nginx - -Para instalar nginx con sus extras usamos - -``` bash -sudo apt install nginx nginx-extras -``` - -### 1.11.1 Nginx amplify - -NGINX Amplify es una herramienta que sirve para monitorear el servidor, -parámetros del sistema operativo, bases de datos, etc - -Para activarlo vamos a modificar el directorio conf.d de nginx que suele -estar en /etc/nginx, para agregar un archivo nuevo. - -``` bash -sudo cat > conf.d/stub_status.conf -server{ - listen 127.0.0.1:80; - server_name 127.0.0.1; - location /nginx_status { - stub_status on; - allow 127.0.0.1; - deny all; - } -} -``` - -Seguir las [instrucciones de instalación](https://amplify.nginx.com/) y -posteriormente - -A continuación reiniciamos el servicio de nginx y lo habilitamos. - -``` bash -sudo systemctl restart nginx && systemctl enable nginx -``` - -Tras reiniciar nginx activamos el servicio de nginx amplify eligiendo la -opción start. - -``` bash -service amplify-agent -``` - -Una vez hecho lo anterior amplify-agent estará ejecutándose. - diff --git a/Notes/AdministracionServidoresLinux/content/1.12-MySQL-con-Nagios.md b/Notes/AdministracionServidoresLinux/content/1.12-MySQL-con-Nagios.md deleted file mode 100644 index cb9dd44..0000000 --- a/Notes/AdministracionServidoresLinux/content/1.12-MySQL-con-Nagios.md +++ /dev/null @@ -1,123 +0,0 @@ -## 1.12 MySQL con Nagios - -Nagios es un sistema de monitorización de redes, de código abierto, que -revisa el rendimiento de los equipos y servicios. - -Primero instalamos MySQL - -``` bash -sudo apt install mysql-server -``` - -Obtenemos el password de MySQL - -``` bash -sudo vim /etc/mysql/debian.conf -# ... -# user = -# password = -``` - -Para inciar sesión usamos los datos del comando anterior. Usamos la -opción -p para que el password no quede guardado en el historial de -comandos. - -``` bash -mysql -y -p -``` - -Reforzamos la seguridad del server de la base de datos con el comando -interactivo. - -``` bash -sudo mysql_secure_installation -``` - -### 1.12.1 Nagios - -Instalamos los paquetes - -``` bash -sudo apt install -y libmcrypt-dev make libssl-dev bc gawk dc build-essential snmp libnet-snmp-perl gettext -wget https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz -0 plugins.tar.gz -O plugins.tar.gz -``` - -Configuramos - -``` bash -sudo ./configure -``` - -Verificamos la ausencia de errores - -``` bash -sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg -``` - -Y una vez que nos aseguremos reiniciamos nagios. - -``` bash -sudo systemctl restart nagios -``` - -Neceistamos descargar el plugin de MySQL en el Home. - -``` bash -wget https://labs.consol.de/assets/downloads/nagios/check_mysql_health-2.2.2.tar.gz -O mysqlplugin.tar.gz -``` - -Y posteriormente desempaquetarlo - -``` bash -tar -xzvf mysqlplugin.tar.gz -``` - -Creamos un usuario para ingresar en nagios - -``` bash -sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin -``` - -Nagios estará disponible en nuestro navegador web - -``` bash -:8080/nagios -``` - -### 1.12.2 Configuración en base de datos - -``` bash -grant select on *.* to ''@'' identified by '' -``` - -Ahora agregamos la siguiente linea dentro de /usr/local/nagios o -/etc/nagios.cfg - -``` bash -cfg_file=/usr/local/nagios/etc/objects/mysqlmonitoring.cfg -``` - -### 1.12.3 Creación de comandos para nagios - -Dentro de la ruta /usr/local/nagios/etc/objects/commands.cfg, agregamos - -``` bash -define command { - command_name check_mysql_health - command_line $USER1$/check_mysql_health -H $ARG4$ --username $ARG1$ --password $ARG2$ --port $ARG5$ --mode $ARG3$ -} -``` - -Por último, creamos el archivo cfg_file que declaramos en el archivo -nagios.cfg de la configuración. Su ubicación será la ruta -/usr/local/nagios/etc/objects/mysqlmonitoring.cfg - -``` bash -define service { - use local-service - host_name localhost - service_description MySQL connection-time - check_command check_mysql_health!nagios!*!connection-time!127.0.0.1!3306! -} -``` - diff --git a/Notes/AdministracionServidoresLinux/content/1.13-Manejo-de-logs.md b/Notes/AdministracionServidoresLinux/content/1.13-Manejo-de-logs.md deleted file mode 100644 index 97bf200..0000000 --- a/Notes/AdministracionServidoresLinux/content/1.13-Manejo-de-logs.md +++ /dev/null @@ -1,18 +0,0 @@ -## 1.13 Manejo de logs - -Hay varios comandos útiles para manejar logs - -El comando siguiente encontrará todos los archivos que terminen en -".log", insensible a mayúsculas y minúsculas. - -``` bash -find /var/log/ -iname "*.log" -type f -``` - -Para encontrar los logs que tuvieron salidas de error en los últimos -minutos. El 2 en el comando indica el output para STDERR - -``` bash -sudo find /etc/ -mtime 2 -``` - diff --git a/Notes/AdministracionServidoresLinux/content/1.14-awk.md b/Notes/AdministracionServidoresLinux/content/1.14-awk.md deleted file mode 100644 index bd1e885..0000000 --- a/Notes/AdministracionServidoresLinux/content/1.14-awk.md +++ /dev/null @@ -1,81 +0,0 @@ -## 1.14 awk - -awk es un comando que recibe patrones y nos permite condicionales y flujos de información, como si fuera un lenguaje de programación. -Awk muy usado para visualizar los de una manera atractiva. - -Nos permite hacer referencia a las columnas con el simbolo "$", seguido del número de columna: - -```bash -$ -``` - -### 1.14.1 print con awk - -Por ejemplo: - -``` bash -awk '{print $num_columna} ' -``` - -También podemos usar otro delimitador en lugar de los espacios - -``` bash -awk -F "" '{print $num_columna}' -``` - -O imprimir múltiples columnas - -``` bash -awk -F "" '{print $num_columna $num_columna $num_columna}' -``` - -También recibe expresiones regulares - -``` bash -awk '/^\/dev\/sda5/ {print}' -``` - -O aquellas que son más largas de cierta longitud - -``` bash -awk ' length($0) > {print length} ' -``` - -Para ver las IP conectadas a nuestro servidor usamos - -O solo determinadas lineas - -``` bash -awk 'NR==2, NR==4 {print $0}' -``` - -### 1.14.2 condicionales con awk - -También podemos usar condicionales. - -``` bash -awk '{if ($1=="") { - print $2 -} else { print $1 } -}' -``` - -### 1.14.3 Mirando los logs de ngnix con awk - -Sabiendo que los logs de nginx se localizan en la ruta /var/log/nginx/, -podemos visualizarlos de manera más amigable usando el comando awk. - -``` bash -sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr -# 534 159.65.103.143 -# 103 187.158.4.52 -``` - -Para ver los códigos en nuestro servidor. - -``` bash -sudo awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr -# 4427 200 -# 211 301 -``` - diff --git a/Notes/AdministracionServidoresLinux/content/1.15-Otros-servicios.md b/Notes/AdministracionServidoresLinux/content/1.15-Otros-servicios.md deleted file mode 100644 index 0f5769f..0000000 --- a/Notes/AdministracionServidoresLinux/content/1.15-Otros-servicios.md +++ /dev/null @@ -1,24 +0,0 @@ -## 1.15 Otros servicios - -### 1.15.1 Collectd - -Genera reportes en web del rendimiento. - -### 1.15.2 Nmon - -Obtiene visualizaciones rápidas del sistema. Guardar archivos en formato -nmon que se pueden convertir a html - -### 1.15.3 Munin - -Analiza el rendimiento del servidor con gráficos históricos - -### 1.15.4 Grafana - -Visualiza alerta y entiende las métricas del negocio sin portar su -ubicación. - -### 1.15.5 Pandora - -Recomendado por la comunidad con una versión community. - diff --git a/Notes/AdministracionServidoresLinux/content/1.16-Bash.md b/Notes/AdministracionServidoresLinux/content/1.16-Bash.md deleted file mode 100644 index 0f22383..0000000 --- a/Notes/AdministracionServidoresLinux/content/1.16-Bash.md +++ /dev/null @@ -1,32 +0,0 @@ -## 1.16 Bash - -Es una shell de UNIX y el intérprete de comandos por defecto en la -mayoría de distribuciónes GNU/Linux. Se pueden crear scripts que, por -convención, terminan con .sh - -### 1.16.1 Cabecera - -Para indicarle a GNU/Linux que un script se use con bash usamos - -``` bash -#!/bin/bash -``` - -Para definir una variable usamos el operador = - -``` bash -VARIABLE = "variable" -``` - -Para imprimirlas usamos echo - -``` bash -echo $VARIABLE -``` - -Mientras que los comentarios usan el caracter hashtag o numeral - -``` bash -# Este es un comentario -``` - diff --git a/Notes/AdministracionServidoresLinux/content/1.17-Variables-de-entorno.md b/Notes/AdministracionServidoresLinux/content/1.17-Variables-de-entorno.md deleted file mode 100644 index 30fe82a..0000000 --- a/Notes/AdministracionServidoresLinux/content/1.17-Variables-de-entorno.md +++ /dev/null @@ -1,20 +0,0 @@ -## 1.17 Variables de entorno - -Para mirar todas las variables que están disponibles usamos el comando -*env* - -``` bash -env -``` - -### 1.17.1 Variable $PATH - -La variable PATH le indica que a GNU/Linux donde debe buscar los -binarios para ejecutar. - -Para extender el PATH usamos - -``` bash -export PATH=$PATH:~/otra/ruta -``` - diff --git a/Notes/AdministracionServidoresLinux/content/1.18-Vulnerabilidades-en-el-servidor.md b/Notes/AdministracionServidoresLinux/content/1.18-Vulnerabilidades-en-el-servidor.md deleted file mode 100644 index 8fdacda..0000000 --- a/Notes/AdministracionServidoresLinux/content/1.18-Vulnerabilidades-en-el-servidor.md +++ /dev/null @@ -1,120 +0,0 @@ -## 1.18 Vulnerabilidades en el servidor - -### 1.18.1 Buenas prácticas - -Hay buenas prácticas a realizar - -- desactivar el usuario root -- Evitar login con usuario y password -- Validar la versión de software usada -- User telnet -- Identificar los servicios y puertos abiertos -- Asignarle los permisos mínimos a los usuarios - -### 1.18.2 Mantener actualizado el servidor - -En sistemas basados en RedHat - -``` bash -yum check-update --security -yum update security -``` - -En sistemas basados en debian - -``` bash -sudo apt update -sudo apt upgrade -``` - -### 1.18.3 Principio del menor privilegio - -La superficie de ataque es el conjunto de datos conocidos o -vulnerabilidades. - -Existen algunas soluciones para manejar las vulnerabilidades - -- Lynis - -### 1.18.4 Frameworks de seguridad - -Existen organizaciones encargadas de la seguridad. - -- SCAP, conjunto de reglas para la información relacionada con - configuraciones y fallos -- OWASP, proyecto destinado a pelear contra la inseguridad - informática. - -### 1.18.5 Implementación de firewall - -ufw es un software que ya viene instalado por defecto en sistemas -ubuntu. - -Generalmente para web se dejan abiertos únicamente los puertos 80, 443 y -22, que corresponden a HTTP, HTTPS y SSH, respectivamente. - -#### 1.18.5.1 Uso de ufw - -El nombre del comando ufw viene de Uncomplicated Firewall. -Muestra el estado (activo/inactivo) y las reglas del firewall. - -``` bash -sudo ufw status -``` - -Con el modificador numbered me muestra las reglas numeradas. - -``` bash -sudo ufw status numbered -``` - -Para habilitar un puerto usamos allow - -``` bash -sudo ufw allow -``` - -Si queremos encender el firewall usamos enable - -``` bash -sudo ufw enable -``` - -Para ver borrar un número de regla - -``` bash -sudo ufw delete -``` - -Para permitir la conexión de ciertas direcciones ip - -``` bash -sudo ufw allow from proto to any port comment -``` - -Tip: Recuerda que ssh usa el protocolo tcp - -Si queremos eliminar todas las reglas - -``` bash -sudo ufw reset -``` - -### 1.18.6 Escaneo de puertos con nmap - -Nmap es una herramienta que se encuentra de manera nativa en Kali Linux, -usada para auditorias web. - -``` bash -nmap -sV -sC -O -oA -``` - -Donde: - -- -sV Muestra información de los puertos abiertos -- -sC Habilita el uso de Scripts -- -O Detección de OS -- -p Escanea todos los puertos -- -oA Detecta la salida a un archivo -- -Pn Para - diff --git a/Notes/AdministracionServidoresLinux/content/1.19-Lynis.md b/Notes/AdministracionServidoresLinux/content/1.19-Lynis.md deleted file mode 100644 index da108c2..0000000 --- a/Notes/AdministracionServidoresLinux/content/1.19-Lynis.md +++ /dev/null @@ -1,25 +0,0 @@ -## 1.19 Lynis - -Es una herramienta de auditoria y seguridad, para endurecer servidores -GNU/Linux. - -Lynis se instala con: - -``` bash -sudo apt install lynis -``` - -Y para usarlo basta con correr el comando - -``` bash -sudo lynis audit system -# [+] Users, Groups and Authentication -#- Administrator accounts [ OK ] -#- Unique UIDs [ OK ] -#- ... -``` - -Lynis nos hará recomendaciones respecto a nuestro sistema. - -Emite un reporte muy completo con una checklist de las medidas y -recomendaciones a tomar en cuenta. diff --git a/Notes/AdministracionServidoresLinux/content/1.2-Manejo-de-redes.md b/Notes/AdministracionServidoresLinux/content/1.2-Manejo-de-redes.md deleted file mode 100644 index f931cc9..0000000 --- a/Notes/AdministracionServidoresLinux/content/1.2-Manejo-de-redes.md +++ /dev/null @@ -1,63 +0,0 @@ -## 1.2 Manejo de redes - -Las IPs privadas se usan para identificar los dispositivos en una red -local, mientras que las públicas son para identificar cualquier -dispositivo conectado a internet. - -Para mirar las direcciones usamos - -``` bash -ip a -``` - -Podemos filtrar las direcciones ipv4 con - -``` bash -ip -4 a -``` - -Mientras que para las direcciones ipv6 - -``` bash -ip -6 a -``` - -Para ver la identificación del equipo usamos - -``` bash -hostname -``` - -Y para ver las direcciones IP asignadas - -``` bash -hostname -I -``` - -### 1.2.1 nslookup - -Para ver las direcciones IP usamos nslookup, y sirve para internet o -para las redes locales - -``` bash -nslookup google.com -``` - -Y esto nos arrojará la información pertinente - -### 1.2.2 curl - -Para realizar peticiones http - -``` bash -curl localhost:8000 -``` - -### 1.2.3 wget - -Para descargar archivos de internet - -``` bash -wget https://example.org -``` - diff --git a/Notes/AdministracionServidoresLinux/content/1.20-ComandosUtiles.md b/Notes/AdministracionServidoresLinux/content/1.20-ComandosUtiles.md deleted file mode 100644 index 8e215c4..0000000 --- a/Notes/AdministracionServidoresLinux/content/1.20-ComandosUtiles.md +++ /dev/null @@ -1,49 +0,0 @@ -## 1.20 Comandos útiles - -### compgen - -El comando *compgen* se encarga de mostrarnos todos los comandos y keywords disponibles para el usuario activo. - -```bash -compgen -c -``` - -### listar paquetes con dpkg - -Lista todos los paquetes en sistemas Debian - -```bash -dpkg -l -``` - -### Vaciado de memoria con procdump - -Nos muestra comandos un picos de CPU para el monitoreo de un proceso. - -```bash -procdump -o -p -``` - -También puedes usar el nombre del a imagen - -```bash -procdump -w -``` - -### Fingir ser root con fakeroot - -Permite ejecutar comandos falseando el UID y el GID para que sean 0. Esto no te vuelve root, solo engaña a ciertos programas para que crean que lo eres, sin embargo el kernel tiene la última palabra. - -El comando *fakeroot* es util para empaquetar y compilar software que requiere al usuario root sin tener que acceder a este último. - -```bash -fakeroot -``` - -### Estadísticas de sockets con ss - -El comando ss nos muestra estadísticas de sockets abiertos. - -```bash -ss -``` diff --git "a/Notes/AdministracionServidoresLinux/content/1.3-Administraci\303\263n-de-paquetes.md" "b/Notes/AdministracionServidoresLinux/content/1.3-Administraci\303\263n-de-paquetes.md" deleted file mode 100644 index ce88713..0000000 --- "a/Notes/AdministracionServidoresLinux/content/1.3-Administraci\303\263n-de-paquetes.md" +++ /dev/null @@ -1,99 +0,0 @@ -## 1.3 Administración de paquetes - -### 1.3.1 RedHat/CentOS/Fedora - -Su gestor de paquetes es rpm. Su base de datos está en /var/lib/rpm - -Para listar todos los paquetes - -``` bash -rpm -qa -``` - -#### 1.3.1.1 Instalación de paquetes rpm - -Para instalar y remover paquetes utilizamos - -``` bash -rpm -i -rpm -e -``` - -Para ver todos los paquetes instalados - -``` bash -rpm -qa -``` - -Para ver la información de un paquete - -``` bash -rpm -qi -``` - -Para ver la configuración de un paquete - -``` bash -rpm -qc -``` - -#### 1.3.1.2 yum - -Yum nos permite instalar o buscar el nombre del paquete. Es el -equivalente de apt en Debian. - -``` bash -yum install nombre-del-paquete -yum search nombre-del-paquete -``` - -### 1.3.2 Debian - -Su administración de paquetes es con .deb - -#### 1.3.2.1 dpkg - -para instalar un paquete usamos el comando dpkg - -``` bash -dpkg -i nombre-del-paquete-deb -``` - -Su base de datos está disponible en /var/lin/dpkg - -Para listar sus paquetes instalados usamos - -``` bash -dpkg -l -``` - -Para eliminar un paquete - -``` bash -dpkg -r nombre-del-paquete-deb -``` - -### 1.3.3 apt - -Es el equivalente de yum en red hat. - -#### 1.3.3.1 apt install - -Además, podemos usar apt para manejar los paquetes - -``` bash -apt install -``` - -#### 1.3.3.2 apt update - -Actualiza la información local sobre los repositorios. - -#### 1.3.3.3 apt upgrade - -Actualiza todos los programas que tenemos lados en la máquina. - -#### 1.3.3.4 snap install \ - -Instala un paquete con el nuevo gestor de paquetes de Canonical. - diff --git a/Notes/AdministracionServidoresLinux/content/1.4-Descomprimir-archivos.md b/Notes/AdministracionServidoresLinux/content/1.4-Descomprimir-archivos.md deleted file mode 100644 index 39dab55..0000000 --- a/Notes/AdministracionServidoresLinux/content/1.4-Descomprimir-archivos.md +++ /dev/null @@ -1,16 +0,0 @@ -## 1.4 Descomprimir archivos - -El comando tar se usa para descomprimir, generalmente se usa con las -opcionex xvfz. - -``` bash -tar -xvfz -``` - -Donde las opciones son: - -- x para extraer -- v para verbosidad -- f para indicar el archivo -- z para indicar la desempaquetación - diff --git a/Notes/AdministracionServidoresLinux/content/1.5-Trabajando-con-usuarios.md b/Notes/AdministracionServidoresLinux/content/1.5-Trabajando-con-usuarios.md deleted file mode 100644 index f30ef61..0000000 --- a/Notes/AdministracionServidoresLinux/content/1.5-Trabajando-con-usuarios.md +++ /dev/null @@ -1,70 +0,0 @@ -## 1.5 Trabajando con usuarios - -### 1.5.1 Identificación de usuarios - -El comando id nos muestra el identificador del usuario. En Debian -empiezan a contar desde el número 1000, en Red Hat desde el 500. - -``` bash -id -# uid=1000(eduardo) gid=1000(eduardo) grupos=1000(eduardo),7(lp),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),107(render),109(netdev),115(bluetooth),122(scanner),127(docker),134(lpadmin) -``` - -El comando whoami recupera la informacion de /etc/passwd - -``` bash -whoami -# eduardo -``` - -### 1.5.2 Contraseñas de usuarios - -Las contraseñas, cifradas, de los usuarios se guardan en la ruta -/etc/shadow. Este archivo no debe manipularse de manera directa. - -Para cambiar el password de un usuario usamos el comando passwd, si no -le pasamos ningún usuario, cambiará el password del usuario actual. - -``` bash -passwd -``` - -En versiones más nuevas de Ubuntu el usuario root viene desactivado, -para activarlo se usa el comando passwd sobre el usuario root. - -``` bash -sudo passwd root -``` - -### 1.5.3 Creación de usuarios - -Los usuarios se crean con useradd, es necesario tener los privilegios -necesarios, generalmente se usan - -``` bash -sudo useradd -``` - -### 1.5.4 Eliminación de usuarios - -Para eliminar un usuario se usa: - -``` bash -sudo userdel -``` - -### 1.5.5 Cambio de usuario - -Para cambiar de usuario usamos - -``` bash -su - -``` - -Si tenemos los permisos con sudo (o wheel para CentOS), podemos cambiar -directamente sin conocer la contraseña - -``` bash -sudo su - -``` - diff --git a/Notes/AdministracionServidoresLinux/content/1.6-grupos.md b/Notes/AdministracionServidoresLinux/content/1.6-grupos.md deleted file mode 100644 index 249fa39..0000000 --- a/Notes/AdministracionServidoresLinux/content/1.6-grupos.md +++ /dev/null @@ -1,35 +0,0 @@ -## 1.6 grupos - -Los grupos son útiles para asignar los mismos permisos a una serie de -usuarios al mismo tiempo. - -Para ver los grupos a los que pertenece un ususario - -``` bash -groups -``` - -Para agregar usuarios a un nuevo grupo - -``` bash -sudo gpasswd -a -``` - -Para eliminarlos se usa el mismo comando con el parámetro -d - -``` bash -sudo gpasswd -d -``` - -Otra opción para modificar grupos es con el comando usermod - -``` bash -sudo usermod -aG -``` - -### 1.6.1 Sudo y wheel - -El grupo sudo permite realizar acciones como superusuario en sistemas -basados en debian, mientras que wheel es para sistemas basados en -RedHat, como CentOS. - diff --git a/Notes/AdministracionServidoresLinux/content/1.7-PAM.md b/Notes/AdministracionServidoresLinux/content/1.7-PAM.md deleted file mode 100644 index 0130dcd..0000000 --- a/Notes/AdministracionServidoresLinux/content/1.7-PAM.md +++ /dev/null @@ -1,68 +0,0 @@ -## 1.7 PAM - -PAM es un mecanismo para la administración de usuarios. Permite -autenticar usuarios, controlar la cantidad de procesos que ejecutan cada -uno, validar contraseñas, ver la actividad de los usuarios y otras. - -Pam se encuentra en la ruta /etc/pam.d - -### 1.7.1 pwscore - -Solo disponible en CentOS. Sirve para evaluar un password, verifica que -tenga más de 8 caracteres, la presencia de caracteres especiales y la -presencia en diccionarios. - -``` bash -pwscore -``` - -Para instalarla en sistemas debian es necesario instalar la librería - -``` bash -sudo apt install libpwquality-tools -``` - -### 1.7.2 ulimit - -ulimit nos indica las limitaciones que tiene el usuario en cuanto a -infraestructura, memoria, número de procesadores, etc. - -``` bash -ulimit -a -# Maximum size of core files created (kB, -c) 0 -# Maximum size of a process’s data segment (kB, -d) unlimited -# Maximum size of files created by the shell (kB, -f) unlimited -# Maximum size that may be locked into memory (kB, -l) 1009945 -# Maximum resident set size (kB, -m) unlimited -# Maximum number of open file descriptors (-n) 1024 -# Maximum stack size (kB, -s) 8192 -# Maximum amount of cpu time in seconds (seconds, -t) unlimited -# Maximum number of processes available to a single user (-u) 31264 -# Maximum amount of virtual memory available to the shell (kB, -v) unlimited -``` - -Para modificar los parámetros usamos el flag correspondiente - -``` bash -ulimit -u -``` - -Para limitar el acceso a los usuarios por tiempo modificamos el archivo -/etc/security/time.conf. Dentro de este archivo existen instrucciones -para el manejo de la sintaxis. - -La sintaxis es: - -``` bash -;;; -``` - -Por ejemplo: - -``` bash -*;*;usuario|otro_usuario;Wk0800-1900 -``` - -Donde ponemos Wk para indicar entre semana y luego el horario en formato -miliar. - diff --git a/Notes/AdministracionServidoresLinux/content/1.8-SSH.md b/Notes/AdministracionServidoresLinux/content/1.8-SSH.md deleted file mode 100644 index cba2569..0000000 --- a/Notes/AdministracionServidoresLinux/content/1.8-SSH.md +++ /dev/null @@ -1,61 +0,0 @@ -## 1.8 SSH - -Secure Shell, es un protocolo que permite conectar dos computadoras de -forma remota sin necesidad de un password, por medio de una conexión -segura basada en cifrado RSA. - -Para revisar la configuración de ssh podemos modificar el archivo de -configuración: - -``` bash -sudo vim /etc/ssh/sshd_config -``` - -En este archivo podemos bloquear la autenticación por password y otras -medidas. - -### 1.8.1 Generación de llaves - -Para la generación de llaves se usa - -``` bash -ssh-keygen -``` - -El número de bits por defecto es 2048, en caso de que no se especifique -ninguno. El comando nos indicará la dirección donde se guardarán las -llaves generadas. - -### 1.8.2 Uso de SSH - -Para usar un servidor remoto - -``` bash -ssh @ -``` - -Para copiar la llave pública al servidor - -``` bash -ssh-copy-id -i / @ -``` - -### 1.8.3 Aplicar cambios en SSH - -Para aplicar los cambios reiniciamos el servicio - -``` bash -sudo systemctl restart ssh -``` - -### 1.8.4 Problemas de conexión en ssh - -Para obtener más información del proceso podemos especificar el nivel de -verbosidad, de acuerdo al número de "v" - -``` bash -ssh -v @ -# ... -ssh -vvvv @ -``` - diff --git a/Notes/AdministracionServidoresLinux/content/1.9-Configurando-DNS-con-bind.md b/Notes/AdministracionServidoresLinux/content/1.9-Configurando-DNS-con-bind.md deleted file mode 100644 index 8943403..0000000 --- a/Notes/AdministracionServidoresLinux/content/1.9-Configurando-DNS-con-bind.md +++ /dev/null @@ -1,47 +0,0 @@ -## 1.9 Configurando DNS con bind - -En 1983 se conectaron cerca de 70 sitios a la red de CS. En 1983 se -publicó el RFC 882 que define el servicio de nombre de dominios. -Posteriormente, en octubre de 1984 se crearon 7 TLDs (Dominios de nivel -superior), conocidos como dominios de propósito general .arpa, .com, -.org, .edu, .gov, .mil y la letra de los países respetando su código -ISO. - -### 1.9.1 Instalación de bind - -``` bash -sudo apt install -y bind9 -``` - -Si la instalación funcionó, el puerto 53 estará abierto - -``` bash -netstat -ltn -# tcp 0 0 127...:53 ESCUCHAR -``` - -Y podremos verificar los manuales usando - -``` bash -dpkg -L bind9 -``` - -También podremos ver la versión usando el flag -v. - -``` bash -named -v -``` - -### 1.9.2 Dig - -dig nos permite realizar consultas al dns. Para esto se usará un dominio -y una ubicación - -``` bash -dig www.. @ -``` - -### 1.9.3 Configuración de bind - -El archivo de configuración de bind estará en /etc/bind/named.conf - diff --git a/Notes/AdministracionServidoresLinux/index.md b/Notes/AdministracionServidoresLinux/index.md new file mode 100644 index 0000000..aa4c175 --- /dev/null +++ b/Notes/AdministracionServidoresLinux/index.md @@ -0,0 +1,1158 @@ +# 1. Administración de servidores Linux + +Es recomendable siempre usar versiones Long Term Support(LTS), pues +cuenta con 10 años de soporte, tanto para CentOS, como para Ubuntu +Server. + +Ubuntu Server es la versión más popular de distribución de GNU/Linux, de +acuerdo a las estadísticas de w3tech. + + +## 1.1 Terminales de GNU/Linux + +Las consolas físicas tienen una terminación de tty1 hasta tty6. Cada +usuario activo en nuestro sistema operativo crea una nueva conexión. +Podemos ver todas estas. Para verlas usamos el comando w o who. Es +recomendable matar aquellas que no estamos usando. + +### 1.1.1 chvt + +Se encarga de cambiar la terminal. + +Para matar las consolas usamos el siguiente comando: + +``` bash +ps -ft tty0 +``` + +### 1.1.2 sort + +El comando sort nos permite ordenar un output por una llave específica. + +El flag -n compara según el número, el flag -r los invierte y el flag -k +sirve para indicar la llave. + +Siendo las keys la columna respectiva + +``` bash +# ps auxf +# USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND +sort -n -k 2 # Ordena según la columna 2 +``` + +### 1.1.3 Conocer el número de procesadores + +Para mirar el número de procesadores usamos + +``` bash +cat /proc/cpuinfo | grep "processor" +``` + +Muestra los 5 procesos que más consumen CPU + +``` bash +sudo ps auxf | sort -nr -k 3 | head -5 +``` + +Muestra los 5 procesos que usan más RAM + +``` bash +sudo ps auxf | sort -nr -k 4 | head -5 +``` + +## 1.2 Manejo de redes + +Las IPs privadas se usan para identificar los dispositivos en una red +local, mientras que las públicas son para identificar cualquier +dispositivo conectado a internet. + +Para mirar las direcciones usamos + +``` bash +ip a +``` + +Podemos filtrar las direcciones ipv4 con + +``` bash +ip -4 a +``` + +Mientras que para las direcciones ipv6 + +``` bash +ip -6 a +``` + +Para ver la identificación del equipo usamos + +``` bash +hostname +``` + +Y para ver las direcciones IP asignadas + +``` bash +hostname -I +``` + +### 1.2.1 nslookup + +Para ver las direcciones IP usamos nslookup, y sirve para internet o +para las redes locales + +``` bash +nslookup google.com +``` + +Y esto nos arrojará la información pertinente + +### 1.2.2 curl + +Para realizar peticiones http + +``` bash +curl localhost:8000 +``` + +### 1.2.3 wget + +Para descargar archivos de internet + +``` bash +wget https://example.org +``` + +## 1.3 Administración de paquetes + +### 1.3.1 RedHat/CentOS/Fedora + +Su gestor de paquetes es rpm. Su base de datos está en /var/lib/rpm + +Para listar todos los paquetes + +``` bash +rpm -qa +``` + +#### 1.3.1.1 Instalación de paquetes rpm + +Para instalar y remover paquetes utilizamos + +``` bash +rpm -i +rpm -e +``` + +Para ver todos los paquetes instalados + +``` bash +rpm -qa +``` + +Para ver la información de un paquete + +``` bash +rpm -qi +``` + +Para ver la configuración de un paquete + +``` bash +rpm -qc +``` + +#### 1.3.1.2 yum + +Yum nos permite instalar o buscar el nombre del paquete. Es el +equivalente de apt en Debian. + +``` bash +yum install nombre-del-paquete +yum search nombre-del-paquete +``` + +### 1.3.2 Debian + +Su administración de paquetes es con .deb + +#### 1.3.2.1 dpkg + +para instalar un paquete usamos el comando dpkg + +``` bash +dpkg -i nombre-del-paquete-deb +``` + +Su base de datos está disponible en /var/lin/dpkg + +Para listar sus paquetes instalados usamos + +``` bash +dpkg -l +``` + +Para eliminar un paquete + +``` bash +dpkg -r nombre-del-paquete-deb +``` + +### 1.3.3 apt + +Es el equivalente de yum en red hat. + +#### 1.3.3.1 apt install + +Además, podemos usar apt para manejar los paquetes + +``` bash +apt install +``` + +#### 1.3.3.2 apt update + +Actualiza la información local sobre los repositorios. + +#### 1.3.3.3 apt upgrade + +Actualiza todos los programas que tenemos lados en la máquina. + +#### 1.3.3.4 snap install \ + +Instala un paquete con el nuevo gestor de paquetes de Canonical. + +## 1.4 Descomprimir archivos + +El comando tar se usa para descomprimir, generalmente se usa con las +opcionex xvfz. + +``` bash +tar -xvfz +``` + +Donde las opciones son: + +- x para extraer +- v para verbosidad +- f para indicar el archivo +- z para indicar la desempaquetación + +## 1.5 Trabajando con usuarios + +### 1.5.1 Identificación de usuarios + +El comando id nos muestra el identificador del usuario. En Debian +empiezan a contar desde el número 1000, en Red Hat desde el 500. + +``` bash +id +# uid=1000(eduardo) gid=1000(eduardo) grupos=1000(eduardo),7(lp),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),107(render),109(netdev),115(bluetooth),122(scanner),127(docker),134(lpadmin) +``` + +El comando whoami recupera la informacion de /etc/passwd + +``` bash +whoami +# eduardo +``` + +### 1.5.2 Contraseñas de usuarios + +Las contraseñas, cifradas, de los usuarios se guardan en la ruta +/etc/shadow. Este archivo no debe manipularse de manera directa. + +Para cambiar el password de un usuario usamos el comando passwd, si no +le pasamos ningún usuario, cambiará el password del usuario actual. + +``` bash +passwd +``` + +En versiones más nuevas de Ubuntu el usuario root viene desactivado, +para activarlo se usa el comando passwd sobre el usuario root. + +``` bash +sudo passwd root +``` + +### 1.5.3 Creación de usuarios + +Los usuarios se crean con useradd, es necesario tener los privilegios +necesarios, generalmente se usan + +``` bash +sudo useradd +``` + +### 1.5.4 Eliminación de usuarios + +Para eliminar un usuario se usa: + +``` bash +sudo userdel +``` + +### 1.5.5 Cambio de usuario + +Para cambiar de usuario usamos + +``` bash +su - +``` + +Si tenemos los permisos con sudo (o wheel para CentOS), podemos cambiar +directamente sin conocer la contraseña + +``` bash +sudo su - +``` + +## 1.6 grupos + +Los grupos son útiles para asignar los mismos permisos a una serie de +usuarios al mismo tiempo. + +Para ver los grupos a los que pertenece un ususario + +``` bash +groups +``` + +Para agregar usuarios a un nuevo grupo + +``` bash +sudo gpasswd -a +``` + +Para eliminarlos se usa el mismo comando con el parámetro -d + +``` bash +sudo gpasswd -d +``` + +Otra opción para modificar grupos es con el comando usermod + +``` bash +sudo usermod -aG +``` + +### 1.6.1 Sudo y wheel + +El grupo sudo permite realizar acciones como superusuario en sistemas +basados en debian, mientras que wheel es para sistemas basados en +RedHat, como CentOS. + +## 1.7 PAM + +PAM es un mecanismo para la administración de usuarios. Permite +autenticar usuarios, controlar la cantidad de procesos que ejecutan cada +uno, validar contraseñas, ver la actividad de los usuarios y otras. + +Pam se encuentra en la ruta /etc/pam.d + +### 1.7.1 pwscore + +Solo disponible en CentOS. Sirve para evaluar un password, verifica que +tenga más de 8 caracteres, la presencia de caracteres especiales y la +presencia en diccionarios. + +``` bash +pwscore +``` + +Para instalarla en sistemas debian es necesario instalar la librería + +``` bash +sudo apt install libpwquality-tools +``` + +### 1.7.2 ulimit + +ulimit nos indica las limitaciones que tiene el usuario en cuanto a +infraestructura, memoria, número de procesadores, etc. + +``` bash +ulimit -a +# Maximum size of core files created (kB, -c) 0 +# Maximum size of a process’s data segment (kB, -d) unlimited +# Maximum size of files created by the shell (kB, -f) unlimited +# Maximum size that may be locked into memory (kB, -l) 1009945 +# Maximum resident set size (kB, -m) unlimited +# Maximum number of open file descriptors (-n) 1024 +# Maximum stack size (kB, -s) 8192 +# Maximum amount of cpu time in seconds (seconds, -t) unlimited +# Maximum number of processes available to a single user (-u) 31264 +# Maximum amount of virtual memory available to the shell (kB, -v) unlimited +``` + +Para modificar los parámetros usamos el flag correspondiente + +``` bash +ulimit -u +``` + +Para limitar el acceso a los usuarios por tiempo modificamos el archivo +/etc/security/time.conf. Dentro de este archivo existen instrucciones +para el manejo de la sintaxis. + +La sintaxis es: + +``` bash +;;; +``` + +Por ejemplo: + +``` bash +*;*;usuario|otro_usuario;Wk0800-1900 +``` + +Donde ponemos Wk para indicar entre semana y luego el horario en formato +miliar. + +## 1.8 SSH + +Secure Shell, es un protocolo que permite conectar dos computadoras de +forma remota sin necesidad de un password, por medio de una conexión +segura basada en cifrado RSA. + +Para revisar la configuración de ssh podemos modificar el archivo de +configuración: + +``` bash +sudo vim /etc/ssh/sshd_config +``` + +En este archivo podemos bloquear la autenticación por password y otras +medidas. + +### 1.8.1 Generación de llaves + +Para la generación de llaves se usa + +``` bash +ssh-keygen +``` + +El número de bits por defecto es 2048, en caso de que no se especifique +ninguno. El comando nos indicará la dirección donde se guardarán las +llaves generadas. + +### 1.8.2 Uso de SSH + +Para usar un servidor remoto + +``` bash +ssh @ +``` + +Para copiar la llave pública al servidor + +``` bash +ssh-copy-id -i / @ +``` + +### 1.8.3 Aplicar cambios en SSH + +Para aplicar los cambios reiniciamos el servicio + +``` bash +sudo systemctl restart ssh +``` + +### 1.8.4 Problemas de conexión en ssh + +Para obtener más información del proceso podemos especificar el nivel de +verbosidad, de acuerdo al número de "v" + +``` bash +ssh -v @ +# ... +ssh -vvvv @ +``` + +## 1.9 Configurando DNS con bind + +En 1983 se conectaron cerca de 70 sitios a la red de CS. En 1983 se +publicó el RFC 882 que define el servicio de nombre de dominios. +Posteriormente, en octubre de 1984 se crearon 7 TLDs (Dominios de nivel +superior), conocidos como dominios de propósito general .arpa, .com, +.org, .edu, .gov, .mil y la letra de los países respetando su código +ISO. + +### 1.9.1 Instalación de bind + +``` bash +sudo apt install -y bind9 +``` + +Si la instalación funcionó, el puerto 53 estará abierto + +``` bash +netstat -ltn +# tcp 0 0 127...:53 ESCUCHAR +``` + +Y podremos verificar los manuales usando + +``` bash +dpkg -L bind9 +``` + +También podremos ver la versión usando el flag -v. + +``` bash +named -v +``` + +### 1.9.2 Dig + +dig nos permite realizar consultas al dns. Para esto se usará un dominio +y una ubicación + +``` bash +dig www.. @ +``` + +### 1.9.3 Configuración de bind + +El archivo de configuración de bind estará en /etc/bind/named.conf + +## 1.10 Arranque, detención y recarga de servicios + +Systemd se encarga de la gestión de todos los servicios, los comandos +más comunes son: + +Verificar el estado de un servicio usamos + +``` bash +sudo systemctl status +``` + +Para que un servicio cargue al iniciar el sistema + +``` bash +sudo systemctl enable +``` + +Para remover un servicio del arranque del sistema + +``` bash +sudo systemctl disable +``` + +Iniciar un servicio + +``` bash +sudo systemctl start +``` + +Detener un servicio + +``` bash +sudo systemctl stop +``` + +Reiniciar un servicio + +``` bash +sudo systemctl restart +``` + +Para listar los servicios del sistema + +``` bash +sudo systemctl list-units -t --all +``` + +si queremos ver los logs de un servicio. La -f es para realizar un +follow, escuchará cambios en los logs. + +``` bash +sudo journalctl -fu +``` + +Muestra cuanto pesan los logs en el sistema operativo. + +``` bash +sudo journalctl --disk-usage +``` + +Muestra los reinicios del ordenador + +``` bash +sudo journalctl --list-boots +``` + +Muestra los mensajes que corresponden con determinada categoría + +``` bash +sudo journalctl -p critic|notice|info|warning|error +``` + +Es posible obtener los logs en formato JSON con + +``` bash +sudo journalctl -o json +``` + +Para recargar los archivos de configuración de un servicio sin +reiniciarlo + +``` bash +sudo systemctl reload +``` + +Para reducir el tamaño de los logs cierta cantidad + +``` bash +sudo journalctl --vacuum-size=100M +``` + +Para reducir el tamaño de los logs a cierta cantidad de días + +``` bash +sudo journalctl --vacuum-time=2days +``` + +## 1.11 Configuración de Nginx + +Para instalar nginx con sus extras usamos + +``` bash +sudo apt install nginx nginx-extras +``` + +### 1.11.1 Nginx amplify + +NGINX Amplify es una herramienta que sirve para monitorear el servidor, +parámetros del sistema operativo, bases de datos, etc + +Para activarlo vamos a modificar el directorio conf.d de nginx que suele +estar en /etc/nginx, para agregar un archivo nuevo. + +``` bash +sudo cat > conf.d/stub_status.conf +server{ + listen 127.0.0.1:80; + server_name 127.0.0.1; + location /nginx_status { + stub_status on; + allow 127.0.0.1; + deny all; + } +} +``` + +Seguir las [instrucciones de instalación](https://amplify.nginx.com/) y +posteriormente + +A continuación reiniciamos el servicio de nginx y lo habilitamos. + +``` bash +sudo systemctl restart nginx && systemctl enable nginx +``` + +Tras reiniciar nginx activamos el servicio de nginx amplify eligiendo la +opción start. + +``` bash +service amplify-agent +``` + +Una vez hecho lo anterior amplify-agent estará ejecutándose. + +## 1.12 MySQL con Nagios + +Nagios es un sistema de monitorización de redes, de código abierto, que +revisa el rendimiento de los equipos y servicios. + +Primero instalamos MySQL + +``` bash +sudo apt install mysql-server +``` + +Obtenemos el password de MySQL + +``` bash +sudo vim /etc/mysql/debian.conf +# ... +# user = +# password = +``` + +Para inciar sesión usamos los datos del comando anterior. Usamos la +opción -p para que el password no quede guardado en el historial de +comandos. + +``` bash +mysql -y -p +``` + +Reforzamos la seguridad del server de la base de datos con el comando +interactivo. + +``` bash +sudo mysql_secure_installation +``` + +### 1.12.1 Nagios + +Instalamos los paquetes + +``` bash +sudo apt install -y libmcrypt-dev make libssl-dev bc gawk dc build-essential snmp libnet-snmp-perl gettext +wget https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz -0 plugins.tar.gz -O plugins.tar.gz +``` + +Configuramos + +``` bash +sudo ./configure +``` + +Verificamos la ausencia de errores + +``` bash +sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg +``` + +Y una vez que nos aseguremos reiniciamos nagios. + +``` bash +sudo systemctl restart nagios +``` + +Neceistamos descargar el plugin de MySQL en el Home. + +``` bash +wget https://labs.consol.de/assets/downloads/nagios/check_mysql_health-2.2.2.tar.gz -O mysqlplugin.tar.gz +``` + +Y posteriormente desempaquetarlo + +``` bash +tar -xzvf mysqlplugin.tar.gz +``` + +Creamos un usuario para ingresar en nagios + +``` bash +sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin +``` + +Nagios estará disponible en nuestro navegador web + +``` bash +:8080/nagios +``` + +### 1.12.2 Configuración en base de datos + +``` bash +grant select on *.* to ''@'' identified by '' +``` + +Ahora agregamos la siguiente linea dentro de /usr/local/nagios o +/etc/nagios.cfg + +``` bash +cfg_file=/usr/local/nagios/etc/objects/mysqlmonitoring.cfg +``` + +### 1.12.3 Creación de comandos para nagios + +Dentro de la ruta /usr/local/nagios/etc/objects/commands.cfg, agregamos + +``` bash +define command { + command_name check_mysql_health + command_line $USER1$/check_mysql_health -H $ARG4$ --username $ARG1$ --password $ARG2$ --port $ARG5$ --mode $ARG3$ +} +``` + +Por último, creamos el archivo cfg_file que declaramos en el archivo +nagios.cfg de la configuración. Su ubicación será la ruta +/usr/local/nagios/etc/objects/mysqlmonitoring.cfg + +``` bash +define service { + use local-service + host_name localhost + service_description MySQL connection-time + check_command check_mysql_health!nagios!*!connection-time!127.0.0.1!3306! +} +``` + +## 1.13 Manejo de logs + +Hay varios comandos útiles para manejar logs + +El comando siguiente encontrará todos los archivos que terminen en +".log", insensible a mayúsculas y minúsculas. + +``` bash +find /var/log/ -iname "*.log" -type f +``` + +Para encontrar los logs que tuvieron salidas de error en los últimos +minutos. El 2 en el comando indica el output para STDERR + +``` bash +sudo find /etc/ -mtime 2 +``` + +## 1.14 awk + +awk es un comando que recibe patrones y nos permite condicionales y flujos de información, como si fuera un lenguaje de programación. +Awk muy usado para visualizar los de una manera atractiva. + +Nos permite hacer referencia a las columnas con el simbolo "$", seguido del número de columna: + +```bash +$ +``` + +### 1.14.1 print con awk + +Por ejemplo: + +``` bash +awk '{print $num_columna} ' +``` + +También podemos usar otro delimitador en lugar de los espacios + +``` bash +awk -F "" '{print $num_columna}' +``` + +O imprimir múltiples columnas + +``` bash +awk -F "" '{print $num_columna $num_columna $num_columna}' +``` + +También recibe expresiones regulares + +``` bash +awk '/^\/dev\/sda5/ {print}' +``` + +O aquellas que son más largas de cierta longitud + +``` bash +awk ' length($0) > {print length} ' +``` + +Para ver las IP conectadas a nuestro servidor usamos + +O solo determinadas lineas + +``` bash +awk 'NR==2, NR==4 {print $0}' +``` + +### 1.14.2 condicionales con awk + +También podemos usar condicionales. + +``` bash +awk '{if ($1=="") { + print $2 +} else { print $1 } +}' +``` + +### 1.14.3 Mirando los logs de ngnix con awk + +Sabiendo que los logs de nginx se localizan en la ruta /var/log/nginx/, +podemos visualizarlos de manera más amigable usando el comando awk. + +``` bash +sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr +# 534 159.65.103.143 +# 103 187.158.4.52 +``` + +Para ver los códigos en nuestro servidor. + +``` bash +sudo awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr +# 4427 200 +# 211 301 +``` + +## 1.15 Otros servicios + +### 1.15.1 Collectd + +Genera reportes en web del rendimiento. + +### 1.15.2 Nmon + +Obtiene visualizaciones rápidas del sistema. Guardar archivos en formato +nmon que se pueden convertir a html + +### 1.15.3 Munin + +Analiza el rendimiento del servidor con gráficos históricos + +### 1.15.4 Grafana + +Visualiza alerta y entiende las métricas del negocio sin portar su +ubicación. + +### 1.15.5 Pandora + +Recomendado por la comunidad con una versión community. + +## 1.16 Bash + +Es una shell de UNIX y el intérprete de comandos por defecto en la +mayoría de distribuciónes GNU/Linux. Se pueden crear scripts que, por +convención, terminan con .sh + +### 1.16.1 Cabecera + +Para indicarle a GNU/Linux que un script se use con bash usamos + +``` bash +#!/bin/bash +``` + +Para definir una variable usamos el operador = + +``` bash +VARIABLE = "variable" +``` + +Para imprimirlas usamos echo + +``` bash +echo $VARIABLE +``` + +Mientras que los comentarios usan el caracter hashtag o numeral + +``` bash +# Este es un comentario +``` + +## 1.17 Variables de entorno + +Para mirar todas las variables que están disponibles usamos el comando +*env* + +``` bash +env +``` + +### 1.17.1 Variable $PATH + +La variable PATH le indica que a GNU/Linux donde debe buscar los +binarios para ejecutar. + +Para extender el PATH usamos + +``` bash +export PATH=$PATH:~/otra/ruta +``` + +## 1.18 Vulnerabilidades en el servidor + +### 1.18.1 Buenas prácticas + +Hay buenas prácticas a realizar + +- desactivar el usuario root +- Evitar login con usuario y password +- Validar la versión de software usada +- User telnet +- Identificar los servicios y puertos abiertos +- Asignarle los permisos mínimos a los usuarios + +### 1.18.2 Mantener actualizado el servidor + +En sistemas basados en RedHat + +``` bash +yum check-update --security +yum update security +``` + +En sistemas basados en debian + +``` bash +sudo apt update +sudo apt upgrade +``` + +### 1.18.3 Principio del menor privilegio + +La superficie de ataque es el conjunto de datos conocidos o +vulnerabilidades. + +Existen algunas soluciones para manejar las vulnerabilidades + +- Lynis + +### 1.18.4 Frameworks de seguridad + +Existen organizaciones encargadas de la seguridad. + +- SCAP, conjunto de reglas para la información relacionada con + configuraciones y fallos +- OWASP, proyecto destinado a pelear contra la inseguridad + informática. + +### 1.18.5 Implementación de firewall + +ufw es un software que ya viene instalado por defecto en sistemas +ubuntu. + +Generalmente para web se dejan abiertos únicamente los puertos 80, 443 y +22, que corresponden a HTTP, HTTPS y SSH, respectivamente. + +#### 1.18.5.1 Uso de ufw + +El nombre del comando ufw viene de Uncomplicated Firewall. +Muestra el estado (activo/inactivo) y las reglas del firewall. + +``` bash +sudo ufw status +``` + +Con el modificador numbered me muestra las reglas numeradas. + +``` bash +sudo ufw status numbered +``` + +Para habilitar un puerto usamos allow + +``` bash +sudo ufw allow +``` + +Si queremos encender el firewall usamos enable + +``` bash +sudo ufw enable +``` + +Para ver borrar un número de regla + +``` bash +sudo ufw delete +``` + +Para permitir la conexión de ciertas direcciones ip + +``` bash +sudo ufw allow from proto to any port comment +``` + +Tip: Recuerda que ssh usa el protocolo tcp + +Si queremos eliminar todas las reglas + +``` bash +sudo ufw reset +``` + +### 1.18.6 Escaneo de puertos con nmap + +Nmap es una herramienta que se encuentra de manera nativa en Kali Linux, +usada para auditorias web. + +``` bash +nmap -sV -sC -O -oA +``` + +Donde: + +- -sV Muestra información de los puertos abiertos +- -sC Habilita el uso de Scripts +- -O Detección de OS +- -p Escanea todos los puertos +- -oA Detecta la salida a un archivo +- -Pn Para + +## 1.19 Lynis + +Es una herramienta de auditoria y seguridad, para endurecer servidores +GNU/Linux. + +Lynis se instala con: + +``` bash +sudo apt install lynis +``` + +Y para usarlo basta con correr el comando + +``` bash +sudo lynis audit system +# [+] Users, Groups and Authentication +#- Administrator accounts [ OK ] +#- Unique UIDs [ OK ] +#- ... +``` + +Lynis nos hará recomendaciones respecto a nuestro sistema. + +Emite un reporte muy completo con una checklist de las medidas y +recomendaciones a tomar en cuenta. + +## 1.20 Comandos útiles + +### compgen + +El comando *compgen* se encarga de mostrarnos todos los comandos y keywords disponibles para el usuario activo. + +```bash +compgen -c +``` + +### listar paquetes con dpkg + +Lista todos los paquetes en sistemas Debian + +```bash +dpkg -l +``` + +### Vaciado de memoria con procdump + +Nos muestra comandos un picos de CPU para el monitoreo de un proceso. + +```bash +procdump -o -p +``` + +También puedes usar el nombre del a imagen + +```bash +procdump -w +``` + +### Fingir ser root con fakeroot + +Permite ejecutar comandos falseando el UID y el GID para que sean 0. Esto no te vuelve root, solo engaña a ciertos programas para que crean que lo eres, sin embargo el kernel tiene la última palabra. + +El comando *fakeroot* es util para empaquetar y compilar software que requiere al usuario root sin tener que acceder a este último. + +```bash +fakeroot +``` + +### Estadísticas de sockets con ss + +El comando ss nos muestra estadísticas de sockets abiertos. + +```bash +ss +``` diff --git a/Notes/AlgebraLineal/Algebra-lineal.md b/Notes/AlgebraLineal/Algebra-lineal.md deleted file mode 100644 index 7987935..0000000 --- a/Notes/AlgebraLineal/Algebra-lineal.md +++ /dev/null @@ -1,28 +0,0 @@ -# 1. Algebra lineal - -Un vector es una lista finita de números. Los encontramos en dos -presentaciones: - -- Vector columna (vertical) -- Vector renglón (horizontal) - -La dimension o longitud es la cantidad de elementos que tiene el vector. - -Si nos referimos a un elemento del vector se le llamará escalar, si está -dentro del vector se le llamará coeficiente. - -El vector siguiente tiene 3 coeficientes. - -1, 2, 3 - - - -[comment]:STARTING_GENERATED_TOC - -* [1.1-Igualdad](<./content/1.1-Igualdad.md>) -* [1.2-Bloque-o-stack-de-vectores](<./content/1.2-Bloque-o-stack-de-vectores.md>) -* [1.3-Convenciones](<./content/1.3-Convenciones.md>) -* [1.4-Modelo-aditivo-RGB](<./content/1.4-Modelo-aditivo-RGB.md>) -* [1.5-Suma-de-vectores](<./content/1.5-Suma-de-vectores.md>) - -[comment]:ENDING_GENERATED_TOC \ No newline at end of file diff --git a/Notes/AlgebraLineal/content/1.1-Igualdad.md b/Notes/AlgebraLineal/content/1.1-Igualdad.md deleted file mode 100644 index 41fa774..0000000 --- a/Notes/AlgebraLineal/content/1.1-Igualdad.md +++ /dev/null @@ -1,5 +0,0 @@ -## 1.1 Igualdad - -Sean a,b dos vectores a = b si ai=bi con 0\) -* [1.2-User-defined-data-types](<./content/1.2-User-defined-data-types.md>) -* [1.3-Algoritmos-de-ordenamiento](<./content/1.3-Algoritmos-de-ordenamiento.md>) -* [1.4-Recursividad](<./content/1.4-Recursividad.md>) -* [1.5-Graphos](<./content/1.5-Graphos.md>) - -[comment]:ENDING_GENERATED_TOC \ No newline at end of file diff --git a/Notes/Algoritmos/content/1.1-Desarrollo-de-un-algoritmo.md b/Notes/Algoritmos/content/1.1-Desarrollo-de-un-algoritmo.md deleted file mode 100644 index e3341ec..0000000 --- a/Notes/Algoritmos/content/1.1-Desarrollo-de-un-algoritmo.md +++ /dev/null @@ -1,16 +0,0 @@ -## 1.1 Desarrollo de un algoritmo - -Los pasos recomendados para desarrollar un algoritmo son los siguientes: - -1. Definición del problema -2. Análisis del problema -3. Diseño del algoritmo -4. Verificación o pruebas - -Para la definición del problema debemos obtener los siguientes -elementos: - -- Entradas: ¿Qué se necesita para realizar los pasos? -- Salidas: ¿Qué se obtiene al final del algoritmo? -- Tipos de datos involucrados: Textos, números, listas, etc. - diff --git a/Notes/Algoritmos/content/1.3-Algoritmos-de-ordenamiento.md b/Notes/Algoritmos/content/1.3-Algoritmos-de-ordenamiento.md deleted file mode 100644 index 867c22e..0000000 --- a/Notes/Algoritmos/content/1.3-Algoritmos-de-ordenamiento.md +++ /dev/null @@ -1,27 +0,0 @@ -## 1.3 Algoritmos de ordenamiento - -### 1.3.1 Merge Sort - -Utiliza el paradigma divide y vencerás, Dividiendo los elementos para -compararlos y posteriormente volverlos a unir ordenados de la manera -correcta. Es un algoritmo eficiente para muchos datos, pero no lo es -tanto para pocos. - -### 1.3.2 Insertion Sort - -Vas comparando los elementos hasta que encuentren su lugar en la serie -de 1 a 1. Es un algoritmo eficiente para serie de datos cortas, pero no -para largas. - -### 1.3.3 Bubble Sort - -Se ordena por pares y se va repitiendo 1 a 1 hasta que queda totalmente -ordenado, es muy iterativo, poco eficiente (por la cantidad de -iteraciones), pero muy sencillo de ejecutar. - -### 1.3.4 Quick Sort - -Utiliza el paradigma divide and conquer, y va comparando desde las -esquinas al centro, es muy eficiente para serie de datos largos por lo -que es de los más importantes. - diff --git a/Notes/Algoritmos/content/1.4-Recursividad.md b/Notes/Algoritmos/content/1.4-Recursividad.md deleted file mode 100644 index faac32b..0000000 --- a/Notes/Algoritmos/content/1.4-Recursividad.md +++ /dev/null @@ -1,12 +0,0 @@ -## 1.4 Recursividad - -La recursividad es la capacidad de una función de llamarse a si misma. - -Las funciones recursivas tienen las siguientes caracteristicas. - -Se llaman a si mismas. Tienen de argumento un valor que cambio por cada -iteración. Regresan algún valor definido en cada iteración. Tienen una -condicional que define el fin del ciclo. Manejan un stack que es el -órden de las ejecuciones de las iteraciones de la función, empezando por -la última a llamar. - diff --git a/Notes/Algoritmos/content/1.5-Graphos.md b/Notes/Algoritmos/content/1.5-Graphos.md deleted file mode 100644 index e079946..0000000 --- a/Notes/Algoritmos/content/1.5-Graphos.md +++ /dev/null @@ -1,16 +0,0 @@ -## 1.5 Graphos - -Los graphos son mapas de set de nodos que tienen múltiples relaciones -entre sí mediante enlaces (edges). - -Los graphos no tienen estructura de cascada como los árboles binarios, -pero comparten la lógica relacional. - -Los graphos son definidos por G=(V,E), donde: - -G = Representación del grapho V = Set de nodos (vértices) E = Enlaces -(edges) Los graphos son el pilar o los fundamentos que se ocupan en -bases de datos modernas como es el caso de la base de datos de: - -Las relaciones de amistad de Facebook Las recomendaciones de Amazon Los -seguidores de Twitter diff --git a/Notes/Algoritmos/content/1.2-User-defined-data-types.md b/Notes/Algoritmos/index.md similarity index 56% rename from Notes/Algoritmos/content/1.2-User-defined-data-types.md rename to Notes/Algoritmos/index.md index 2b34229..c9e0712 100644 --- a/Notes/Algoritmos/content/1.2-User-defined-data-types.md +++ b/Notes/Algoritmos/index.md @@ -1,3 +1,26 @@ +# 1. Algoritmos + +Un algoritmo es un conjunto de instrucciones o pasos que resuelven un +problema dado paso a paso y sin generar ambigüedades. + + + +## 1.1 Desarrollo de un algoritmo + +Los pasos recomendados para desarrollar un algoritmo son los siguientes: + +1. Definición del problema +2. Análisis del problema +3. Diseño del algoritmo +4. Verificación o pruebas + +Para la definición del problema debemos obtener los siguientes +elementos: + +- Entradas: ¿Qué se necesita para realizar los pasos? +- Salidas: ¿Qué se obtiene al final del algoritmo? +- Tipos de datos involucrados: Textos, números, listas, etc. + ## 1.2 User defined data types Los User Defined DataTypes son tipos de datos creados por los @@ -75,3 +98,58 @@ Cada ADT tiene sus propias funciones acorde a sus características. false. - isFull() – Retorna true si la cola está vacía, si no, retorna false. +## 1.3 Algoritmos de ordenamiento + +### 1.3.1 Merge Sort + +Utiliza el paradigma divide y vencerás, Dividiendo los elementos para +compararlos y posteriormente volverlos a unir ordenados de la manera +correcta. Es un algoritmo eficiente para muchos datos, pero no lo es +tanto para pocos. + +### 1.3.2 Insertion Sort + +Vas comparando los elementos hasta que encuentren su lugar en la serie +de 1 a 1. Es un algoritmo eficiente para serie de datos cortas, pero no +para largas. + +### 1.3.3 Bubble Sort + +Se ordena por pares y se va repitiendo 1 a 1 hasta que queda totalmente +ordenado, es muy iterativo, poco eficiente (por la cantidad de +iteraciones), pero muy sencillo de ejecutar. + +### 1.3.4 Quick Sort + +Utiliza el paradigma divide and conquer, y va comparando desde las +esquinas al centro, es muy eficiente para serie de datos largos por lo +que es de los más importantes. + +## 1.4 Recursividad + +La recursividad es la capacidad de una función de llamarse a si misma. + +Las funciones recursivas tienen las siguientes caracteristicas. + +Se llaman a si mismas. Tienen de argumento un valor que cambio por cada +iteración. Regresan algún valor definido en cada iteración. Tienen una +condicional que define el fin del ciclo. Manejan un stack que es el +órden de las ejecuciones de las iteraciones de la función, empezando por +la última a llamar. + +## 1.5 Graphos + +Los graphos son mapas de set de nodos que tienen múltiples relaciones +entre sí mediante enlaces (edges). + +Los graphos no tienen estructura de cascada como los árboles binarios, +pero comparten la lógica relacional. + +Los graphos son definidos por G=(V,E), donde: + +G = Representación del grapho V = Set de nodos (vértices) E = Enlaces +(edges) Los graphos son el pilar o los fundamentos que se ocupan en +bases de datos modernas como es el caso de la base de datos de: + +Las relaciones de amistad de Facebook Las recomendaciones de Amazon Los +seguidores de Twitter diff --git a/Notes/ArquitecturaAltaConcurrencia/Arquitectura-de-alta-concurrencia.md b/Notes/ArquitecturaAltaConcurrencia/Arquitectura-de-alta-concurrencia.md deleted file mode 100644 index 2d630b8..0000000 --- a/Notes/ArquitecturaAltaConcurrencia/Arquitectura-de-alta-concurrencia.md +++ /dev/null @@ -1,20 +0,0 @@ -# 1. Arquitectura de alta concurrencia - - - -[comment]:STARTING_GENERATED_TOC - -* [1.1-Escalabilidad](<./content/1.1-Escalabilidad.md>) -* [1.2-Stateless-y-statefull-en-alta-concurrencia](<./content/1.2-Stateless-y-statefull-en-alta-concurrencia.md>) -* [1.3-Métricas-a-usar-para-escalar](<./content/1.3-Métricas-a-usar-para-escalar.md>) -* [1.4-Manejo-de-tráfico-por-paises](<./content/1.4-Manejo-de-tráfico-por-paises.md>) -* [1.5-Por-qué-se-usa-GNU-Linux](<./content/1.5-Por-qué-se-usa-GNU-Linux.md>) -* [1.6-Manejo-de-usuarios-en-entorno-de-stagging-y-producción](<./content/1.6-Manejo-de-usuarios-en-entorno-de-stagging-y-producción.md>) -* [1.7-Orquestadores-y-serverless](<./content/1.7-Orquestadores-y-serverless.md>) -* [1.8-Motores-de-bases-de-datos-y-caché](<./content/1.8-Motores-de-bases-de-datos-y-caché.md>) -* [1.9-CDN-en-alta-concurrencia](<./content/1.9-CDN-en-alta-concurrencia.md>) -* [1.10-Manejo-de-ataque-DDOS](<./content/1.10-Manejo-de-ataque-DDOS.md>) -* [1.11-gRPC-o-REST-en-alta-concurrencia](<./content/1.11-gRPC-o-REST-en-alta-concurrencia.md>) -* [1.12-Consideraciones-de-negocio-para-alta-concurrencia-y-caso-de-uso](<./content/1.12-Consideraciones-de-negocio-para-alta-concurrencia-y-caso-de-uso.md>) - -[comment]:ENDING_GENERATED_TOC \ No newline at end of file diff --git a/Notes/ArquitecturaAltaConcurrencia/content/1.1-Escalabilidad.md b/Notes/ArquitecturaAltaConcurrencia/content/1.1-Escalabilidad.md deleted file mode 100644 index 94b2b29..0000000 --- a/Notes/ArquitecturaAltaConcurrencia/content/1.1-Escalabilidad.md +++ /dev/null @@ -1,7 +0,0 @@ -## 1.1 Escalabilidad - -Se divide en dos: - -- Escalamiento vertical: Aumentar el tamaño de la instancia. -- Escalamiento horizontal: Aumenta el número de instancias. - diff --git a/Notes/ArquitecturaAltaConcurrencia/content/1.10-Manejo-de-ataque-DDOS.md b/Notes/ArquitecturaAltaConcurrencia/content/1.10-Manejo-de-ataque-DDOS.md deleted file mode 100644 index 837ba9f..0000000 --- a/Notes/ArquitecturaAltaConcurrencia/content/1.10-Manejo-de-ataque-DDOS.md +++ /dev/null @@ -1,8 +0,0 @@ -## 1.10 Manejo de ataque DDOS - -Es ideal bloquear los paquetes desde la Capa 4 del modelo OSI, por medio -de IP tables. - -WAF, una aplicación que funciona con una lista de request para bloquear -el tráfico antes de que llegue a la aplicación. - diff --git a/Notes/ArquitecturaAltaConcurrencia/content/1.11-gRPC-o-REST-en-alta-concurrencia.md b/Notes/ArquitecturaAltaConcurrencia/content/1.11-gRPC-o-REST-en-alta-concurrencia.md deleted file mode 100644 index 169d021..0000000 --- a/Notes/ArquitecturaAltaConcurrencia/content/1.11-gRPC-o-REST-en-alta-concurrencia.md +++ /dev/null @@ -1,23 +0,0 @@ -## 1.11 gRPC o REST en alta concurrencia - -Los RPCs funcionan de la siguiente manera: - -> - Un cliente invoca un procedimiento remoto, serializa los -> parámetros y envía el mensaje al servidor. -> - El servidor, al recibir el mensaje, serializa el contenido, -> ejecuta el procedimiento y envía al cliente el resultado. - -### 1.11.1 Protobuffer - -El formato usado por gRPC, existen en formato binario y permite la -serialización y deserialización de datos estructurados, el desarrollador -define los datos y los compila. - -### 1.11.2 ¿Cuándo usar REST o gRPC? - -gRPC es recomendado para microservicios o APIs internas, por su -estabilidad y respuesta ed baja latencia. - -REST se recomienda para integraciones con clientes y APIs públicas, por -su facilidad de uso e implementación. - diff --git a/Notes/ArquitecturaAltaConcurrencia/content/1.12-Consideraciones-de-negocio-para-alta-concurrencia-y-caso-de-uso.md b/Notes/ArquitecturaAltaConcurrencia/content/1.12-Consideraciones-de-negocio-para-alta-concurrencia-y-caso-de-uso.md deleted file mode 100644 index eda9cb7..0000000 --- a/Notes/ArquitecturaAltaConcurrencia/content/1.12-Consideraciones-de-negocio-para-alta-concurrencia-y-caso-de-uso.md +++ /dev/null @@ -1,13 +0,0 @@ -## 1.12 Consideraciones de negocio para alta concurrencia y caso de uso - -Pablo Fredrickson recomienda: - -- Crear un monolito - - > - Usar caché - > - CDNs - > - Contenedores - -- Separar en funciones - -- Usar serverless para tareas asíncronos diff --git a/Notes/ArquitecturaAltaConcurrencia/content/1.2-Stateless-y-statefull-en-alta-concurrencia.md b/Notes/ArquitecturaAltaConcurrencia/content/1.2-Stateless-y-statefull-en-alta-concurrencia.md deleted file mode 100644 index 323e930..0000000 --- a/Notes/ArquitecturaAltaConcurrencia/content/1.2-Stateless-y-statefull-en-alta-concurrencia.md +++ /dev/null @@ -1,9 +0,0 @@ -## 1.2 Stateless y statefull en alta concurrencia - -Stateless: El estado está fuera de la aplicación, por ejemplo JWT. -Statefull: El estado está dentro de la aplicación, por ejemplo sesiones -manejadas del lado del servidor. - -Es más sencillo escalar una aplicación stateless, debido a que no -requiere la información del servidor. - diff --git "a/Notes/ArquitecturaAltaConcurrencia/content/1.3-M\303\251tricas-a-usar-para-escalar.md" "b/Notes/ArquitecturaAltaConcurrencia/content/1.3-M\303\251tricas-a-usar-para-escalar.md" deleted file mode 100644 index 34d1ad2..0000000 --- "a/Notes/ArquitecturaAltaConcurrencia/content/1.3-M\303\251tricas-a-usar-para-escalar.md" +++ /dev/null @@ -1,17 +0,0 @@ -## 1.3 Métricas a usar para escalar - -Para escalar base de datos podemos hacer réplicas de lectura, ya que, -generalmente, se realizan más lecturas que escrituras. - -En bases de datos No SQL se puede usar Sharding, para separar las -distintas partes en varios servidores y facilitar el escalamiento -horizontal. - -Los orquestadores generalmente se encargan del escalado automático por -medio de métricas tales como: - -- CPU/Memoria -- Cola de mensajes -- Métricas internas -- RPS - diff --git "a/Notes/ArquitecturaAltaConcurrencia/content/1.4-Manejo-de-tr\303\241fico-por-paises.md" "b/Notes/ArquitecturaAltaConcurrencia/content/1.4-Manejo-de-tr\303\241fico-por-paises.md" deleted file mode 100644 index dc755fa..0000000 --- "a/Notes/ArquitecturaAltaConcurrencia/content/1.4-Manejo-de-tr\303\241fico-por-paises.md" +++ /dev/null @@ -1,5 +0,0 @@ -## 1.4 Manejo de tráfico por paises - -Si usamos CDN son ellos quienes se encargarán de dirigir el tráfico a la -región más cercana y tener redundancia en el contenido. - diff --git "a/Notes/ArquitecturaAltaConcurrencia/content/1.5-Por-qu\303\251-se-usa-GNU-Linux.md" "b/Notes/ArquitecturaAltaConcurrencia/content/1.5-Por-qu\303\251-se-usa-GNU-Linux.md" deleted file mode 100644 index 7ecd571..0000000 --- "a/Notes/ArquitecturaAltaConcurrencia/content/1.5-Por-qu\303\251-se-usa-GNU-Linux.md" +++ /dev/null @@ -1,22 +0,0 @@ -## 1.5 ¿Por qué se usa GNU Linux? - -Linux cuenta con varias ventajas frente a otras alternativas - -- Más económico por ser de código abierto y libre. -- Más estable (Históricamente). -- Más seguro (Existe un sólido sistema que permite granularidad de - permisos). -- Código abierto. Se puede modificar. -- Soporte de la comunidad. - -### 1.5.1 Lenguajes de alta concurrencia - -Para manejar aplicaciones de alta concurrencia hay lenguajes que están -optimizados, tales como: - -- Go -- Python -- C -- Java -- JavaScript con Nodejs - diff --git "a/Notes/ArquitecturaAltaConcurrencia/content/1.6-Manejo-de-usuarios-en-entorno-de-stagging-y-producci\303\263n.md" "b/Notes/ArquitecturaAltaConcurrencia/content/1.6-Manejo-de-usuarios-en-entorno-de-stagging-y-producci\303\263n.md" deleted file mode 100644 index bf7a9dd..0000000 --- "a/Notes/ArquitecturaAltaConcurrencia/content/1.6-Manejo-de-usuarios-en-entorno-de-stagging-y-producci\303\263n.md" +++ /dev/null @@ -1,11 +0,0 @@ -## 1.6 Manejo de usuarios en entorno de stagging y producción - -Generalmente se usa almacenar la información en un sistema externo, como -Redis, con el propósito de que la aplicación sea stateless. - -### 1.6.1 Secretos - -el manejo de secretos es responsabilidad del equipo de infraestructura y -bajo ninguna circunstancia deben quedar registrados en logs o control de -versiones. - diff --git a/Notes/ArquitecturaAltaConcurrencia/content/1.7-Orquestadores-y-serverless.md b/Notes/ArquitecturaAltaConcurrencia/content/1.7-Orquestadores-y-serverless.md deleted file mode 100644 index 9fd7d88..0000000 --- a/Notes/ArquitecturaAltaConcurrencia/content/1.7-Orquestadores-y-serverless.md +++ /dev/null @@ -1,21 +0,0 @@ -## 1.7 Orquestadores y serverless - -### 1.7.1 Orquestadores - -Hay varios orquestadores diferentes. - -- K8s -- Openshift -- Docker Swarm - -El orquestador se encarga de ubicar los contenedores en diferentes -servidores y crear nuevos en caso de que fallen. - -Además los orquestadores pueden implementar medidas de autoescalado que -responden a diferentes métricas. - -### 1.7.2 Serverless - -Es útil en escenarios de alta concurrencia pues los proveedores se -encargan de autoescalar la aplicación de acuerdo al nivel de tráfico. - diff --git "a/Notes/ArquitecturaAltaConcurrencia/content/1.8-Motores-de-bases-de-datos-y-cach\303\251.md" "b/Notes/ArquitecturaAltaConcurrencia/content/1.8-Motores-de-bases-de-datos-y-cach\303\251.md" deleted file mode 100644 index 6898b1b..0000000 --- "a/Notes/ArquitecturaAltaConcurrencia/content/1.8-Motores-de-bases-de-datos-y-cach\303\251.md" +++ /dev/null @@ -1,24 +0,0 @@ -## 1.8 Motores de bases de datos y caché - -### 1.8.1 Motos de base de datos - -Se pueden dividir en: - -> - SQL, con campos fijos en las tablas. Ideal aplicaciones con alto -> enfasis en escritura. -> -> > - MySQL (Relacional): escalar con réplicas verticalmente. Por -> > ejemplo con -> -> - No SQL, con campos flexibles en su estructura. -> -> > - MongoDB (Documentos): Al ser no relacional escala más fácil. - -### 1.8.2 Caché - -Por su rapidez son usadas para guardar sesiones y autenticación. - -- Redis -- Memcached -- CDNs - diff --git a/Notes/ArquitecturaAltaConcurrencia/content/1.9-CDN-en-alta-concurrencia.md b/Notes/ArquitecturaAltaConcurrencia/content/1.9-CDN-en-alta-concurrencia.md deleted file mode 100644 index 0f32191..0000000 --- a/Notes/ArquitecturaAltaConcurrencia/content/1.9-CDN-en-alta-concurrencia.md +++ /dev/null @@ -1,10 +0,0 @@ -## 1.9 CDN en alta concurrencia - -Nos permiten correr un proxy delante de la aplicación para cachear -archivos estáticos o workers con lógica sencilla. - -### 1.9.1 Algunos proveedores de Cloudflare - -> - Cloudflare -> - Fastly - diff --git a/Notes/ArquitecturaAltaConcurrencia/index.md b/Notes/ArquitecturaAltaConcurrencia/index.md new file mode 100644 index 0000000..cae8d1e --- /dev/null +++ b/Notes/ArquitecturaAltaConcurrencia/index.md @@ -0,0 +1,174 @@ +# 1. Arquitectura de alta concurrencia + + + +## 1.1 Escalabilidad + +Se divide en dos: + +- Escalamiento vertical: Aumentar el tamaño de la instancia. +- Escalamiento horizontal: Aumenta el número de instancias. + +## 1.2 Stateless y statefull en alta concurrencia + +Stateless: El estado está fuera de la aplicación, por ejemplo JWT. +Statefull: El estado está dentro de la aplicación, por ejemplo sesiones +manejadas del lado del servidor. + +Es más sencillo escalar una aplicación stateless, debido a que no +requiere la información del servidor. + +## 1.3 Métricas a usar para escalar + +Para escalar base de datos podemos hacer réplicas de lectura, ya que, +generalmente, se realizan más lecturas que escrituras. + +En bases de datos No SQL se puede usar Sharding, para separar las +distintas partes en varios servidores y facilitar el escalamiento +horizontal. + +Los orquestadores generalmente se encargan del escalado automático por +medio de métricas tales como: + +- CPU/Memoria +- Cola de mensajes +- Métricas internas +- RPS + +## 1.4 Manejo de tráfico por paises + +Si usamos CDN son ellos quienes se encargarán de dirigir el tráfico a la +región más cercana y tener redundancia en el contenido. + +## 1.5 ¿Por qué se usa GNU Linux? + +Linux cuenta con varias ventajas frente a otras alternativas + +- Más económico por ser de código abierto y libre. +- Más estable (Históricamente). +- Más seguro (Existe un sólido sistema que permite granularidad de + permisos). +- Código abierto. Se puede modificar. +- Soporte de la comunidad. + +### 1.5.1 Lenguajes de alta concurrencia + +Para manejar aplicaciones de alta concurrencia hay lenguajes que están +optimizados, tales como: + +- Go +- Python +- C +- Java +- JavaScript con Nodejs + +## 1.6 Manejo de usuarios en entorno de stagging y producción + +Generalmente se usa almacenar la información en un sistema externo, como +Redis, con el propósito de que la aplicación sea stateless. + +### 1.6.1 Secretos + +el manejo de secretos es responsabilidad del equipo de infraestructura y +bajo ninguna circunstancia deben quedar registrados en logs o control de +versiones. + +## 1.7 Orquestadores y serverless + +### 1.7.1 Orquestadores + +Hay varios orquestadores diferentes. + +- K8s +- Openshift +- Docker Swarm + +El orquestador se encarga de ubicar los contenedores en diferentes +servidores y crear nuevos en caso de que fallen. + +Además los orquestadores pueden implementar medidas de autoescalado que +responden a diferentes métricas. + +### 1.7.2 Serverless + +Es útil en escenarios de alta concurrencia pues los proveedores se +encargan de autoescalar la aplicación de acuerdo al nivel de tráfico. + +## 1.8 Motores de bases de datos y caché + +### 1.8.1 Motos de base de datos + +Se pueden dividir en: + +> - SQL, con campos fijos en las tablas. Ideal aplicaciones con alto +> enfasis en escritura. +> +> > - MySQL (Relacional): escalar con réplicas verticalmente. Por +> > ejemplo con +> +> - No SQL, con campos flexibles en su estructura. +> +> > - MongoDB (Documentos): Al ser no relacional escala más fácil. + +### 1.8.2 Caché + +Por su rapidez son usadas para guardar sesiones y autenticación. + +- Redis +- Memcached +- CDNs + +## 1.9 CDN en alta concurrencia + +Nos permiten correr un proxy delante de la aplicación para cachear +archivos estáticos o workers con lógica sencilla. + +### 1.9.1 Algunos proveedores de Cloudflare + +> - Cloudflare +> - Fastly + +## 1.10 Manejo de ataque DDOS + +Es ideal bloquear los paquetes desde la Capa 4 del modelo OSI, por medio +de IP tables. + +WAF, una aplicación que funciona con una lista de request para bloquear +el tráfico antes de que llegue a la aplicación. + +## 1.11 gRPC o REST en alta concurrencia + +Los RPCs funcionan de la siguiente manera: + +> - Un cliente invoca un procedimiento remoto, serializa los +> parámetros y envía el mensaje al servidor. +> - El servidor, al recibir el mensaje, serializa el contenido, +> ejecuta el procedimiento y envía al cliente el resultado. + +### 1.11.1 Protobuffer + +El formato usado por gRPC, existen en formato binario y permite la +serialización y deserialización de datos estructurados, el desarrollador +define los datos y los compila. + +### 1.11.2 ¿Cuándo usar REST o gRPC? + +gRPC es recomendado para microservicios o APIs internas, por su +estabilidad y respuesta ed baja latencia. + +REST se recomienda para integraciones con clientes y APIs públicas, por +su facilidad de uso e implementación. + +## 1.12 Consideraciones de negocio para alta concurrencia y caso de uso + +Pablo Fredrickson recomienda: + +- Crear un monolito + + > - Usar caché + > - CDNs + > - Contenedores + +- Separar en funciones + +- Usar serverless para tareas asíncronos diff --git a/Notes/ArquitecturaBackend/Arquitectura-backend.md b/Notes/ArquitecturaBackend/Arquitectura-backend.md deleted file mode 100644 index 52bfcc1..0000000 --- a/Notes/ArquitecturaBackend/Arquitectura-backend.md +++ /dev/null @@ -1,16 +0,0 @@ -# 1. Arquitectura backend - - - -[comment]:STARTING_GENERATED_TOC - -* [1.1-Sistema-monolítico](<./content/1.1-Sistema-monolítico.md>) -* [1.2-Sistema-distribuido](<./content/1.2-Sistema-distribuido.md>) -* [1.3-Conexión-en-el-backend](<./content/1.3-Conexión-en-el-backend.md>) -* [1.4-Documento-de-diseño](<./content/1.4-Documento-de-diseño.md>) -* [1.5-Revisión-de-diseño](<./content/1.5-Revisión-de-diseño.md>) -* [1.6-Elaboración-de-la-arquitectura-del-sistema](<./content/1.6-Elaboración-de-la-arquitectura-del-sistema.md>) -* [1.7-Entidad](<./content/1.7-Entidad.md>) -* [1.8-Escalabilidad-Throttling-y-Retry-Policy](<./content/1.8-Escalabilidad-Throttling-y-Retry-Policy.md>) - -[comment]:ENDING_GENERATED_TOC \ No newline at end of file diff --git "a/Notes/ArquitecturaBackend/content/1.1-Sistema-monol\303\255tico.md" "b/Notes/ArquitecturaBackend/content/1.1-Sistema-monol\303\255tico.md" deleted file mode 100644 index fe5eeb9..0000000 --- "a/Notes/ArquitecturaBackend/content/1.1-Sistema-monol\303\255tico.md" +++ /dev/null @@ -1,4 +0,0 @@ -## 1.1 Sistema monolítico - -Una sola pieza, por ejemplo: LAMP - diff --git a/Notes/ArquitecturaBackend/content/1.2-Sistema-distribuido.md b/Notes/ArquitecturaBackend/content/1.2-Sistema-distribuido.md deleted file mode 100644 index 0a1ae2e..0000000 --- a/Notes/ArquitecturaBackend/content/1.2-Sistema-distribuido.md +++ /dev/null @@ -1,16 +0,0 @@ -## 1.2 Sistema distribuido - -Múltiples piezas que se comunican por red - -### 1.2.1 Elementos que podemos encontrar en un Sistema Distribuido - -Existen - -- Load Balancers -- Máquinas Virtuales -- Bases de datos Relacionales o No Relacionales -- Servicios de Colas (Ejemplo: SQS) -- Servicios de Storage (Ejemplo: S3) -- Servicios Publisher-Suscriber (Ejemplo: SNS) -- Pipelines - diff --git "a/Notes/ArquitecturaBackend/content/1.3-Conexi\303\263n-en-el-backend.md" "b/Notes/ArquitecturaBackend/content/1.3-Conexi\303\263n-en-el-backend.md" deleted file mode 100644 index a56974b..0000000 --- "a/Notes/ArquitecturaBackend/content/1.3-Conexi\303\263n-en-el-backend.md" +++ /dev/null @@ -1,11 +0,0 @@ -## 1.3 Conexión en el backend - -Una API o Interfaz de programación de aplicaciones entrega una series de -servicios llamados endpoints. - -- POST -\> Create -- GET -\> Read -- PUT -\> Update -- PATCH -\> Partial Update -- DELETE -\> Eliminacion - diff --git "a/Notes/ArquitecturaBackend/content/1.4-Documento-de-dise\303\261o.md" "b/Notes/ArquitecturaBackend/content/1.4-Documento-de-dise\303\261o.md" deleted file mode 100644 index 9ccc6ee..0000000 --- "a/Notes/ArquitecturaBackend/content/1.4-Documento-de-dise\303\261o.md" +++ /dev/null @@ -1,56 +0,0 @@ -## 1.4 Documento de diseño - -Es un archivo que contendrá todos los detalles que necesitamos para -poder desarrollar el sistema. Es completamente agnóstico al sistema. -Puede tener una sección de outofscope, costos, alcance.: - - # Titulo: Template de documento de diseño - --- - ## Overview: Problema a resolver - Descripción.. - - ### Alcance(Scope) - Descripción.. - - #### Casos de uso - Descripción... - * Caso de uso 1 - * Caso de uso 2 - * ... - - #### Out of Scope (casos de uso No Soportados) - Descripción... - * Caso de uso 1 - * Caso de uso 2 - * ... - --- - ## Arquitectura - - ### Diagramas - poner diagramas de secuencia, uml, etc - - ### Modelo de datos - Poner diseño de entidades, Jsons, tablas, diagramas entidad relación, etc.. - - --- - ## Limitaciones - Lista de limitaciones conocidas. Puede ser en formato de lista. - Ej. - * Llamadas del API tienen latencia X - * No se soporta mas de X llamadas por segundo - --- - ## Costo - Descripción/Análisis de costos - Ejemplo: - "Considerando N usuarios diarios, M llamadas a X servicio/baseDatos/etc" - * 1000 llamadas diarias a serverless functions. $XX.XX - * 1000 read/write units diarias a X Database on-demand. $XX.XX - Total: $xx.xx (al mes/dia/año) - -Casos de uso: Es importante establecer los casos de uso soportados y no -soportados. - -Limitaciones: Aquí podemos especificar tiempos de latencia. - -Costo: En esta parte hacemos estimaciones del costo del sistema - diff --git "a/Notes/ArquitecturaBackend/content/1.5-Revisi\303\263n-de-dise\303\261o.md" "b/Notes/ArquitecturaBackend/content/1.5-Revisi\303\263n-de-dise\303\261o.md" deleted file mode 100644 index c5f1a6b..0000000 --- "a/Notes/ArquitecturaBackend/content/1.5-Revisi\303\263n-de-dise\303\261o.md" +++ /dev/null @@ -1,11 +0,0 @@ -## 1.5 Revisión de diseño - -Cosas importantes a tener en cuenta: - -- ¿Por qué? Para evaluar alternativas de arquitectura -- ¿Cómo afecta la infraestructura? -- ¿Cómo ligarlo con los requerimientos originales del negocio? -- ¿Cómo mejoran los costos? - -Elaboración de la arquitectura del sistema - diff --git "a/Notes/ArquitecturaBackend/content/1.6-Elaboraci\303\263n-de-la-arquitectura-del-sistema.md" "b/Notes/ArquitecturaBackend/content/1.6-Elaboraci\303\263n-de-la-arquitectura-del-sistema.md" deleted file mode 100644 index 1695c14..0000000 --- "a/Notes/ArquitecturaBackend/content/1.6-Elaboraci\303\263n-de-la-arquitectura-del-sistema.md" +++ /dev/null @@ -1,15 +0,0 @@ -## 1.6 Elaboración de la arquitectura del sistema - -Podemos combinar diferentes arquitecturas, bases de datos de acuerdo a -nuestras necesidades. - -Por ejemplo: Un serverles y NoSQL para escribir datos Un servicio para -leer con una base de datos relacional. La base de datos NoSQL puede -transferirse a la base de datos SQL posteriormente, quizás una vez por -día. Implementar cache en diversos puntos del sistema. - -Para elaborar la arquitectura podemos usar -[diagramas](https://www.diagrams.net/) - -Diseños de bajo nivel, planes de prueba e integración continua - diff --git a/Notes/ArquitecturaBackend/content/1.7-Entidad.md b/Notes/ArquitecturaBackend/content/1.7-Entidad.md deleted file mode 100644 index 13ae3a7..0000000 --- a/Notes/ArquitecturaBackend/content/1.7-Entidad.md +++ /dev/null @@ -1,5 +0,0 @@ -## 1.7 Entidad - -Una entidad es un objeto que satisface las reglas del negocio, las -cuales pueden ser computadas. - diff --git a/Notes/ArquitecturaBackend/content/1.8-Escalabilidad-Throttling-y-Retry-Policy.md b/Notes/ArquitecturaBackend/content/1.8-Escalabilidad-Throttling-y-Retry-Policy.md deleted file mode 100644 index 8d48e07..0000000 --- a/Notes/ArquitecturaBackend/content/1.8-Escalabilidad-Throttling-y-Retry-Policy.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.8 Escalabilidad, Throttling y Retry Policy - -Podemos limitar la cantidad de peticiones por minuto usando Throttling. diff --git a/Notes/ArquitecturaBackend/index.md b/Notes/ArquitecturaBackend/index.md new file mode 100644 index 0000000..0e6e6bb --- /dev/null +++ b/Notes/ArquitecturaBackend/index.md @@ -0,0 +1,125 @@ +# 1. Arquitectura backend + + + +## 1.1 Sistema monolítico + +Una sola pieza, por ejemplo: LAMP + +## 1.2 Sistema distribuido + +Múltiples piezas que se comunican por red + +### 1.2.1 Elementos que podemos encontrar en un Sistema Distribuido + +Existen + +- Load Balancers +- Máquinas Virtuales +- Bases de datos Relacionales o No Relacionales +- Servicios de Colas (Ejemplo: SQS) +- Servicios de Storage (Ejemplo: S3) +- Servicios Publisher-Suscriber (Ejemplo: SNS) +- Pipelines + +## 1.3 Conexión en el backend + +Una API o Interfaz de programación de aplicaciones entrega una series de +servicios llamados endpoints. + +- POST -\> Create +- GET -\> Read +- PUT -\> Update +- PATCH -\> Partial Update +- DELETE -\> Eliminacion + +## 1.4 Documento de diseño + +Es un archivo que contendrá todos los detalles que necesitamos para +poder desarrollar el sistema. Es completamente agnóstico al sistema. +Puede tener una sección de outofscope, costos, alcance.: + + # Titulo: Template de documento de diseño + --- + ## Overview: Problema a resolver + Descripción.. + + ### Alcance(Scope) + Descripción.. + + #### Casos de uso + Descripción... + * Caso de uso 1 + * Caso de uso 2 + * ... + + #### Out of Scope (casos de uso No Soportados) + Descripción... + * Caso de uso 1 + * Caso de uso 2 + * ... + --- + ## Arquitectura + + ### Diagramas + poner diagramas de secuencia, uml, etc + + ### Modelo de datos + Poner diseño de entidades, Jsons, tablas, diagramas entidad relación, etc.. + + --- + ## Limitaciones + Lista de limitaciones conocidas. Puede ser en formato de lista. + Ej. + * Llamadas del API tienen latencia X + * No se soporta mas de X llamadas por segundo + --- + ## Costo + Descripción/Análisis de costos + Ejemplo: + "Considerando N usuarios diarios, M llamadas a X servicio/baseDatos/etc" + * 1000 llamadas diarias a serverless functions. $XX.XX + * 1000 read/write units diarias a X Database on-demand. $XX.XX + Total: $xx.xx (al mes/dia/año) + +Casos de uso: Es importante establecer los casos de uso soportados y no +soportados. + +Limitaciones: Aquí podemos especificar tiempos de latencia. + +Costo: En esta parte hacemos estimaciones del costo del sistema + +## 1.5 Revisión de diseño + +Cosas importantes a tener en cuenta: + +- ¿Por qué? Para evaluar alternativas de arquitectura +- ¿Cómo afecta la infraestructura? +- ¿Cómo ligarlo con los requerimientos originales del negocio? +- ¿Cómo mejoran los costos? + +Elaboración de la arquitectura del sistema + +## 1.6 Elaboración de la arquitectura del sistema + +Podemos combinar diferentes arquitecturas, bases de datos de acuerdo a +nuestras necesidades. + +Por ejemplo: Un serverles y NoSQL para escribir datos Un servicio para +leer con una base de datos relacional. La base de datos NoSQL puede +transferirse a la base de datos SQL posteriormente, quizás una vez por +día. Implementar cache en diversos puntos del sistema. + +Para elaborar la arquitectura podemos usar +[diagramas](https://www.diagrams.net/) + +Diseños de bajo nivel, planes de prueba e integración continua + +## 1.7 Entidad + +Una entidad es un objeto que satisface las reglas del negocio, las +cuales pueden ser computadas. + +## 1.8 Escalabilidad, Throttling y Retry Policy + +Podemos limitar la cantidad de peticiones por minuto usando Throttling. diff --git a/Notes/ArquitecturaSoftware/Arquitectura-de-Software.md b/Notes/ArquitecturaSoftware/Arquitectura-de-Software.md deleted file mode 100644 index 12ed384..0000000 --- a/Notes/ArquitecturaSoftware/Arquitectura-de-Software.md +++ /dev/null @@ -1,20 +0,0 @@ -# 1. Arquitectura de Software - - - -[comment]:STARTING_GENERATED_TOC - -* [1.1-Etapas-del-desarrollo-de-Software](<./content/1.1-Etapas-del-desarrollo-de-Software.md>) -* [1.2-Dificultades-en-el-desarrollo-de-software](<./content/1.2-Dificultades-en-el-desarrollo-de-software.md>) -* [1.3-Roles-en-metodologías-tradicionales-y-ágiles](<./content/1.3-Roles-en-metodologías-tradicionales-y-ágiles.md>) -* [1.4-Qué-es-arquitectura-de-software](<./content/1.4-Qué-es-arquitectura-de-software.md>) -* [1.5-La-importancia-de-la-comunicación---Ley-de-Conway](<./content/1.5-La-importancia-de-la-comunicación---Ley-de-Conway.md>) -* [1.6-Objetivos-del-Arquitecto](<./content/1.6-Objetivos-del-Arquitecto.md>) -* [1.7-Entender-el-problema](<./content/1.7-Entender-el-problema.md>) -* [1.8-Requerimientos](<./content/1.8-Requerimientos.md>) -* [1.9-Riesgos](<./content/1.9-Riesgos.md>) -* [1.10-Reestricciones](<./content/1.10-Reestricciones.md>) -* [1.11-Estilos-de-arquitectura](<./content/1.11-Estilos-de-arquitectura.md>) -* [1.12-Cómo-elegir-un-estilo](<./content/1.12-Cómo-elegir-un-estilo.md>) - -[comment]:ENDING_GENERATED_TOC \ No newline at end of file diff --git a/Notes/ArquitecturaSoftware/content/1.1-Etapas-del-desarrollo-de-Software.md b/Notes/ArquitecturaSoftware/content/1.1-Etapas-del-desarrollo-de-Software.md deleted file mode 100644 index d9832f4..0000000 --- a/Notes/ArquitecturaSoftware/content/1.1-Etapas-del-desarrollo-de-Software.md +++ /dev/null @@ -1,21 +0,0 @@ -## 1.1 Etapas del desarrollo de Software - -El proceso de desarrollo tradicional sigue un modelo donde cada salida -es la entrada del siguiente paso, como un pipeline. - -Análisis de requerimientos: Necesitamos entender cuál es el problema que -queremos resolver, es decir, la necesidad del negocio. - -Diseño de la solución: Análisis profundo de los problemas y sus posibles -soluciones. El resultado de esto debe ser el detalle de la solución, a -través de requerimientos, modelado, etc. - -Desarrollo y evolución: Implementación de la solución. Al final de esta -etapa tendremos software como salida. - -Despliegue: Aquí vamos a necesitar de infraestructura y de roles de -operación para poner a disponibilidad nuestro software. - -Mantenimiento y evolución: Estamos en espera de mejoras. El software -permanecerá en esta etapa hasta que concluya su periodo de vida. - diff --git a/Notes/ArquitecturaSoftware/content/1.10-Reestricciones.md b/Notes/ArquitecturaSoftware/content/1.10-Reestricciones.md deleted file mode 100644 index f08a3d1..0000000 --- a/Notes/ArquitecturaSoftware/content/1.10-Reestricciones.md +++ /dev/null @@ -1,6 +0,0 @@ -## 1.10 Reestricciones - -Las limitaciones a las opciones de diseño disponibles para desarrollar -no se limitan a la parte tecnológica, pueden ser también legales o -relacionadas con el contexto de negocio. - diff --git a/Notes/ArquitecturaSoftware/content/1.11-Estilos-de-arquitectura.md b/Notes/ArquitecturaSoftware/content/1.11-Estilos-de-arquitectura.md deleted file mode 100644 index 5c22bbf..0000000 --- a/Notes/ArquitecturaSoftware/content/1.11-Estilos-de-arquitectura.md +++ /dev/null @@ -1,115 +0,0 @@ -## 1.11 Estilos de arquitectura - -Citando a Software Architecture: Foundations, Theory and Practice -(Taylor, 2010) - -> Un estilo de arquitectura es una colección de decisiones de diseño, -> aplicables en un contexto determinado, que restringen las decisiones -> arquitectónicas específicas en ese contexto y obtienen beneficios en -> cada sistema resultante. - -Existen diferentes estilos de arquitectura: - -### 1.11.1 Llamado y retorno - -Los componentes invocan a componentes externos y reciben la información -que les proporcionan. - -#### 1.11.1.1 Programa principal y subrutinas - -Estilo más básico evolucionado de un script. Se tiene una rutina y se -manda a llamar otra subrutina en donde la subrutina puede retornar o no -un resultado, pero la rutina principal continua hasta que acabe la -subrutina. - -#### 1.11.1.2 Orientado a objetos - -Tratamos de juntar el estado de la aplicación creando objetos los cuales -tienen una interfaz pública y los objetos interactúan entre si. - -#### 1.11.1.3 Arquitectura multinivel - -Son diferentes componentes que se van a comunicar en un orden en -especifico donde un componente principal crea el llamado a un componente -inferior en algún momento, un ejemplo de esto son las aplicaciones -cliente-servidor, donde una aplicación le habla a un servidor mediante -una petición y el servidor le devuelve una respuesta. - -### 1.11.2 Flujo de datos - -Este estilo se utiliza cuando tenemos un proceso con una salida clara; -la salida puede procesarse por partes. - -#### 1.11.2.1 Secuencial - -Se basa en dividir el trabajo en subproceso llamados lotes los cuales se -procesan uno tras otro y dan un resultado que sirve como entrada para el -siguiente - -#### 1.11.2.2 Tubos y filtros - -Igualmente se divide el trabajo en subproceso pero la principal ventaja -es que es continuo, y puede haber procesos en paralelo además se pueden -añadir o remover procesos sin afectar el comportamiento del resto. - -### 1.11.3 Centrados en datos - -#### 1.11.3.1 Pizarrón - -Múltiples componentes que interactuan con un componente central, cada -componente tiene la responsabilidad de procesar, calcular o recibir un -dato y escribirlo al componente central; el pizarrón. Una vez que todos -los componentes hayan procesado su información, el pizarrón puede o no -devolver una salida de acuerdo a su propia lógica. - -Es un estilo poco común. - -#### 1.11.3.2 Centrado en datos - -Toda la información se centra en una única base de datos. Ideal para -aplicaciones que tienen una segunda aplicación con la misma base de -datos. - -Los componentes involucrados en este estilo **no se comunican entre -sí**, sino que utilizan la base de datos y así pueden leer que hizo el -otro componente. - -#### 1.11.3.3 Experto o basado en reglas - -Un componente de tipo cliente se comunica con un segundo componente, que -intentará inferir si recibe una regla o una consulta, para saberlo -consulta con un tercer componente; la base de datos de reglas o -knowledge database. - -Generalmente usado en Inteligencia Artificial. - -### 1.11.4 Componentes independientes - -Se trata de un estilo que busca el desacoplamiento de los componentes. - -Existen dos tipos: invocación implícita e invocación explicíta. - -#### 1.11.4.1 Invocación implícita - -Es parecido al patrón observer, con un bus central de eventos sobre el -cual escriben los componentes, el bus comunica los eventos, de manera -reactiva, a los componentes que estén suscritos pero los componentes -desconocen a donde se les están comunicando los eventos. - -Existen buses sencillos donde un componente publica un evento y los -componentes suscritos reciben la notificación - -También hay buses inteligentes que funcionan de acuerdo a cierta lógica -(Enterprise Service Bus). El cual tiene componentes registrados que -interactúan con el bus, los componentes no se conocen entre si, pero -están programados para cumplir con su objetivo. - -#### 1.11.4.2 Invocación explícita - -Está basado en comunicación entre componentes pero, a diferencia de la -invocación implicita, las aplicaciones saben con qué aplicación se están -comunicando, incluso aunque se hayan desarrollado independientemente. Lo -anterior se consigue registrando cada componente a una central donde -indica sus relaciones entre si, al cual se puede consultar para ubicar -al componente a utilizar. - diff --git "a/Notes/ArquitecturaSoftware/content/1.12-C\303\263mo-elegir-un-estilo.md" "b/Notes/ArquitecturaSoftware/content/1.12-C\303\263mo-elegir-un-estilo.md" deleted file mode 100644 index 3269255..0000000 --- "a/Notes/ArquitecturaSoftware/content/1.12-C\303\263mo-elegir-un-estilo.md" +++ /dev/null @@ -1,17 +0,0 @@ -## 1.12 ¿Cómo elegir un estilo? - -Se dividen en estilos monolíticos y distribuidos - -### 1.12.1 monolíticos - -Es fácil priorizar eficiencia en comunicaciones Sencillos de testear -Curva de aprendizaje baja Capacidad de modularización muy complicada -Desafio para el despliegue pues todo el sistema tiene que coincidir - -### 1.12.2 Distribuidos - -Para testear se tienen que tener todos los componentes Curva de -aprendizaje más elevada Cada servicio se versionea de manera diferente, -lo que complica su modificación Su modularización es sencilla. -Adaptabilidad más fácil por la diferencia de contextos en cada -despliegue. diff --git a/Notes/ArquitecturaSoftware/content/1.2-Dificultades-en-el-desarrollo-de-software.md b/Notes/ArquitecturaSoftware/content/1.2-Dificultades-en-el-desarrollo-de-software.md deleted file mode 100644 index 91cf149..0000000 --- a/Notes/ArquitecturaSoftware/content/1.2-Dificultades-en-el-desarrollo-de-software.md +++ /dev/null @@ -1,31 +0,0 @@ -## 1.2 Dificultades en el desarrollo de software - -Cuando estamos identificando los problemas que queremos resolver, -podemos dividir los problemas en 2 - -### 1.2.1 Esenciales - -Los podemos dividir en: - -- La complejidad: Cuando el problema es complejo en si mismo, por - ejemplo del problema del vendedor viajero aplicado. Manejo del - problema de complejidad: Usar un sistema existente o aprovechar - código Open Source. -- La conformidad: en qué contexto se usa el software y cómo se adapta - al entorno. Manejo del problema: Prototipado rápido, feedback e - iteraciones rápidas para soluciones pequeñas, generalmente usando - metodologías ágiles. -- Tolerancia al cambio: Cambio de el mismo software y el contexto - donde se usa. Manejo del problema: Desarrollo Evolutivo, desarrollos - pequeños. Paso a paso pero de manera firme e ir haciendo crecer el - software. -- Invisibilidad: Problemas de tangibilidad nula. -- Manejo del problema: Grandes diseñadores, Arquitectos que saben - abstraer el problema y que realiza soluciones elegantes, de manera - eficiente. - -### 1.2.2 Accidentales - -Está relacionado con la plataforma que vamos a implementar, tecnología, -lenguajes, frameworks, integraciones, entornos, etc. - diff --git "a/Notes/ArquitecturaSoftware/content/1.3-Roles-en-metodolog\303\255as-tradicionales-y-\303\241giles.md" "b/Notes/ArquitecturaSoftware/content/1.3-Roles-en-metodolog\303\255as-tradicionales-y-\303\241giles.md" deleted file mode 100644 index efa92ee..0000000 --- "a/Notes/ArquitecturaSoftware/content/1.3-Roles-en-metodolog\303\255as-tradicionales-y-\303\241giles.md" +++ /dev/null @@ -1,51 +0,0 @@ -## 1.3 Roles en metodologías tradicionales y ágiles - -Las Metodologías Ágiles Redifinieron los Roles para acomodarlos a su -filosofia de Trabajo. Es necesario separar el rol del puesto de trabajo. -Una misma persona puede desempeñar varios roles. - -### 1.3.1 Tradicional - -Experto de Dominio: Era la persona a la que consultabamos para resolver -las necesidades de los requerimientos. Su contraparte en metodologías -ágiles es el stakeholder. - -Analista: Es la persona que se encarga de definir el problema y con -ellos los requerimientos. Su contraparte en metodologías ágiles es el -product owner. - -Administrador de sistemas: Se encargaban de toda la operación del -sistema: servidores, librerarías, lectura de logs y feedback al equipo -de desarrollo. Su contraparte en metodologías ágiles es el DevOps o el -Site Reliability Engineer. - -QA-Tester: Se encargaban de asegurar la calidad el producto, había área -de QA, testing, desarrolladores y arquitectos de software. Su -contraparte en metodologías ágiles es el equipo de desarrollo. - -Gestor del Proyecto: Se ecargaba de todo lo que era la entrega, además -de gestionar el ciclo de vida del proyecto. Su contraparte en -metodologías ágiles es el SCRUM master o facilitador. - -### 1.3.2 Metodologías ágiles - -Stakeholders/Partes interesadas: Expertos en el área del producto. - -Dueño del producto: Cliente. Es la persona que define los requerimientos -. Determina las historias y las prioriza. - -Devops: Es la persona responsable de Entender la Infraestructura a la -que se dirige nuestra app, así como de entender los requerimientos de -infraestructura asociados. - -Administrador de sistemas: Fue reemplazado por el SRE (Ing. de la -Confianza del Sitio), es similar al Administrador de Sistemas pero -conectando el mundo de sistemas con el mundo del dia a dia de la app. - -Equipo de desarrollo: Equipo autogestionado que diseña la solución y -análisis de los requerimientos, es un papel más estratégico. La -arquitectura a usar emergerá del consenso del equipo. - -Facilitador o SCRUM master: Acompaña al equipo a través de las -iteraciones, para entender y motivar al equipo. - diff --git "a/Notes/ArquitecturaSoftware/content/1.4-Qu\303\251-es-arquitectura-de-software.md" "b/Notes/ArquitecturaSoftware/content/1.4-Qu\303\251-es-arquitectura-de-software.md" deleted file mode 100644 index 8ffee68..0000000 --- "a/Notes/ArquitecturaSoftware/content/1.4-Qu\303\251-es-arquitectura-de-software.md" +++ /dev/null @@ -1,21 +0,0 @@ -## 1.4 ¿Qué es arquitectura de software? - -Hay diferentes definiciones para definir el término de arquitectura de -Software. - -El libro Software Architecture in Practice se enfoca en la estructura y -los elementos del sistema. - -> “La estructura del sistema, compuesta por elementos de software, sus -> propiedades visibles y sus relaciones” -> -> Software Architecture in Practice - -Mientras que el libro Software Architecture: Foundations, Theory and -Practice se centra más bien en las decisiones. - -> “El conjunto de decisiones principales de diseño tomadas para el -> sistema” -> -> Software Architecture: Foundations, Theory and Practice - diff --git "a/Notes/ArquitecturaSoftware/content/1.5-La-importancia-de-la-comunicaci\303\263n---Ley-de-Conway.md" "b/Notes/ArquitecturaSoftware/content/1.5-La-importancia-de-la-comunicaci\303\263n---Ley-de-Conway.md" deleted file mode 100644 index 087d4a0..0000000 --- "a/Notes/ArquitecturaSoftware/content/1.5-La-importancia-de-la-comunicaci\303\263n---Ley-de-Conway.md" +++ /dev/null @@ -1,10 +0,0 @@ -## 1.5 La importancia de la comunicación - Ley de Conway - -La ley de Comway dice que: - -> “Cualquier pieza de software refleja la estructura organizacional que -> la produjo.” - -Por lo que un equipo único producirá un monolito, mientras que un equipo -separado producirá una aplicación modularizada. - diff --git a/Notes/ArquitecturaSoftware/content/1.6-Objetivos-del-Arquitecto.md b/Notes/ArquitecturaSoftware/content/1.6-Objetivos-del-Arquitecto.md deleted file mode 100644 index 2894265..0000000 --- a/Notes/ArquitecturaSoftware/content/1.6-Objetivos-del-Arquitecto.md +++ /dev/null @@ -1,20 +0,0 @@ -## 1.6 Objetivos del Arquitecto - -Cada uno de los stakeholder tiene que ser conectado por el Arquitecto -con sus requerimientos. - -Stakeholder -\> Arquitecto -\> Requerimientos = Implementaciónes en el -Sistema. - -Los Requerimientos de cada stakeholder afectan de forma única el -sistema. - -- Cliente: Entrega a tiempo y dentro del presupuesto. -- Manager: Permite equipos independientes y comunicación clara. -- Dev: Que sea fácil de implementar y de mantener. -- Usuario: Es confiable y estará disponible cuando lo necesite. -- QA: Es fácil de comprobar. - -La unión de todos estos requerimientos llevarán al arquitecto a tomar -sus decisiones. - diff --git a/Notes/ArquitecturaSoftware/content/1.7-Entender-el-problema.md b/Notes/ArquitecturaSoftware/content/1.7-Entender-el-problema.md deleted file mode 100644 index d93dcfc..0000000 --- a/Notes/ArquitecturaSoftware/content/1.7-Entender-el-problema.md +++ /dev/null @@ -1,34 +0,0 @@ -## 1.7 Entender el problema - -Es muy importante separar la comprensión del problema de la propuesta de -solución. - -### 1.7.1 Problema - -Detalla lo que queremos resolver, no entra en detalles del como, y el -alcance de nuestro problema, además de como va a agregar valor a -nuestros usuarios - -- Idea: ¿Qué queremos solucionar? -- Criterios de éxito: ¿Cómo sabremos si resolvemos el problema? -- Historias de usuario: Enfasis en los beneficios del usuario respecto - a su problema. - -### 1.7.2 Solución - -Entra y aisla los detalles sobre como se va a resolver el problema -teniendo en cuenta todos los detalles técnicos del problema. - -Consta de: - -- Diseño: Planificacion del software, desde diseño UI, UX hasta diseño - de sistemas. -- Desarrollo: escribir el codigo, configuraciones y contrataciones de - servicios. -- Evaluación: medir la eficiencia y eficacia del software frente al - problema. -- Criterios de aceptación: medir el impacto del software centrado en - el usuario. -- Despliegue (deploy): lanzar el software en ambientes productivos y - mejorar por medio de iteraciones. - diff --git a/Notes/ArquitecturaSoftware/content/1.8-Requerimientos.md b/Notes/ArquitecturaSoftware/content/1.8-Requerimientos.md deleted file mode 100644 index 1e8b34e..0000000 --- a/Notes/ArquitecturaSoftware/content/1.8-Requerimientos.md +++ /dev/null @@ -1,39 +0,0 @@ -## 1.8 Requerimientos - -### 1.8.1 Requerimientos de producto - -Se puede dividir en 3. - -#### 1.8.1.1 Requerimientos de negocio - -Los objetivos y problemas que la empresa quiere resolver con el -producto. Están basados en una necesidad del usuario. - -#### 1.8.1.2 requerimientos del usuario - -Describen las expectativas de los usuarios y como se interactuará con el -producto. - -#### 1.8.1.3 requerimientos funcional - -Proporcionan detalle de como debe comportarse un producto y especifican -lo que se necesita para su desarrollo. - -### 1.8.2 Requerimientos de proyecto - -Tienen que ver más con el rol de gestor de proyectos, se usan para dar -prioridad a los requerimientos del producto. - -Estos dos mundos de requerimientos hablan de las prioridades del equipo -de trabajo del proyecto. - -### 1.8.3 Requerimientos de acuerdo a funcionalidad - -- requisitos funcionales, relacionados con las historias de usuario. -- no funcionales, tienen que ver con las características del sistema y - vienen de atributos cualitativos, o sea que modifican a los - requerimientos funcionales para asignarles características, están - muy relacionados con la arquitectura. Ejemplos: acceder de forma - segura, en tiempo real u otros atributos que modifiquen la historia - del usuario. - diff --git a/Notes/ArquitecturaSoftware/content/1.9-Riesgos.md b/Notes/ArquitecturaSoftware/content/1.9-Riesgos.md deleted file mode 100644 index b95b9e8..0000000 --- a/Notes/ArquitecturaSoftware/content/1.9-Riesgos.md +++ /dev/null @@ -1,20 +0,0 @@ -## 1.9 Riesgos - -Es necesario identificar los riesgos para poder **priorizarlos** y -atacarlos en orden y asegurar que las soluciones arquitectónicas que -propongamos resuelvan los problemas más importantes. - -Podemos usar un framework para identificar los riesgos: - -- Toma de Requerimientos (Requerimientos funcionales): Se calificará - de acuerdo a su dificultad o complejidad. -- Atributos de calidad (Requerimientos NO funcionales): Se calificará - de acuerdo a la incertidumbre que genere, a mayot incertidumbre - mayor riesgo. -- Conocimiento del dominio: Riesgo prototípico, son aquellos que - podemos atacar de forma estándar. - -Una vez identificados debemos priorizarlos para resolver aquellos -riesgos que ponen en riesgo el éxito de la solución.No todos los riesgos -podrán cubrirse en un inicio. - diff --git a/Notes/ArquitecturaSoftware/index.md b/Notes/ArquitecturaSoftware/index.md new file mode 100644 index 0000000..50482bd --- /dev/null +++ b/Notes/ArquitecturaSoftware/index.md @@ -0,0 +1,389 @@ +# 1. Arquitectura de Software + + + +## 1.1 Etapas del desarrollo de Software + +El proceso de desarrollo tradicional sigue un modelo donde cada salida +es la entrada del siguiente paso, como un pipeline. + +Análisis de requerimientos: Necesitamos entender cuál es el problema que +queremos resolver, es decir, la necesidad del negocio. + +Diseño de la solución: Análisis profundo de los problemas y sus posibles +soluciones. El resultado de esto debe ser el detalle de la solución, a +través de requerimientos, modelado, etc. + +Desarrollo y evolución: Implementación de la solución. Al final de esta +etapa tendremos software como salida. + +Despliegue: Aquí vamos a necesitar de infraestructura y de roles de +operación para poner a disponibilidad nuestro software. + +Mantenimiento y evolución: Estamos en espera de mejoras. El software +permanecerá en esta etapa hasta que concluya su periodo de vida. + +## 1.2 Dificultades en el desarrollo de software + +Cuando estamos identificando los problemas que queremos resolver, +podemos dividir los problemas en 2 + +### 1.2.1 Esenciales + +Los podemos dividir en: + +- La complejidad: Cuando el problema es complejo en si mismo, por + ejemplo del problema del vendedor viajero aplicado. Manejo del + problema de complejidad: Usar un sistema existente o aprovechar + código Open Source. +- La conformidad: en qué contexto se usa el software y cómo se adapta + al entorno. Manejo del problema: Prototipado rápido, feedback e + iteraciones rápidas para soluciones pequeñas, generalmente usando + metodologías ágiles. +- Tolerancia al cambio: Cambio de el mismo software y el contexto + donde se usa. Manejo del problema: Desarrollo Evolutivo, desarrollos + pequeños. Paso a paso pero de manera firme e ir haciendo crecer el + software. +- Invisibilidad: Problemas de tangibilidad nula. +- Manejo del problema: Grandes diseñadores, Arquitectos que saben + abstraer el problema y que realiza soluciones elegantes, de manera + eficiente. + +### 1.2.2 Accidentales + +Está relacionado con la plataforma que vamos a implementar, tecnología, +lenguajes, frameworks, integraciones, entornos, etc. + +## 1.3 Roles en metodologías tradicionales y ágiles + +Las Metodologías Ágiles Redifinieron los Roles para acomodarlos a su +filosofia de Trabajo. Es necesario separar el rol del puesto de trabajo. +Una misma persona puede desempeñar varios roles. + +### 1.3.1 Tradicional + +Experto de Dominio: Era la persona a la que consultabamos para resolver +las necesidades de los requerimientos. Su contraparte en metodologías +ágiles es el stakeholder. + +Analista: Es la persona que se encarga de definir el problema y con +ellos los requerimientos. Su contraparte en metodologías ágiles es el +product owner. + +Administrador de sistemas: Se encargaban de toda la operación del +sistema: servidores, librerarías, lectura de logs y feedback al equipo +de desarrollo. Su contraparte en metodologías ágiles es el DevOps o el +Site Reliability Engineer. + +QA-Tester: Se encargaban de asegurar la calidad el producto, había área +de QA, testing, desarrolladores y arquitectos de software. Su +contraparte en metodologías ágiles es el equipo de desarrollo. + +Gestor del Proyecto: Se ecargaba de todo lo que era la entrega, además +de gestionar el ciclo de vida del proyecto. Su contraparte en +metodologías ágiles es el SCRUM master o facilitador. + +### 1.3.2 Metodologías ágiles + +Stakeholders/Partes interesadas: Expertos en el área del producto. + +Dueño del producto: Cliente. Es la persona que define los requerimientos +. Determina las historias y las prioriza. + +Devops: Es la persona responsable de Entender la Infraestructura a la +que se dirige nuestra app, así como de entender los requerimientos de +infraestructura asociados. + +Administrador de sistemas: Fue reemplazado por el SRE (Ing. de la +Confianza del Sitio), es similar al Administrador de Sistemas pero +conectando el mundo de sistemas con el mundo del dia a dia de la app. + +Equipo de desarrollo: Equipo autogestionado que diseña la solución y +análisis de los requerimientos, es un papel más estratégico. La +arquitectura a usar emergerá del consenso del equipo. + +Facilitador o SCRUM master: Acompaña al equipo a través de las +iteraciones, para entender y motivar al equipo. + +## 1.4 ¿Qué es arquitectura de software? + +Hay diferentes definiciones para definir el término de arquitectura de +Software. + +El libro Software Architecture in Practice se enfoca en la estructura y +los elementos del sistema. + +> “La estructura del sistema, compuesta por elementos de software, sus +> propiedades visibles y sus relaciones” +> +> Software Architecture in Practice + +Mientras que el libro Software Architecture: Foundations, Theory and +Practice se centra más bien en las decisiones. + +> “El conjunto de decisiones principales de diseño tomadas para el +> sistema” +> +> Software Architecture: Foundations, Theory and Practice + +## 1.5 La importancia de la comunicación - Ley de Conway + +La ley de Comway dice que: + +> “Cualquier pieza de software refleja la estructura organizacional que +> la produjo.” + +Por lo que un equipo único producirá un monolito, mientras que un equipo +separado producirá una aplicación modularizada. + +## 1.6 Objetivos del Arquitecto + +Cada uno de los stakeholder tiene que ser conectado por el Arquitecto +con sus requerimientos. + +Stakeholder -\> Arquitecto -\> Requerimientos = Implementaciónes en el +Sistema. + +Los Requerimientos de cada stakeholder afectan de forma única el +sistema. + +- Cliente: Entrega a tiempo y dentro del presupuesto. +- Manager: Permite equipos independientes y comunicación clara. +- Dev: Que sea fácil de implementar y de mantener. +- Usuario: Es confiable y estará disponible cuando lo necesite. +- QA: Es fácil de comprobar. + +La unión de todos estos requerimientos llevarán al arquitecto a tomar +sus decisiones. + +## 1.7 Entender el problema + +Es muy importante separar la comprensión del problema de la propuesta de +solución. + +### 1.7.1 Problema + +Detalla lo que queremos resolver, no entra en detalles del como, y el +alcance de nuestro problema, además de como va a agregar valor a +nuestros usuarios + +- Idea: ¿Qué queremos solucionar? +- Criterios de éxito: ¿Cómo sabremos si resolvemos el problema? +- Historias de usuario: Enfasis en los beneficios del usuario respecto + a su problema. + +### 1.7.2 Solución + +Entra y aisla los detalles sobre como se va a resolver el problema +teniendo en cuenta todos los detalles técnicos del problema. + +Consta de: + +- Diseño: Planificacion del software, desde diseño UI, UX hasta diseño + de sistemas. +- Desarrollo: escribir el codigo, configuraciones y contrataciones de + servicios. +- Evaluación: medir la eficiencia y eficacia del software frente al + problema. +- Criterios de aceptación: medir el impacto del software centrado en + el usuario. +- Despliegue (deploy): lanzar el software en ambientes productivos y + mejorar por medio de iteraciones. + +## 1.8 Requerimientos + +### 1.8.1 Requerimientos de producto + +Se puede dividir en 3. + +#### 1.8.1.1 Requerimientos de negocio + +Los objetivos y problemas que la empresa quiere resolver con el +producto. Están basados en una necesidad del usuario. + +#### 1.8.1.2 requerimientos del usuario + +Describen las expectativas de los usuarios y como se interactuará con el +producto. + +#### 1.8.1.3 requerimientos funcional + +Proporcionan detalle de como debe comportarse un producto y especifican +lo que se necesita para su desarrollo. + +### 1.8.2 Requerimientos de proyecto + +Tienen que ver más con el rol de gestor de proyectos, se usan para dar +prioridad a los requerimientos del producto. + +Estos dos mundos de requerimientos hablan de las prioridades del equipo +de trabajo del proyecto. + +### 1.8.3 Requerimientos de acuerdo a funcionalidad + +- requisitos funcionales, relacionados con las historias de usuario. +- no funcionales, tienen que ver con las características del sistema y + vienen de atributos cualitativos, o sea que modifican a los + requerimientos funcionales para asignarles características, están + muy relacionados con la arquitectura. Ejemplos: acceder de forma + segura, en tiempo real u otros atributos que modifiquen la historia + del usuario. + +## 1.9 Riesgos + +Es necesario identificar los riesgos para poder **priorizarlos** y +atacarlos en orden y asegurar que las soluciones arquitectónicas que +propongamos resuelvan los problemas más importantes. + +Podemos usar un framework para identificar los riesgos: + +- Toma de Requerimientos (Requerimientos funcionales): Se calificará + de acuerdo a su dificultad o complejidad. +- Atributos de calidad (Requerimientos NO funcionales): Se calificará + de acuerdo a la incertidumbre que genere, a mayot incertidumbre + mayor riesgo. +- Conocimiento del dominio: Riesgo prototípico, son aquellos que + podemos atacar de forma estándar. + +Una vez identificados debemos priorizarlos para resolver aquellos +riesgos que ponen en riesgo el éxito de la solución.No todos los riesgos +podrán cubrirse en un inicio. + +## 1.10 Reestricciones + +Las limitaciones a las opciones de diseño disponibles para desarrollar +no se limitan a la parte tecnológica, pueden ser también legales o +relacionadas con el contexto de negocio. + +## 1.11 Estilos de arquitectura + +Citando a Software Architecture: Foundations, Theory and Practice +(Taylor, 2010) + +> Un estilo de arquitectura es una colección de decisiones de diseño, +> aplicables en un contexto determinado, que restringen las decisiones +> arquitectónicas específicas en ese contexto y obtienen beneficios en +> cada sistema resultante. + +Existen diferentes estilos de arquitectura: + +### 1.11.1 Llamado y retorno + +Los componentes invocan a componentes externos y reciben la información +que les proporcionan. + +#### 1.11.1.1 Programa principal y subrutinas + +Estilo más básico evolucionado de un script. Se tiene una rutina y se +manda a llamar otra subrutina en donde la subrutina puede retornar o no +un resultado, pero la rutina principal continua hasta que acabe la +subrutina. + +#### 1.11.1.2 Orientado a objetos + +Tratamos de juntar el estado de la aplicación creando objetos los cuales +tienen una interfaz pública y los objetos interactúan entre si. + +#### 1.11.1.3 Arquitectura multinivel + +Son diferentes componentes que se van a comunicar en un orden en +especifico donde un componente principal crea el llamado a un componente +inferior en algún momento, un ejemplo de esto son las aplicaciones +cliente-servidor, donde una aplicación le habla a un servidor mediante +una petición y el servidor le devuelve una respuesta. + +### 1.11.2 Flujo de datos + +Este estilo se utiliza cuando tenemos un proceso con una salida clara; +la salida puede procesarse por partes. + +#### 1.11.2.1 Secuencial + +Se basa en dividir el trabajo en subproceso llamados lotes los cuales se +procesan uno tras otro y dan un resultado que sirve como entrada para el +siguiente + +#### 1.11.2.2 Tubos y filtros + +Igualmente se divide el trabajo en subproceso pero la principal ventaja +es que es continuo, y puede haber procesos en paralelo además se pueden +añadir o remover procesos sin afectar el comportamiento del resto. + +### 1.11.3 Centrados en datos + +#### 1.11.3.1 Pizarrón + +Múltiples componentes que interactuan con un componente central, cada +componente tiene la responsabilidad de procesar, calcular o recibir un +dato y escribirlo al componente central; el pizarrón. Una vez que todos +los componentes hayan procesado su información, el pizarrón puede o no +devolver una salida de acuerdo a su propia lógica. + +Es un estilo poco común. + +#### 1.11.3.2 Centrado en datos + +Toda la información se centra en una única base de datos. Ideal para +aplicaciones que tienen una segunda aplicación con la misma base de +datos. + +Los componentes involucrados en este estilo **no se comunican entre +sí**, sino que utilizan la base de datos y así pueden leer que hizo el +otro componente. + +#### 1.11.3.3 Experto o basado en reglas + +Un componente de tipo cliente se comunica con un segundo componente, que +intentará inferir si recibe una regla o una consulta, para saberlo +consulta con un tercer componente; la base de datos de reglas o +knowledge database. + +Generalmente usado en Inteligencia Artificial. + +### 1.11.4 Componentes independientes + +Se trata de un estilo que busca el desacoplamiento de los componentes. + +Existen dos tipos: invocación implícita e invocación explicíta. + +#### 1.11.4.1 Invocación implícita + +Es parecido al patrón observer, con un bus central de eventos sobre el +cual escriben los componentes, el bus comunica los eventos, de manera +reactiva, a los componentes que estén suscritos pero los componentes +desconocen a donde se les están comunicando los eventos. + +Existen buses sencillos donde un componente publica un evento y los +componentes suscritos reciben la notificación + +También hay buses inteligentes que funcionan de acuerdo a cierta lógica +(Enterprise Service Bus). El cual tiene componentes registrados que +interactúan con el bus, los componentes no se conocen entre si, pero +están programados para cumplir con su objetivo. + +#### 1.11.4.2 Invocación explícita + +Está basado en comunicación entre componentes pero, a diferencia de la +invocación implicita, las aplicaciones saben con qué aplicación se están +comunicando, incluso aunque se hayan desarrollado independientemente. Lo +anterior se consigue registrando cada componente a una central donde +indica sus relaciones entre si, al cual se puede consultar para ubicar +al componente a utilizar. + +## 1.12 ¿Cómo elegir un estilo? + +Se dividen en estilos monolíticos y distribuidos + +### 1.12.1 monolíticos + +Es fácil priorizar eficiencia en comunicaciones Sencillos de testear +Curva de aprendizaje baja Capacidad de modularización muy complicada +Desafio para el despliegue pues todo el sistema tiene que coincidir + +### 1.12.2 Distribuidos + +Para testear se tienen que tener todos los componentes Curva de +aprendizaje más elevada Cada servicio se versionea de manera diferente, +lo que complica su modificación Su modularización es sencilla. +Adaptabilidad más fácil por la diferencia de contextos en cada +despliegue. diff --git a/Notes/Azure/Azure.md b/Notes/Azure/Azure.md deleted file mode 100644 index 1c7112e..0000000 --- a/Notes/Azure/Azure.md +++ /dev/null @@ -1,37 +0,0 @@ -# 1. Azure - - -[comment]:STARTING_GENERATED_TOC - -* [1.1-Qué-es-Azure](<./content/1.1-Qué-es-Azure.md>) -* [1.2-Datacenter](<./content/1.2-Datacenter.md>) -* [1.3-Modelos-de-servicio](<./content/1.3-Modelos-de-servicio.md>) -* [1.4-Tipos-de-Nubes](<./content/1.4-Tipos-de-Nubes.md>) -* [1.5-Microsoft-learn](<./content/1.5-Microsoft-learn.md>) -* [1.6-Arquitectura-de-Azure](<./content/1.6-Arquitectura-de-Azure.md>) -* [1.7-Bases-de-datos](<./content/1.7-Bases-de-datos.md>) -* [1.8-Análisis-big-data](<./content/1.8-Análisis-big-data.md>) -* [1.9-Computo-en-la-nube](<./content/1.9-Computo-en-la-nube.md>) -* [1.10-Azure-serverless](<./content/1.10-Azure-serverless.md>) -* [1.11-Almacenamiento](<./content/1.11-Almacenamiento.md>) -* [1.12-Web](<./content/1.12-Web.md>) -* [1.13-Network](<./content/1.13-Network.md>) -* [1.14-Inteligencia-artificial](<./content/1.14-Inteligencia-artificial.md>) -* [1.15-Azure-DevOps-Services](<./content/1.15-Azure-DevOps-Services.md>) -* [1.16-Monitoreo-y-supervisión-de-Azure](<./content/1.16-Monitoreo-y-supervisión-de-Azure.md>) -* [1.17-Administración-de-entorno](<./content/1.17-Administración-de-entorno.md>) -* [1.18-Azure-serverless](<./content/1.18-Azure-serverless.md>) -* [1.19-Azure-Internet-of-Things](<./content/1.19-Azure-Internet-of-Things.md>) -* [1.20-Seguridad-en-Azure](<./content/1.20-Seguridad-en-Azure.md>) -* [1.21-Conectividad-de-red-segura](<./content/1.21-Conectividad-de-red-segura.md>) -* [1.22-Cumplimiento-de-privacidad](<./content/1.22-Cumplimiento-de-privacidad.md>) -* [1.23-Gobernanza](<./content/1.23-Gobernanza.md>) -* [1.24-Etiquetas](<./content/1.24-Etiquetas.md>) -* [1.25-Azure-policy](<./content/1.25-Azure-policy.md>) -* [1.26-Cloud-Adoption-Framework-para-Azure](<./content/1.26-Cloud-Adoption-Framework-para-Azure.md>) -* [1.27-Creación-de-una-estrategia-de-gobernanza](<./content/1.27-Creación-de-una-estrategia-de-gobernanza.md>) -* [1.28-Estándares-de-privacidad-cumplimiento-y-protección-de-datos-en-Azure](<./content/1.28-Estándares-de-privacidad-cumplimiento-y-protección-de-datos-en-Azure.md>) -* [1.29-Administración-de-costos-de-servicio](<./content/1.29-Administración-de-costos-de-servicio.md>) -* [1.30-Acuerdos-de-nivel-de-servicio-y-ciclo-de-vida](<./content/1.30-Acuerdos-de-nivel-de-servicio-y-ciclo-de-vida.md>) - -[comment]:ENDING_GENERATED_TOC \ No newline at end of file diff --git "a/Notes/Azure/content/1.1-Qu\303\251-es-Azure.md" "b/Notes/Azure/content/1.1-Qu\303\251-es-Azure.md" deleted file mode 100644 index 73ecd11..0000000 --- "a/Notes/Azure/content/1.1-Qu\303\251-es-Azure.md" +++ /dev/null @@ -1,7 +0,0 @@ -## 1.1 ¿Qué es Azure? - -Es una plataforma informática en la nube operada por Microsoft para la gestión de aplicaciones a través de centros de datos distribuidos en todo el mundo. - -Proveedor de prácticamente cualquier servicio, con más de 100 servicios en la -nube y datacenters al rededor del mundo. - diff --git a/Notes/Azure/content/1.10-Azure-serverless.md b/Notes/Azure/content/1.10-Azure-serverless.md deleted file mode 100644 index e5e7991..0000000 --- a/Notes/Azure/content/1.10-Azure-serverless.md +++ /dev/null @@ -1,71 +0,0 @@ -## 1.10 Azure serverless - -La informática sin servidor es una opción excelente para bajas cargas de trabajo -que responden a eventos entrantes: -* Peticiones REST. -* Temporizador. -* Mensajes de otros servicios. -* Colas - -#### 1.10.1.1 Azure Functions - -Con desarrollo orientado al código (imperativo). Ejecutable localmente y en la -nube asignando recursos de manera automática. - -Tienen ciertas características: -* Escalan automáticamente de acuerdo a la demanda. -* Sin estado. -* Con estado, perduran en el tiempo (Durable Functions), encadenables. - -Solo se paga por el tiempo de CPU usado mientras se ejecuta la función. - -#### 1.10.1.2 Azure Logic Apps - -Con flujo de desarrollo Conjuntos de escalado de máquinas virtualesorientado al -diseño (declarativo). solo ejecutable en la nube. - -* Flujos de trabajo basados en eventos. -* Cuenta con una GUI que permite crear apps a través de conectores. -* Se puede crear sin GUI usando JSON. -* Cuenta con más de 200 conectores y bloques en la opción sin código, se cobra - por conector. - -Los flujos de trabajo se conservan como un archivo JSON con un esquema de flujo -de trabajo conocido. - -#### 1.10.1.3 Comparación entre Functions y Logic Apps - -Functions y Logic Apps pueden crear orquestaciones complejas. Una orquestación -es una colección de funciones o pasos que se ejecutan para realizar una tarea -compleja. - -* Con Functions, se escribe código, es imperativo, gralmente sin estado, - ejecutada localmente o en la nube -* Con Logic Apps, se usa una GUI para definir relaciones, es declarativo, con - estado, ejecutada en la nube. - -#### 1.10.1.4 Azure Service Fabric - -Plataforma de sistemas distribuidos que se ejecuta en Azure o en el entorno -local. - -#### 1.10.1.5 Azure Virtual Desktop - -Es un servicio de virtualización de escritorios y aplicaciones que se ejecuta en -la nube. Permite aislar la máquina del trabajador de la información del negocio. - -* Permite tener Windows en cualquier lugar -* Compatible con los sistemas operativos mas populares o incluso navegadores -web. -* Ventajas: - > - Compatibilidad total con windows. - > - Mejor experiencia de uso. - > - Seguridad. - > - Rendimiento. - > - Inicio de sesión múltiple. - > - Licencias propias. - -Proporciona administración centralizada de la seguridad de los escritorios con -Azure Active Directory, autenticación multifactor y protección de datos mediante -controles de acceso basados en roles (RBAC) - diff --git a/Notes/Azure/content/1.11-Almacenamiento.md b/Notes/Azure/content/1.11-Almacenamiento.md deleted file mode 100644 index 74bed35..0000000 --- a/Notes/Azure/content/1.11-Almacenamiento.md +++ /dev/null @@ -1,74 +0,0 @@ -## 1.11 Almacenamiento - -Los datos que se almacenan en una cuenta de almacenamiento de Azure tienen al -menos 3 copias automáticamente pero no tienen un backup automático a otro centro -de datos. - -### 1.11.1 Tipos de datos aceptados por Azure - -* Estructurados -* No estructurados -* Semi estructurados - -### 1.11.2 Tipos de base de datos en Azure - -Azure acepta bases de datos de tipo SQL y NoSQl. - -### 1.11.3 Azure Blob Storage - -Blob Storage (Binary large object) - -Servicio de almacenamiento no estructurado. Sin restricciones y con soporte para -miles de cargas simultáneas. - -#### 1.11.3.1 Usos de blob - -* Visualizar imágenes o videos en el navegador. -* Acceso distribuido. -* Streaming de audio y video. -* Backup para copia de seguridad y recuperación ante de sastres -* Análisis de datos local o en la nube. -* Almacenamiento de VMs mayor a 8 TB. - -#### 1.11.3.2 Niveles de acceso disponibles - -* Hot, Frecuente: Imágenes o descargas de un sitio web. -* Cold, Esporádico (Al menos 30 días): Reportes mensuales, facturas, etc. -* Archivo (Al menos 180 días): Copias de seguridad. Datos sin conexión. El - acceso y la rehidratación de los datos son los más costosos. - -Donde a menor frecuencia de acceso, mayor tiempo de acceso. - -Es posible crear una URI con un token de Firma de acceso compartido (SAS) para -permitir el acceso a un recurso privado solo durante un período corto de tiempo. - -### 1.11.4 Azure File storage - -El equivalente de a Onedrive. Azure nos provee de la posibilidad de utilizar -discos magnéticos, de estado sólido o algunos de calidad premium, que podemos -utilizar para cuestiones específicas, para alamcenamiento de nuestros datos. - -Recursos compartidos administrados en la nube bajo protocolos SMB y NFS. Pueden -estar en local o en la nube. Similar a OneDrive - -Ideal para: -* Cuando muchas aplicaciones usan recursos compartidos. * Acceder a recursos -desde varias VMs. - -### 1.11.5 Azure Disk Storage - -Discos para Azure Virtual Machines, de manera que las aplicaciones puedan -usarlos. De diferentes tamaños y velocidades (HDD, SSD y SSD Premium) - -### 1.11.6 Azure Queue Storage - -Almacén de datos para la puesta en cola y la entrega confiable de mensajes entre -aplicaciones. - -### 1.11.7 Azure Table storage - -Table Storage es un servicio que almacena datos estructurados no relacionales -(también conocidos como datos NoSQL estructurados o semiestructurados) en la -nube, lo que proporciona un almacén de claves y atributos con un diseño sin -esquema. - diff --git a/Notes/Azure/content/1.12-Web.md b/Notes/Azure/content/1.12-Web.md deleted file mode 100644 index fd291ac..0000000 --- a/Notes/Azure/content/1.12-Web.md +++ /dev/null @@ -1,27 +0,0 @@ -## 1.12 Web - -### 1.12.1 Azure App Service - -Creación rápida de aplicaciones en la nube eficaces basadas en web. - -### 1.12.2 Azure Notification Hubs - -Envíe notificaciones push a cualquier plataforma desde cualquier back-end. - -### 1.12.3 Azure API Management - -Publique API para desarrolladores, asociados y empleados de forma segura y a -escala. - -### 1.12.4 Azure Cognitive Search - -Esta búsqueda completamente administrada se implementa como servicio. - -### 1.12.5 Característica Web Apps de Azure App Service - -Cree e implemente rápidamente aplicaciones web críticas a escala. - -### 1.12.6 Servicio Azure SignalR - -Agregue funcionalidades web en tiempo real con facilidad. - diff --git a/Notes/Azure/content/1.13-Network.md b/Notes/Azure/content/1.13-Network.md deleted file mode 100644 index 88ac9b2..0000000 --- a/Notes/Azure/content/1.13-Network.md +++ /dev/null @@ -1,158 +0,0 @@ -## 1.13 Network - -### 1.13.1 Azure Virtual Network - -Permite a los recursos de Azure comunicarse entre sí, con usuarios de internet y -equipos cliente en local. - -* Funcionalidades: - - > - Aislamiento y segmentación - > - > - Comunicación con internet - > - > - Comunicación entre recursos - > - > > - Redes virtuales. - > > - Puntos de conexión de servicio. - > - > - Comunicación entre recursos locales - > - > > - Redes virtuales de punto a sitio. Desde un equipo ajeno, con una - > > conexión VPN cifrada - > > - Redes privadas virtuales (VPN) de sitio a sitio. La conexión - > > entre el VPN Gateway de microsoft y el propio se cifra y - > > funciona a través de Internet. - > > - Azure ExpressRoute. Una conectividad privada dedicada a Azure - > > que no viaja por Internet ideal, para altas cargas. - > - > - Enrutamiento del tráfico de red - > - > > - Tablas de ruta. Personalizadas para enrutar paquetes en subredes - > > - Protocolo de puerta de enlace de borde (BGP). Propaga las rutas - > > BGP locales a las redes virtuales de Azure. - > - > - Filtrado del tráfico de red - > - > > - Grupos de seguridad de red. Reglas de seguridad de entrada y - > > salida con base en IP, protocolo y puerto. - > > - Aplicaciones virtuales de red. Un máquina virtual especializada - > > con una función especializada (Firewall, optimizar WAN, etc.) - -#### 1.13.1.1 Conexión de redes virtuales - -Puede vincular redes virtuales entre sí mediante el emparejamiento de red -virtual, lo que les permite comunicarse entre si. - -#### 1.13.1.2 Configuración - -Al configurar una red virtual, se define el espacio de direcciones internas con -el formato de Enrutamiento de interdominios sin clases (CIDR). - -* 10.0.0.0/\<8 \| 16 \| 24\> - -Y podemos elegir opcionesde seguridad - -* El servicio Azure Bastion proporciona conectividad RDP y SSH segura e - ininterrumpida a las máquinas virtuales directamente en Azure Portal a - través de SSL. -* Firewall -* DDoS Protection estándar - -Entre las configuraciones adicionales están: - -* Grupo de seguridad de red -* Table de rutas -* Delegación de subred - -### 1.13.2 Azure Load Balancer - -Equilibra las conexiones entrantes y salientes a aplicaciones o puntos de -conexión de servicio. - -### 1.13.3 Azure Application Gateway - -Optimiza la entrega de granjas de servidores de aplicaciones y, al mismo tiempo, -aumenta la seguridad de las aplicaciones. - -### 1.13.4 Azure Content Delivery Network - -Entrega contenido de gran ancho de banda a los clientes globalmente. - -### 1.13.5 Azure DDoS Protection - -Protege las aplicaciones hospedadas en Azure frente a ataques por denegación de -servicio distribuido (DDoS). - -### 1.13.6 Azure VPN Gateway - -Conecta redes locales a Azure vía VPN de sitio a sitio/punto, a sitio, a través -de protocolos IPsec e IKE. - -Necesitan los recursos -* Red virtual -* Hateway subnet -* Dirección IP pública -* Puerta de enlace de red local -* Puerta de enlace de red virtual -* Conexión - -Y los recursos locales - -* Un dispositivo VPN compatible con VPN Gateway. -* Una dirección IPv4 de acceso público. - -### 1.13.7 Azure ExpressRoute - -Genera conexiones privadas entre Azure y la infraestructura, de forma confiable -y rápida, sin utilizar internet público. La comunicación **es privada pero no -está cifrada**. - -El número máximo de circuitos de Azure ExpressRoute por cada suscripción es de -10 - -#### 1.13.7.1 Ventajas - -* Redundancia integrada -* Conectividad con los servicios en la nube de microsoft -* Conectividad local con Gloal Reach de Express Route -* Enrutamiento dinámico - -#### 1.13.7.2 Modelos de conectividad - -Para conectar la red local con la nube de microsoft contamos con las siguientes -opciones: - -* Ubicación de CloudExchange -* Conexión Ethernet de punto a punto -* Conexión universal -* Directamente desde sitios de ExpressRoute - -### 1.13.8 Azure Network Watcher - -Supervisa y diagnostica problemas de red mediante el análisis basado en el -escenario. - -### 1.13.9 Azure Network Security Group (NSG) - -Puede usar el grupo de seguridad de red de Azure para filtrar el tráfico de red -hacia y desde los recursos de Azure de una red virtual de Azure. Un grupo de -seguridad de red contiene reglas de seguridad que permiten o deniegan el tráfico -de red entrante o el tráfico de red saliente de varios tipos de recursos de -Azure. Para cada regla, puede especificar un origen y destino, un puerto y un -protocolo. - -Por ejemplo: Su empresa desea desplegar varios servidores web y servidores de -bases de datos en Azure y se busca limitar los tipos de conexiones desde los -servidores web hacia las bases de datos. - -### 1.13.10 Azure Firewall - -Implementa un firewall de alta seguridad y alta disponibilidad con escalabilidad -ilimitada. - -### 1.13.11 Azure Virtual WAN - -Crea una red de área extensa (WAN) unificada que conecta sitios locales y -remotos. - diff --git a/Notes/Azure/content/1.14-Inteligencia-artificial.md b/Notes/Azure/content/1.14-Inteligencia-artificial.md deleted file mode 100644 index f65502f..0000000 --- a/Notes/Azure/content/1.14-Inteligencia-artificial.md +++ /dev/null @@ -1,55 +0,0 @@ -## 1.14 Inteligencia artificial - -### 1.14.1 Introducción - -* Deep Learning: usa redes neuronales para descubrir, aprender y crecer. -* Machine learning: utiliza datos existentes para entrenar modelos y - pronosticar. - -Tiene servicios de: - -* Visión -* Voz -* Asignación de conocimiento -* Bing search -* Procesamiento de lenguaje natural - -### 1.14.2 Azure Machine Learning - -Se usa cuando se necesita analizar datos para predecir resultados futuros a -partir de datos históricos privados - -* PaaS para realizar predicciones conectándose a datos para entrenar y probar - modelos. -* Ofrece control completo del diseño y entrenamiento de algoritmos. -* Requiere proporcionar los datos - -### 1.14.3 Azure Cognitive Services - -Modelos de ML creados que permiten a una aplicación ver, oír, hablar, entender y -pensCognitive Sear. No se necesitan conocimientos en ML o DS. - -Categorías: -* Lengua -* Voz -* Visión -* Decisión - -No es necesario tener conocimientos de aprendizaje automático ni ciencia de -datos para usar estos servicio. Se accede a ellos por medio de una API. - -#### 1.14.3.1 Azure Cognitive Services personalizer - -Nos permie predecir el comportamiento del usuario o proporcionar a los usuarios -recomendaciones personalizadas en la aplicación - -### 1.14.4 Azure Bot Service - -Funciona internamente con Azure Cognitive Services. Ideal para asistentes -virtuales. - -* Bot Framework. -* Creación de agentes virtuales que pueden usar otros servicios. - -Su caso de uso es para los asistentes virtuales - diff --git a/Notes/Azure/content/1.15-Azure-DevOps-Services.md b/Notes/Azure/content/1.15-Azure-DevOps-Services.md deleted file mode 100644 index 0fe0530..0000000 --- a/Notes/Azure/content/1.15-Azure-DevOps-Services.md +++ /dev/null @@ -1,57 +0,0 @@ -## 1.15 Azure DevOps Services - -Cuenta con un sistema de permisos mucho más granular que el de Github, además es -capaz de generar informes. - -1. Azure Repos - - > - Repositorios de código fuente centralizado para publicar código y - > colaborar. Similares a Github. - -2. Azure Boards - - > - Tableros para gestión de proyectos bajo un modelo de Kanban, informes, - > incidencias, epics, etc. En paralelo con el resto de herramientas de - > Azure. - -3. Azure Pipelines - - > - Herramienta de automatizar el deployment del código, similares a los - > pipelines de Jenkins: - > - > > - Continuos Integration - > > - Continuos Delivery - -4. Azure Artifacts - - > - Repositorio para alojar artefactos que se incluyen en el flujo de - > pruebas o implementación. Asegurar la calidad del código. - -5. Azure Test Plans - - > - Herramientas de pruebas automatizadas para garantizar la calidad antes - > de lanzar software. - -### 1.15.1 GitHub & GitHub Actions - -* GitHub Actions - - > - Automatización de flujos de trabajo basado en triggers, especialmente - > para CI/CD. - -### 1.15.2 Azure DevTest Labs - -Medio automatizado para administrar proceso de compilación, configuración y -anulación de VMs y otros recursos. - -Caso de uso: automatizar la creación y la administración de un entorno de -laboratorio de pruebas. - -Por ejemplo: administrar las máquinas virtuales que los desarrolladores y los -evaluadores necesitan para asegurarse de que una nueva aplicación funciona en -diferentes sistemas operativos. - -Otro ejemplo: Un equipo de desarrolladores de su empresa quiere desplegar y -luego eliminar 50 máquinas virtuales cada semana. 25 de ellas ejecutan Windows -Server y 25 ejecutan Ubuntu Linux. - diff --git "a/Notes/Azure/content/1.16-Monitoreo-y-supervisi\303\263n-de-Azure.md" "b/Notes/Azure/content/1.16-Monitoreo-y-supervisi\303\263n-de-Azure.md" deleted file mode 100644 index 2be5cf1..0000000 --- "a/Notes/Azure/content/1.16-Monitoreo-y-supervisi\303\263n-de-Azure.md" +++ /dev/null @@ -1,17 +0,0 @@ -## 1.16 Monitoreo y supervisión de Azure - -* Azure Advisor: nos brinda recomendaciones y evalúa recursos a través del - portal de Azure o su API. Ideal para el recorte de costos. Disponible en el - portal y la API. -* Azure Monitor: recopila datos para tomar decisiones basados en métricas del - **entorno local o la nube**. Las fuentes son diversas como ser SO, - aplicaciones, suscripciones. Sirve para monitorear las máquinas virtuales o - instancias del contenedor y su escalamiento automático. Además puede enviar - alertas a los grupos de seguridad de Azure Active Directory. -* Azure Service Health: brinda una vista personalizada del estado de los - servicios, regiones y recursos de Azure. Ideal monitorizar los problemas de - menor y mayor importancia de Azure. Supervisa problemas de servicio, - mantenimiento planeado, avisos de estado por parte de Azure. **Ofrece un - análisis oficial de la causa principal** (RCA) de la interrupción en los - incidentes de Azure. - diff --git "a/Notes/Azure/content/1.17-Administraci\303\263n-de-entorno.md" "b/Notes/Azure/content/1.17-Administraci\303\263n-de-entorno.md" deleted file mode 100644 index 1b41105..0000000 --- "a/Notes/Azure/content/1.17-Administraci\303\263n-de-entorno.md" +++ /dev/null @@ -1,60 +0,0 @@ -## 1.17 Administración de entorno - -Al trabajar en la nube es necesario tener un buen control y administración del -trabajo. Azure nos brinda de herramientas para la administración de trabajo, las -cuales pueden ser visuales o basadas en código. - -### 1.17.1 Herramientas visuales - -#### 1.17.1.1 Azure Portal - -Es una consola unificada basada en web que proporciona una alternativa a las -herramientas de línea de comandos. Con Azure Portal, puede administrar su -suscripción a Azure mediante una interfaz gráfica de usuario. - -![image](Notes/Azure/img/AzurePortal.png) - -Además permite generear informes personalizados. - -#### 1.17.1.2 Azure mobile app - -Permite acceder a los recursos de Azure desde dispositivos android e iOS - -* Compatible con iOS y Android -* Supervisa estado de Azure -* Alertas, diagnósticos y correcciones -* Ejecutar comandos de CLI o Azure PowerShell - -### 1.17.2 Herramientas basadas en código - -Las tres primeras son ideales para escenarios de un solo uso. - -* Azure PowerShell. Permite ejecutar coomandos llamados cmdlets o command - tests, que llaman a la API. Por su sintaxis, es ideal para usuarios de - windows. -* Azure CLI. Permite ejecución de comandos bash que llaman a la API REST de - Azure. Por su sintaxis, es ideal para usuarios de Linux. -* Cloud Shell. Es Azure CLI pero desde el navegador. -* Azure Resources Manager - -#### 1.17.2.1 Azure resources manager templates (ARM) - -Es un administrador de plantillas de recursos con un formato declarativo en -JSON. Pueden ejecutar scripts de PowerShell y Bash antes o después de la -configuración del recurso. - -Azure resource manager templates es la mejor forma para provisionar recursos, -funcionan con paralelismo y son ideales para versionarse en repositorios de -código. - -* Formato JSON -* Capaz de crear múltiples recursos en paralelo. -* Se comprueban antes de ejecutarse -* Se define el estado y configuración de cada recurso, la plantilla hace el - resto. - -Caso de uso: Su empresa tiene varias unidades de negocio. Cada una de ellas -necesita 10 recursos de Azure para sus operaciones diarias. Todas ellas -necesitan el mismo tipo de recurso de Azure y se necesita automatizar la -creación de estas. - diff --git a/Notes/Azure/content/1.18-Azure-serverless.md b/Notes/Azure/content/1.18-Azure-serverless.md deleted file mode 100644 index 691d584..0000000 --- a/Notes/Azure/content/1.18-Azure-serverless.md +++ /dev/null @@ -1,47 +0,0 @@ -## 1.18 Azure serverless - -### 1.18.1 Azure functions - -Alojamiento de métodos o funciones que se ejecutan en respuesta a eventos: - -* Solicitudes HTTP -* Temporizadores -* Mensajes -* Acciones - -Ventajas: - -* Escalado automático. -* Pago por función ejecutada. -* Con o sin estado. -* Tareas de orquestación (durable functions). - -Lenguajes compatibles - -* C# -* JavaScript -* Python -* TypeScript -* Java -* Shell - -Funciona de manera imperativa. - -### 1.18.2 Azure Logic Apps - -> Logic Apps es excelente a la hora de orquestar una gran variedad de servicios -> distintos mediante sus API para pasar y procesar los datos a través de los -> muchos pasos de un flujo de trabajo. - -* No-code/Low-code. -* Ideal par automatizar y organizar. -* Integra aplicaciones, datos y sistemas. - -Funciona de manera declarativa. - -### 1.18.3 Diferencias - -Ambos trabajan con eventos, sin servidores. La diferencia es que functions -trabaja en el numero de ejecuciones y el tiempo, mientras que logic apps cobra -según el número y tipo de conectores lógicos. - diff --git a/Notes/Azure/content/1.19-Azure-Internet-of-Things.md b/Notes/Azure/content/1.19-Azure-Internet-of-Things.md deleted file mode 100644 index 1368cdf..0000000 --- a/Notes/Azure/content/1.19-Azure-Internet-of-Things.md +++ /dev/null @@ -1,72 +0,0 @@ -## 1.19 Azure Internet of Things - -Debido a que aún quedan muchos estándares por definir en IoT, el contar con un -SDK y software propio de Microsoft brinda mayor seguridad. - -¿De dónde vienen los datos? - -* Sensores: - - > - Temperatura. - > - Humedad. - > - Códigos (barras, QR). - > - Proximidad. - > - Ubicación geográfica. - > - Sonido. - > - Movimiento. - > - Biométricos. - -* Azure IoT Hub. Se basa en IoT Hub y agrega un panel que le permite conectar - bidireccionalmente, supervisar y administrar sus dispositivos de IoT. Ideal - si solo se requiere telemetría remota y actualizaciones, sin una interfaz - gráfica. Soporta múltiples protocolos y tiene SDK en los lenguajes populares - (C, C#, Java, Python, Node.js) - - > - Centro de mensajes entre aplicaciones IoT y dispositivos. - > - Permite control remoto manual o automatizado de dispositivos. - > - Cuenta con supervisión - -* Azure IoT Central. SaaS para crear aplicaciones de IoT usando plantillas - específicas de la industria. Ideal cuando se requiere una interfaz gráfica - (GUI) para el visualizado de informes y errores. - - > - Basado en IoT Hub con interfaz visual. - > - Posee plantillas para escenarios comunes. - -* Azure Sphere. crea una solución de IoT de un extremo a otro de alta - seguridad para los clientes que lo abarca todo, desde el hardware y el - sistema operativo del dispositivo (Sphere OS, basado en linux) hasta el - método seguro para enviar mensajes desde el dispositivo al centro de - mensajes. Ideal para dispositivos en los que se requiera garantizar que no - han sido modificados y la seguridad sea un factor crítico (cajeros, cajas de - votación, etc). - - > - Avnet Azure Sphere MT3620 Starter Kit. - > - > - Seeed MT3620 Mini Dev Board - > - > - Kit de desarrollo de Seeed Azure Sphere MT3620 - > - > - Partes: - > - > > - Unidad de Microcontrolador (MCU). Procesa SO y señales. - > > - Sistema operativo (SO). Controla la comunicación con el servicio - > > de seguridad y puede ejecutar el software del proveedor. - > > - Servicio de seguridad (AS3). Se encarga de asegurar la - > > integridad del dispositivo. - > - > - Requisitos:.. image:: Notes/Azure/img/EstructuraDataCenterAzure.jpg - > - > > - Kit de desarrollo. - > > - > > - Windows - > > - > > > - Visual Studio. - > > > - Visual Studio Code. - > > > - Línea de comandos con CMake. - > > - > > - Linux - > > - > > > - Visual Studio Code. - > > > - Línea de comandos con CMake. - diff --git a/Notes/Azure/content/1.2-Datacenter.md b/Notes/Azure/content/1.2-Datacenter.md deleted file mode 100644 index 8f85683..0000000 --- a/Notes/Azure/content/1.2-Datacenter.md +++ /dev/null @@ -1,26 +0,0 @@ -## 1.2 Datacenter - -* Una facilidad física -* Con un grupo de servidores conectados en red -* Con su propia alimentación de energia, enfriado e infraestructura de redes - -Se mantiene constantemente en actualización hacía nuevos servicios, -descontinuando los obsoletos. - -Sus servicios se pueden dividr en 10: - -* Computación -* Networking -* Almacenamiento -* Móvil -* Base de datos -* Web -* IOT (Internet of things) -* Macrodatos -* AI -* DevOps - -Su funcionamiento se basa en la virtualizanción de computadoras y sus -componentes principales en servidores que son orquestados dentro de un data -center, recibiendo instrucciones del usuario. - diff --git a/Notes/Azure/content/1.20-Seguridad-en-Azure.md b/Notes/Azure/content/1.20-Seguridad-en-Azure.md deleted file mode 100644 index 2b39ed1..0000000 --- a/Notes/Azure/content/1.20-Seguridad-en-Azure.md +++ /dev/null @@ -1,75 +0,0 @@ -## 1.20 Seguridad en Azure - -### 1.20.1 Azure Security Center - -Servicio que brinda un punto único donde revisar la visibilidad del nivel de -seguridad de los servicios en Azure y local. Emite recomendaciones para mejorar -la seguridad. - -Azure Security Center puede definir una lista de aplicaciones permitidas para -asegurarse de que solo se puedan ejecutar las permitidas - -* Supervisa la configuración de seguridad. -* Aplica cambios automáticamente. -* Brinda recomendaciones. -* Detecta y bloquea amenazas de malware con ML. -* Detecta ataques e investiga amenazas. -* Proporciona control de acceso Just-in-Time.Bloqueando el tráfico el tráfico - selectivamente en ciertos puertos. - -Con Azure Security Center puede definir una lista de aplicaciones permitidas -para asegurarse de que solo se puedan ejecutar las permitidas. Azure Security -Center también puede detectar y bloquear la instalación de malware en las -máquinas virtuales. - -### 1.20.2 Puntuación de seguridad - -Security center ofrece un número representativo del nivel de seguridad y -permite: - -* Notificar el estado actual. -* Mejorar el nivel. -* Compara puntos de referencia. - -### 1.20.3 Azure Sentinel - -Azure Sentinel es el SIEM basado en la nube de Microsoft. Un SIEM agrega datos -de seguridad de muchos orígenes diferentes para proporcionar capacidades -adicionales para la detección de amenazas y la respuesta a estas. - -SIEM (security information and event management) en la nube de análisis de -seguridad inteligente y análisis de amenazas. - -* Recopila datos a gran escala de usuarios, dispositivos, infraestructura y - aplicaciones -* Detecta amenazas no detectadas anteriormente -* Investiga con IA a gran escala de actividades sospechosas -* Responde a incidentes por medio de la orquestación de tareas comunes - integradas. - -### 1.20.4 Azure Key Vault - -Servicio centralizado para almacenar datos confidenciales. Administra: - -* Secretos. -* Claves de cifrado. -* Certificados SSL/TLS. -* Respaldados por módulos de seguridad de hardware (HMS). - -### 1.20.5 Azure Dedicated Host - -Algunas organizaciones deben ajustarse a un cumplimiento normativo que las -obliga a ser el único cliente que usa el equipo físico en el que se hospedan sus -máquinas virtuales - -* Servidores físicos que no se comparten con otros inquilinos y/o - aplicaciones. -* Ofrece visibilidad y control. -* Asegura requisitos de cumplimiento de seguridad. -* Personalizable. -* Puede tener mayor costo. -* Linux y windows disponibles - -El costo es por host dedicado, independientemente de los host virtuales que se -implementen. - diff --git a/Notes/Azure/content/1.21-Conectividad-de-red-segura.md b/Notes/Azure/content/1.21-Conectividad-de-red-segura.md deleted file mode 100644 index 7f92730..0000000 --- a/Notes/Azure/content/1.21-Conectividad-de-red-segura.md +++ /dev/null @@ -1,133 +0,0 @@ -## 1.21 Conectividad de red segura - -La defensa en profundidad se puede visualizar como un conjunto de capas, con los -datos que se deben proteger en el centro. - -* capa de seguridad física es la primera línea de defensa para proteger el - hardware informático del centro de datos. -* capa de identidad y acceso controla el acceso a la infraestructura y al - control de cambios. -* capa perimetral usa protección frente a ataques de denegación de servicio - distribuido (DDoS) para filtrar los ataques a gran escala antes de que - puedan causar una denegación de servicio para los usuarios. -* capa de red limita la comunicación entre los recursos a través de controles - de acceso y segmentación. -* capa de proceso protege el acceso a las máquinas virtuales. -* capa de aplicación ayuda a garantizar que las aplicaciones sean seguras y - estén libres de vulnerabilidades de seguridad. -* capa de datos controla el acceso a los datos empresariales y de clientes que - es necesario proteger. - -Los principios comunes de los datos son CIA, por sus siglas en inglés: - -* Confidencialidad. Principio de privilegios mínimos -* Integridad. Hash para garantizar la integridad -* Disponibilidad. Evitar ataques DDoS. - -### 1.21.1 Servicios de Seguridad de Red - -* Azure Firewall. Con estado, usa una IP pública estática. Permite configurar: - - > - Reglas de aplicación - > - Reglas de red - > - Reglas de traducción de direcciones de red (NAT) - -* Azure DDoS Protection - - > - Básico. Habilitado por defecto en todos los servicios. - > - > - Estándar. Tiene que ser habilitado de manera manual en el DDoS - > marketplace. Si un servicio está protegido y el ataque causa - > autoescalamiento los costos serán cubiertos por Microsoft y se - > retornarán los créditos correspondientes. Puede ayudar a evitar: - > - > > - Ataques volumétricos - > > - Ataques de protocolo - > > - Ataques a nivel de recurso (nivel de aplicación) - -* Grupos de seguridad de red. Un firewall interno. Filtra el tráfico desde y - hacía recursos de Azure en una red virtual de Azure. Funcionan a partir de - reglas con las siguientes propiedades - - > - Nombre - > - Priority - > - Origen - > - Protocolo - > - Dirección - > - Intervalo de puertos - > - Acción. - -### 1.21.2 Azure active identity - -* Servicios de Identidad - - > - Autenticación (AuthN): Solicitar credenciales legítimas. establece la - > identidad del usuario. - > - Autorización (AuthZ): Establecer el nivel de acceso a una persona o - > servicio autenticado. - -* Azure Active Directory, no condunfir con Active Directory (local). Es un - servicio de administración de acceso e identidades basado en la nube. Azure - AD permite a una organización controlar el acceso a las aplicaciones y los - recursos en función de sus requisitos empresariales. Aquí se conectan las - aplicaciones para obtener tokens de seguridad. - - > - Autenticación. Normal o Multifactor, lista de contraseñas prohibidas y - > servicios de bloqueo. - > - Inicio de sesión único. Una sola identidad para el acceso a múltiples - > recursos y aplicaciones de distintos proveedores. - > - Administración de aplicaciones. - > - Administración de dispositivos. - -* MultiFactor Authentication. Con SMS, llamada telefónica. - -* Inicio de Sesión Único (SSO) - -### 1.21.3 Acceso condicional - -Herramienta que usa Azure Active Directory para permitir (o denegar) el acceso a -los recursos en función de señales de identidad, tales como la identidad, su -ubicación y el dispositivo. - -### 1.21.4 Comandos del CLI - -Para mostrar grupos de seguridad asociados - -``` bash -az network nsg list \ - --resource-group \ - --query '[].name' \ - --output tsv -``` - -Para mostrar las reglas asociadas al grupo - -``` bash -az network nsg rule list \ - --resource-group \ - --nsg-name my-vmNSG -``` - -El comando anterior, en modo tabla se vería así - -``` bash -az network nsg rule list \ -*-resource-group \ -*-nsg-name my-vmNSG \ -*-query '[].{Name:name, Priority:priority, Port:destinationPortRange, Access:access}' \ -*-output table -``` - -Para crear una reglas de seguridad podemos hacer algo parecido a - -``` bash -az network nsg rule create \ - --resource-group \ - --nsg-name my-vmNSG \ - --name allow-http \ - --protocol tcp \ - --priority 100 \ - --destination-port-ranges 80 \ - --access Allow -``` - diff --git a/Notes/Azure/content/1.22-Cumplimiento-de-privacidad.md b/Notes/Azure/content/1.22-Cumplimiento-de-privacidad.md deleted file mode 100644 index a36ceb1..0000000 --- a/Notes/Azure/content/1.22-Cumplimiento-de-privacidad.md +++ /dev/null @@ -1,30 +0,0 @@ -## 1.22 Cumplimiento de privacidad - -Hacer aquello que determina una obligación, una ley, una orden, un castigo, un -compromiso, una promesa. - -* Globales -* Gubernamentales -* Sectoriales -* Regionales - -### 1.22.1 Declaración de privacidad - -Explica qué datos personales recopila Microsoft, cómo los usa y para qué. Abarca -todos sus servicios, sitios, software, servidores y dispositivos. - -### 1.22.2 Términos de los servicios en línea - -* Contrato legal entre Microsoft y el cliente. -* Detalla las obligaciones de ambas partes respecto al procesamiento y - seguridad de los datos. -* Aplica a servicios bajo licencia. - -### 1.22.3 Anexo de protección de datos (Data Protection Addendum) - -Define términos de seguridad y procesamiento de datos para servicios en línea: - -* Cumplimiento de leyes -* Revelación de datos -* Seguridad de datos - diff --git a/Notes/Azure/content/1.23-Gobernanza.md b/Notes/Azure/content/1.23-Gobernanza.md deleted file mode 100644 index eff447c..0000000 --- a/Notes/Azure/content/1.23-Gobernanza.md +++ /dev/null @@ -1,75 +0,0 @@ -## 1.23 Gobernanza - -El término gobernanza describe el proceso general por el que se establecen -reglas y directivas y se garantiza que esas reglas y directivas se aplican. - -* RBAC (Quien) -* Policy (Que) -* Budget (Cuanto) - -### 1.23.1 RBAC - -Permite crear roles que definen permisos de acceso. El control de acceso basado -en roles se aplica a un ámbito. Donde un ambito pueden ser: - -* Un grupo de administración (una colección de varias suscripciones) -* Una sola suscripción -* Un grupo de recursos. -* Un solo recurso - -Los permisos se extienden hacia abajo, un propietario de una suscripción será -dueño también de todos sus grupos de recursos y recursos. - -RBAC de Azure se aplica a cualquier acción que se inicie en un recurso de Azure -que pasa por Azure Resource Manager, funciona para grupos e individuos. - -Los permisos de acceso se administran en el panel Control de acceso (IAM) de -Azure Portal. - -### 1.23.2 Bloqueos de recursos (Resource locks) - -Los bloqueos de recursos impiden que se eliminen o modifiquen recursos por -error. - -### 1.23.3 Niveles de bloqueo - -* CanNotDelete: Se necesita desbloquear para eliminar, la lectura y - modificación no se ven afectados. -* ReadOnly: Solo lectura, la modificación y la eliminación están bloqueados, - similar a aplicar a todos los usuarios autorizados el rol Lector en RBAC de - Azure. - -### 1.23.4 Azure blueprints - -Para evitar la desactivación de bloqueos accidental podemos usar Azure -blueprints. Azure Blueprints nos permite definir el conjunto recursos estándar -de Azure que la organización necesita. - -Azure Blueprints puede definir un conjunto repetible de herramientas de -gobernanza y recursos de Azure estándar que la organización necesita. - -Azure Blueprints organiza la implementación de varias plantillas de recursos y -de otros artefactos, como son los siguientes: - -* Asignaciones de roles -* Asignaciones de directivas -* Plantillas de Azure Resource Manager -* Grupos de recursos - -Para implementar un proyecto en Azure Blueprints hay que realizar estos tres -pasos: - -1. Crear una instancia de Azure Blueprints -2. Asignar ese plano técnico -3. Llevar un seguimiento de las asignaciones del plano técnico - -Azure crea un registro que asocia un recurso con el plano técnico (lo que debe -ser implenentado) que lo define, y gracias a esta conexión podemos realizar el -seguimiento y la auditoría de nuestras implementaciones. - -Los planos técnicos están versionados. - -Cada componente de la definición de un plano técnico se denomina artefacto y -estos artefactos pueden tener configuraciones de esta manera se pueden tener -planos estandar con la flexibilidad de las configuraciones. - diff --git a/Notes/Azure/content/1.24-Etiquetas.md b/Notes/Azure/content/1.24-Etiquetas.md deleted file mode 100644 index 76b9152..0000000 --- a/Notes/Azure/content/1.24-Etiquetas.md +++ /dev/null @@ -1,11 +0,0 @@ -## 1.24 Etiquetas - -Las etiquetas proporcionan información extra o metadatos sobre los recursos o -grupos de recursos. - -Las etiquetas también se pueden administrar mediante Azure Policy, no son -heredables por defecto, pero podemos usar Azure policy para que lo sean. -Funcionan como pares nombre-valor. - -Un uso de estas es la identificación de costos de facturación. - diff --git a/Notes/Azure/content/1.25-Azure-policy.md b/Notes/Azure/content/1.25-Azure-policy.md deleted file mode 100644 index 0593cd6..0000000 --- a/Notes/Azure/content/1.25-Azure-policy.md +++ /dev/null @@ -1,22 +0,0 @@ -## 1.25 Azure policy - -Azure Policy es un servicio de Azure que permite crear, asignar y administrar -directivas que controlan o auditan recursos de acuerdo a una serie de reglas. -Por ejemplo: especificar los tamaños de SKU permitidos. - -``` bash -