lunes, 18 de marzo de 2019

Habilitar Content trust en Azure ACR (Azure Container Registry)

ACR content trust te permite firmar las imágenes que se envían a tu registro. Los consumidores de tus imágenes (personas o sistemas que obtienen imágenes de tu registro) pueden configurar a sus clientes para que solo obtengan imágenes firmadas. Cuando un consumidor de imágenes extrae una imagen firmada, el cliente Docker verifica la integridad de la imagen. En este modelo, los consumidores están seguros de que las imágenes firmadas en su registro fueron efectivamente publicadas por uno mismo, y que no se han modificado desde su publicación

Como primeros pasos para habilitar esto es necesario utilizar el SKU Premium de ACR, esto se puede configurar tanto para un ACR nuevo como para uno existente:






























Podemos verificar que se encuentra correctamente habilitado mediante el CLI de Azure ejecutando:

az acr config content-trust show -n cibiriregistry









Para que esto funcione tiene que estar habilitado desde el lado cliente para poder trabajar con imágenes firmadas, en palabras mas sencillas en el cliente Docker tiene que estar habilitado. Esto se puede realizar mediante el siguiente comando:

export DOCKER_CONTENT_TRUST=1

En el caso que no se quiera habilitar a nivel global de Docker se puede hacer a nivel de cada build mediante el siguiente comando

docker build --disable-content-trust=false -t cibiriregistry.azurecr.io/test-apache:latest .









Elegimos la opción anterior y hacemos el push de la imagen hacia ACR:

docker push cibiriregistry.azurecr.io/test-apache:latest

Durante el proceso nos va a solicitar una contraseña para poder subirla a ACR, esta contraseña sera utilizada luego para hacer el pull de la imagen











Luego cuando queramos hacer el pull de la imagen solo nos va a permitir hacer el mismo si la imagen esta firmada, caso contrario vamos a obtener un error como el siguiente:

No valid trust data for unsigned


Es importante destacar que esta característica esta en vista previa y puede sufrir modificaciones.

Espero que les sirva la información.













miércoles, 6 de marzo de 2019

Instalar Docker CE en Debian 9 "Stretch"

En este post vamos a ver la instalacion de Docker CE en sistemas operativos Debian version 9 "Stretch", al final de post vamos a ver una serie de mejores practicas y solucion de errores comunes post instalacion.

Previo a la instalacion de cualquier paquete en los sistemas operativos es recomendable contar con todo actualizado antes de empezar, para esto ejecutaremos:

apt-get update
aptg-get upgrade -y

Una vez realizado esto estamos en condiciones de instalar Docker, para esto primero instalamos estas dependencias:

sudo apt-get install apt-transport-https ca-certificates software-properties-common curl -y

Ahora bajamos la key para acceder a los repositorios de Docker:

curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | sudo apt-key add -

Agregamos el repositorio de Docker.

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable"

Actualizamos los repositorios y procedemos a instalar Docker:

sudo apt-get update
sudo apt-get install docker-ce -y


Hasta aca todo bien, ya tenemos Docker instalado y funcionando en nuestro Servidor:






Puede funcionar de manera default, pero sugiero hacer modificaciones para la gestion remota y la rotacion de logs (me paso que los logs nunca se rotan y da como consecuencia un disco lleno que se pone en solo lectura y termina afectando a las aplicaciones)

A continuacion dejo unos comandos para configurar esto, el mismo crea el archivo daemon.json dentro del directorio /etc/docker


echo '{' > /etc/docker/daemon.json
echo '        "hosts": [ "tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"],' >> /etc/docker/daemon.json
echo '        "log-driver": "json-file",' >> /etc/docker/daemon.json
echo '        "log-opts": {' >> /etc/docker/daemon.json
echo '            "max-size": "10m",' >> /etc/docker/daemon.json
echo '            "max-file": "2"' >> /etc/docker/daemon.json
echo '        }' >> /etc/docker/daemon.json
echo '}' >> /etc/docker/daemon.json









Esto configura el tamaño maximo de los logs y la cantidad de archivos de logs a mantener, tambien expone la API de administracion a traves de su puerto default (2375) *

Si hacemos un CAT del archivo previamente mencionado podemos ver que los valores se escribieron correctamente en el:













Concluido esto reiniciamos el servicio de docker mediante service docker restart
En el caso que el servicio falle al iniciar ejecutar estos comandos y Docker volvera a funcionar con los cambios anteriores guardardos:

sudo cp /lib/systemd/system/docker.service /etc/systemd/system/
sudo sed -i 's/\ -H\ fd:\/\///g' /etc/systemd/system/docker.service
sudo systemctl daemon-reload
sudo service docker restart


(*) La API de administracion permite administrar Docker de manera remota, ya sea por linea de comando o utilizando aplicaciones como Portainer. Es importante destacar que esta API debe estar protegida mediante certificados TLS para evitar su mal uso.

En el caso de no poder segurizarla con certificados recomiendo bloquear acceso a este puerto desde todos los host de la red, especialmente desde Internet. En el caso de necesitar acceder a este puerto permitir mediante IPTABLES u otro Firewall unicamente la IP desde donde se administrara este equipo.

Espero que les sirva esta informacion.