Il servizio AKS e la risorsa ACR di Microsoft Azure permettono di realizzare velocemente cluster orchestrati utilizzati per implementare soluzioni basate sulla tecnologia Docker. Nella progettazione d'infrastrutture, la sicurezza by design è un requisito obbligatorio per ridurre al massimo la superficie attaccabile dell'infrastruttura. Dopo un breve richiamo ai concetti alla base di AKS e ACR, con l'approccio del InfrastructureAsCode il talk si concentrerà su due dimostrazioni, mostrando i passi da seguire per i casi d'uso: il deploy su singolo nodo Docker ed il deploy su cluster Kubernetes, delle immagini caricate su registry privato. Nelle demo verrà mostrato come rendere sicuri, con certificati digitali, i canali usati dalla Docker-cli per il deploy e management delle infrastrutture.
4. #DOH19 4
About me
• Ho esperienza quasi trentennale di sistemi e
software in ambito scientifico e della pubblica
amministrazione;
• Dal 2000 gestisco sistemi in ottica Remoting;
• Da 5 anni studio la cultura DevOps ed ho appreso che
ogni problema ha soluzione ma la tecnologia non
risolve tutti i problemi.
5. #DOH19 5
What, How, Why?
• La security nel mondo dei container:
• Nel codice: networking attraverso canali SSL e TLS, controllo degli input di
frontend;
• In infrastruttura: analisi dei files in ingresso con tool antivirus/antimalware,
analisi delle vulnerabilities nelle immagini usate, uso di un registry privato;
• Nel management dell’infrastruttura: canali di comunicazione per cli e
dashboard protetti con SSL e TLS; Uso delle risorse Secrets; Accesso VPN.
• Nei container in cloud valgono le stesse regole? Assolutamente SI!
• DockerDesktop install&run e la security? E’ da configurare!
• Da dove inziamo? Proteggendo l’headquarters!
7. #DOH19 7
Infrastructure as Code
• Costruzione e gestione dell’infrastruttura attraverso definizioni
formali delle risorse e degli stati da raggiungere.
• Uso delle tecniche di design pattern in ambito infrastrutturale.
• Modelli per il change management delle unità di processo:
Ad-hoc, Configuration synchronization, Immutable infrastructure, Containerized services.
• La security agisce su due aspetti:
• L’unità di processo, generalizzazione del concetto di Server, in cui valutare
superficie di attacco e vulnerabilità del software presente;
• Il canale di comunicazione attraverso cui sono comunicate le definizioni che
innescano il change management dell’infrastruttura.
• Concentriamoci sul Modello Containerized Services.
8. #DOH19 8
Azure Container Service
• Il Azure Container Service verrà ritirato il 31 gennaio 2020
• Migrazioni:
• da Azure Container con Kubernetes a AKS o aks-engine (opensource);
• da Azure Container con Docker a Docker EE Basic o Standard/Advanced;
• Azure Container con DC/OS a Mesosphere DC/OS Enterprise o Open Source.
• Architettura di security:
SCRIPT
9. #DOH19 9
Azure Container Registry
• Registry privato d’infrastruttura in cui depositare le immagini dei
container utilizzati dalle infrastrutture gestite.
• AAI:
• RBAC Individuale, tramite il comando ‘az acr login --name <acrName>’ e
sfruttando la pre-autenticazione di ‘az login’ un token con validità 1h è
created/cached per eseguire ‘docker push <acrLoginServer>/hello-world:v1’,
l’accesso si basa sugli strumenti IAM e Azure AD;
• Entità di Servizio, oggetto definito in Azure AD consente l’autenticazione
headless ad applicazioni e servizi per accedere al registry; si basa sul
meccanismo APP_ID/Secret utilizzando valori in formato GUID. All’oggetto
sono attribuibili i ruoli: AcrPull, AcrPush, Proprietario, è utilizzabile con
‘docker login myregistry.azurecr.io --username $SP_APP_ID --password $SP_PASSWD’.
• Il servizio AKS è integrabile con un Registry ACS per associazione.
10. #DOH19 10
Azure Kubernetes Service
• Gestione semplificata di un cluster per l’orchestrazione di container.
• Security
• AKS with Role-Based Access Control (RBAC): account di servizio e
integrazione con AAD a cui associare ruoli locali o estesi al cluster.
• AKS secrets: gestione dei dati sensibili (es. credenziali) necessari ai pod.
• Ingress Controller and Ingresses: LoadBalancer e filtering per il traffico in
ingresso ai pod applicative dell’infrastruttura.
• Network policies: accesso del servizio alle tecnologie Azure per il
networking così da sfruttare subnet virtuali, Network Security Group,
ExpressRoute, VPN.
• Image Hardening: assegnare l’esecuzione del processo interno al container
ad uno user e non al root locale
• Azure API management
12. #DOH19 12
Criticità, il fianco scoperto da proteggere
• Accesso alla parte applicativa: esclusivamente via HTTPS tramite un
bilanciatore di carico per con certificato Let’s Encrypt.
• Accesso ai vari domini (Frontend, Backend, API) via path (Es.
www.acme.com/f/spa1 , www.acme.com/bc/function1,
www.acme.com/api/function1).
• Un registry dedicato per ogni ambiente (develop, staging, product).
• Image Hardening per tutte le immagini depositate nei registry
staging e product.
• Credenziali non riassegnabili individuali e per servizio con
assegnazione dei ruoli sfruttando AIM AAD e RBAC.
• Uso degli strumenti di Network policy per gestire la connettività
diretta al cluster.
17. 17
Deploy di uno stack su AKS con
kubectl attraverso un canale sicuro
18. #DOH19 18
Recap
• Gli strumenti che implementano in cloud il Modello Containerized
Services gestiscono l’accesso via CLI con meccanismi forti di
autenticazione basati su token e certificati.
• Ridurre la ‘superfice attaccabile’ dell’infrastruttura attenua ma non
annulla la pericolosità degli attacchi.
• La gestione delle identità degli oggetti che interagiscono
nell’infrastruttura non è uno sterile consumo di tempo.
• Una parte della gestione della security nei container presenta
problemi e ha soluzioni simili alle VM e ai sistemi fisici.
• La security è un processo dinamico e non statico.
20. #DOH19 20
Bibliografia
• Infrastructure As Code
• Infrastructure as Code
• IaC on Azure – An introduction of Infrastructure as Code (IaC) with Azure
Resource Manager (ARM) Template
• How Azure CLI Manages Your Access Tokens
• Docker security
• docker/docker-credential-helpers
• Protect the Docker daemon socket
• az login
• Gestire l'accesso alle risorse di Azure usando RBAC e il portale di Azure
21. #DOH19 21
Bibliografia
• AKS
• Azure Kubernetes Service (AKS) Security Features - DZone Security
• Secure Kubernetes Services with Ingress, TLS and Let's Encrypt
• Kubernetes RBAC and TLS certificates – Kubernetes security guide (part 1). |
Sysdig
• Using OpenVPN on Azure For a Low Cost, Private VPN - Wintellect
• Documentazione del gateway VPN
• Concetti - Funzionalità di rete nel servizio Azure Kubernetes
• Oggetti applicazione e oggetti entità servizio in Azure Active Directory -
Microsoft identity platform
22. #DOH19 22
Bibliografia
• ACR
• Azure Container Registry: Public preview of Helm Chart Repositories and
more | Blog | Microsoft Azure
• Azure Container Registry Documentation - Tutorials
• SKU di Registro Azure Container
• Integrare Container Registry di Azure con il servizio Azure Kubernetes
• docker login
• Autenticazione al Registro Azure Container con entità servizio
• Eseguire l'autenticazione con un Registro Azure Container
23. #DOH19 23
Bibliografia
• ACS
• Il servizio Azure Container verrà ritirato il 31 gennaio 2020 | Aggiornamenti
di Azure | Microsoft Azure
• Docker for Azure setup & prerequisites
• Docker Engine - Enterprise for Azure
• Get Familiar with Docker Enterprise Edition Client Bundles - Docker Blog
• Docker - Docker Reference Architecture: Universal Control Plane Service
Discovery and Load Balancing for Swarm
24. #DOH19 24
Bibliografia
• criticità della piattaforma dal punto di vista della security
• Azure Kubernetes Service (AKS) Security Features - DZone Security
• Security concepts for applications and clusters in Azure Kubernetes Service
(AKS)
• Best practices for cluster security and upgrades in Azure Kubernetes Service
(AKS)
• Securing Kubernetes on Microsoft Azure: are your container doors wide
open?
• Let's Encrypt - Free SSL/TLS Certificates
25. #DOH19 25
Bibliografia
• Demo
• configurare con certificati digitali le connessioni usate da docker-cli per il deploy
• Verify repository client with certificates
• Deploy di un'immagine su ACR
• Setup Kubernetes Ingress with SSL-Passthrough
• Tutorial - Prepare a container registry for Azure Container Instances
• Eseguire l'autenticazione con un Registro Azure Container
• Deploy di un'immagine su VM con docker engine
• Secure services with TLS
• Deploy Docker containers fast to Microsoft Azure
• deploy di un container su ACS - Docker for Azure
• Deploy Docker containers fast to Microsoft Azure
• Deploy di uno stack su AKS
• Secure Kubernetes Services with Ingress, TLS and Let's Encrypt
• Kubernetes on Azure tutorial - Prepare an application