Helion OpenStack 2.X Ridimensionamento istanza Nova – Abilita/Disabilita

2016-03-17

Helion OpenStack 2.X Ridimensionamento istanza Nova – Abilita/Disabilita

Machine-translated — the English original is authoritative.

Abilita il ridimensionamento dell'istanza e la migrazione a freddo

Per progettazione, Helion OpenStack 2.X ha disabilitato il ridimensionamento dell'istanza Nova e la migrazione a freddo Nova, poiché questi servizi presentano un rischio di sicurezza nel modo in cui sono attualmente implementati in OpenStack (Kilo).

Il rischio di sicurezza

Entrambi questi servizi richiedono l'accesso SSH senza password con la possibilità di modificare il filesystem sottostante. Un nodo di calcolo deve essere in grado di accedere a tutti gli altri nodi di calcolo. Questo comporta l'assenza di contenimento tra gli host nel caso in cui un attaccante o un virus ottenga l'accesso a uno di essi.

Futuro: Ci sono diversi blueprint upstream che cercano di affrontare questo problema sfruttando il processo sicuro di migrazione live di Nova con alcune modifiche – questo utilizza libvirt/qemu per trasferire i dati in modo sicuro tramite TLS.

Se sei disposto ad accettare il suddetto rischio di sicurezza, procedi –

Procedura

Questa operazione dovrebbe essere eseguita da un ingegnere Linux/OpenStack competente. I passaggi sono piuttosto semplici:

Abilita il ridimensionamento dell'istanza

Per esempio:

# Sul nodo deployer - genera una coppia di chiavi (questo deve essere fatto solo una volta, la stessa coppia di chiavi deve essere utilizzata su ogni host di calcolo)

ssh-keygen -t rsa -f ~/nova_resize/id_rsa -N ''

#Questo risulterà in due file: la chiave privata (id_rsa) e la chiave pubblica (id_rsa.pub)

# trasferisci la chiave privata - ripeti questo per tutti i nodi di calcolo
scp nova_resize/id_rsa* stack@helion-cp1-comp0001-mgmt:~/

# Su ogni host di calcolo assicurati che la seguente cartella esista:

mkdir /var/lib/nova/.ssh

# Su ogni host di calcolo copia la chiave privata nella cartella .ssh e imposta le autorizzazioni/proprietario appropriati

cp id_rsa /var/lib/nova/.ssh
chmod 600 /var/lib/nova/.ssh/id_rsa
chown nova:nova /var/lib/nova/.ssh/id_rsa

# Su ogni host aggiungi la chiave pubblica all'elenco delle chiavi autorizzate

cat id_rsa.pub >> /var/lib/nova/.ssh/authorized_keys

# Disabilita il controllo rigoroso dell'host su ogni host di calcolo

echo 'StrictHostKeyChecking no' >> /var/lib/nova/.ssh/config

# Su ogni host di calcolo assicurati che l'utente nova possa accedere a una shell

usermod -s /bin/bash nova

# Modifica i vari file policy.json per consentire la migrazione e il ridimensionamento

"compute:resize": "rule:admin_api",

"compute_extension:admin_actions:migrate": "rule:admin_api",

# Su ogni nodo controller modifica il file nova_policy.json di Horizon per abilitare il ridimensionamento

"compute:resize": "",

"compute:confirm_resize": "",

"compute:revert_resize": "", 

# Riavvia i servizi Nova e Horizon su tutti i nodi.

# Sia il ridimensionamento dell'istanza Nova che la migrazione a freddo Nova dovrebbero ora essere operativi.

Disabilita il ridimensionamento dell'istanza

Attenzione

Una delle grandi sfide nel apportare modifiche alla configurazione come questa 'manualmente' è che quando si procede alla ridistribuzione o all'aggiornamento della propria cloud, queste modifiche non sono state catturate nel repository di configurazione di Helion Lifecycle Manager e quindi non saranno presenti in una cloud ridistribuita.

Soluzione – Utilizza Playbook Ansible per tutte queste modifiche alla configurazione e aggiungili al repo git HLM

Io stesso sono nuovo di Ansible, ma sono riuscito a mettere rapidamente insieme i seguenti playbook per implementare le procedure manuali identificate sopra. Vale davvero la pena investire qualche giorno a sperimentare con Ansible se non l'hai mai fatto prima – è un fantastico abilitatore di produttività per quanto riguarda Helion OpenStack.

Assicurati di testare attentamente questi script prima di implementarli su un sistema di produzione – come menzionato, sono il mio primo approccio a questo strumento.

Le istruzioni per utilizzare i playbook possono essere trovate nei commenti presenti all'interno di ciascun playbook.

HOS 2.X Playbook per abilitare il ridimensionamento dell'istanza

# Autore: Graham Joseph Land
# Blog: allthingscloud.eu
# Twitter: @allthingsclowd
# Email: graham@il dominio sopra
# Data: 03/03/2016
# 
# Nome: nova-enable-resize.yml
# Versione: 1.1
# Scopo: Questo playbook è uno dei 5 che devono essere eseguiti in ordine per riabilitare il ridimensionamento dell'istanza nova e la migrazione a freddo
#
# Istruzioni: 
# 1. Copia questo playbook nelle seguenti due directory ansible sul nodo deployer -> ~/scratch/ansible/next/hos/ansible AND ~/helion/hos/ansible
# 2. Accedi al Helion Lifecycle Manager (HLM Deployer) come utente deployer e cambia directory in -> ~/scratch/ansible/next/hos/ansible
# 3. Abilita il ridimensionamento dell'istanza nova e la migrazione a freddo nova eseguendo i seguenti passaggi:
#      a.) ansible-playbook -v -i hosts/verb_hosts nova-enable-resize.yml
#      b.) cd ~/helion/hos/ansible
#      c.) git add -A
#      d.) git commit -m "Riconfigurato policy.json di Nova per consentire il ridimensionamento dell'istanza e la migrazione a freddo per gli amministratori"
#      e.) cd ~/helion/hos/ansible
#      f.) ansible-playbook -i hosts/localhost config-processor-run.yml
#      g.) cd ~/helion/hos/ansible
#      h.) ansible-playbook -i hosts/localhost ready-deployment.yml
#      i.) cd ~/scratch/ansible/next/hos/ansible
#      j.) ansible-playbook -i hosts/verb_hosts nova-reconfigure.yml
#       k.) ansible-playbook -i hosts/verb_hosts horizon-reconfigure.yml

---
#
# sul nodo deployer
# 
    - hosts: OPS-LM

      tasks:
# ottieni il nome utente dell'utente corrente
      - name: ottieni il nome utente corrente che sta eseguendo questo playbook
        local_action: command whoami
        register: username_on_the_host

# crea una directory temporanea
      - name: crea directory per memorizzare le chiavi ssh
        file: path=~/nova_resize state=directory

# se è un riesecuzione, rimuovi la chiave privata esistente per facilitare la creazione di una nuova chiave      
      - name: per le riesecuzioni rimuovi la vecchia chiave privata dalla directory
        file: path=~/nova_resize/id_rsa state=absent

# se è un riesecuzione, rimuovi la chiave pubblica esistente per facilitare la creazione di una nuova chiave
      - name: per le riesecuzioni rimuovi la vecchia chiave pubblica dalla directory
        file: path=~/nova_resize/id_rsa.pub state=absent

# crea nuove chiavi ssh
      - name: creazione delle chiavi SSH per l'accesso dell'utente nova
        command: ssh-keygen -t rsa -f '~/nova_resize/id_rsa' -N ""

# modifica il file nova policy.json nel repo mycloud per abilitare il ridimensionamento
      - name: modifica il file nova policy.json nel repo git del deployer - abilita ridimensionamento
        lineinfile: 'dest=~/helion/my_cloud/config/nova/policy.json state=present regexp="compute:resize" create=yes line="    \"compute:resize\": \"rule:admin_api\"," owner={{ username_on_the_host.stdout }} group={{ username_on_the_host.stdout }} mode=0777'

# modifica il file nova policy.json nel repo mycloud per abilitare la migrazione a freddo
      - name: modifica il file nova policy.json nel repo git del deployer - abilita migrazione a freddo
        lineinfile: 'dest=~/helion/my_cloud/config/nova/policy.json state=present regexp="\"compute_extension:admin_actions:migrate\"" create=yes line="    \"compute_extension:admin_actions:migrate\": \"rule:admin_api\"," owner={{ username_on_the_host.stdout }} group={{ username_on_the_host.stdout }} mode=0777'

#
# su ogni nodo di calcolo
#

    - hosts: NOV-CMP
      sudo: yes
      vars:
# carica la chiave ssh pubblica in una variabile
        nova_public_ssh_key: "{{ lookup('file', '~/nova_resize/id_rsa.pub') }}"

      tasks:
# crea una directory .ssh se non esiste già
      - name: crea directory ssh nova sull'host di calcolo
        file: path=/var/lib/nova/.ssh state=directory owner=nova group=nova mode=0755

# copia la chiave privata nella directory .ssh
      - name: copia la chiave privata ssh nova nella directory .ssh e imposta le autorizzazioni corrette sui nodi di calcolo
        copy: src=/home/stack/nova_resize/id_rsa dest=/var/lib/nova/.ssh/id_rsa owner=nova group=nova mode=0600

# aggiungi la chiave ssh pubblica al file authorized_hosts
      - name:  aggiungi la chiave ssh pubblica nova al file authorized_keys su ogni nodo di calcolo
        lineinfile: 'dest=/var/lib/nova/.ssh/authorized_keys state=present backup=yes create=yes line="\"{{ nova_public_ssh_key }}\"" owner=nova group=nova mode=0644'

# imposta stricthostkeychecking su no nel file di configurazione ssh
      - name: disabilita il controllo rigoroso dell'host su ogni nodo di calcolo
        lineinfile: dest=/var/lib/nova/.ssh/config state=present backup=yes regexp="^StrictHostKeyChecking" create=yes line="StrictHostKeyChecking no" owner=nova group=nova mode=0644

# imposta la shell bash come predefinita per l'utente nova
      - name: imposta la shell dell'utente nova su ogni nodo di calcolo
        command: usermod -s /bin/bash nova

# verifica che l'utente nova possa accedere senza password localmente
      - name: verifica l'accesso senza password per l'utente nova
        become: yes
        become_user: nova
        command: ssh nova@{{ inventory_hostname }} 'echo Passwordless Login Successfully!'

#
# su ogni nodo controller
#
    - hosts: HZN-WEB
      sudo: yes

      tasks:

# trova il percorso del file horizons nova_policy_json
      - shell:  find /opt/stack/venv/ -name nova_policy.json | grep dashboard
        register: nova_policy_json

# abilita il ridimensionamento dell'istanza nova in horizons nova_policy_json
      - name: abilita il ridimensionamento dell'istanza nova in horizon
        lineinfile: 'dest={{ nova_policy_json.stdout }} state=present backup=yes regexp="compute:resize" create=yes line="    \"compute:resize\": \"rule:admin_api\"," owner=horizon-venv group=horizon-venv mode=0664'

# abilita il ridimensionamento dell'istanza nova in horizons nova_policy_json
      - name: abilita la conferma del ridimensionamento dell'istanza nova in horizon
        lineinfile: 'dest={{ nova_policy_json.stdout }} state=present backup=yes regexp="compute:confirm_resize" create=yes line="    \"compute:confirm_resize\": \"rule:admin_api\"," owner=horizon-venv group=horizon-venv mode=0664'

# abilita il ridimensionamento dell'istanza nova in horizons nova_policy_json
      - name: abilita il ripristino del ridimensionamento dell'istanza nova in horizon
        lineinfile: 'dest={{ nova_policy_json.stdout }} state=present backup=yes regexp="compute:revert_resize" create=yes line="    \"compute:revert_resize\": \"rule:admin_api\"," owner=horizon-venv group=horizon-venv mode=0664'

HOS 2.X Playbook per disabilitare il ridimensionamento dell'istanza

# Autore: Graham Joseph Land
# Blog: allthingscloud.eu
# Twitter: @allthingsclowd
# Email: graham@il dominio sopra
# Data: 04/03/2016
# 
# Nome: nova-disable-resize.yml
# Versione: 1.1
# Scopo: Questo playbook è uno dei 5 che devono essere eseguiti per disabilitare il ridimensionamento dell'istanza nova e la migrazione a freddo
#
# Istruzioni: 
# 1. Copia questo playbook nelle seguenti due directory ansible sul nodo deployer -> ~/scratch/ansible/next/hos/ansible AND ~/helion/hos/ansible
# 2. Accedi al Helion Lifecycle Manager (HLM Deployer) come utente deployer e cambia directory in -> ~/scratch/ansible/next/hos/ansible
# 3. Disabilita il ridimensionamento dell'istanza nova e la migrazione a freddo nova eseguendo i seguenti passaggi:
#      a.) ansible-playbook -v -i hosts/verb_hosts nova-disable-resize.yml
#      b.) cd ~/helion/hos/ansible
#      c.) git add -A
#      d.) git commit -m "Riconfigurato policy.json di Nova per disabilitare il ridimensionamento dell'istanza e la migrazione a freddo per gli amministratori"
#      e.) cd ~/helion/hos/ansible
#      f.) ansible-playbook -i hosts/localhost config-processor-run.yml
#      g.) cd ~/helion/hos/ansible
#      h.) ansible-playbook -i hosts/localhost ready-deployment.yml
#      i.) cd ~/scratch/ansible/next/hos/ansible
#      j.) ansible-playbook -i hosts/verb_hosts nova-reconfigure.yml
#       k.) ansible-playbook -i hosts/verb_hosts horizon-reconfigure.yml

---
#
# su ogni nodo controller
#
    - hosts: HZN-WEB
      sudo: yes

      tasks:

# trova il percorso del file horizons nova_policy_json
      - shell:  find /opt/stack/venv/ -name nova_policy.json | grep dashboard
        register: nova_policy_json

# disabilita il ridimensionamento dell'istanza nova in horizons nova_policy_json
      - name: disabilita il ridimensionamento dell'istanza nova in horizon
        lineinfile: 'dest={{ nova_policy_json.stdout }} state=present backup=yes regexp="compute:resize" create=yes line="    \"compute:resize\": \"!\"," owner=horizon-venv group=horizon-venv mode=0664'

# disabilita il ridimensionamento dell'istanza nova in horizons nova_policy_json
      - name: disabilita la conferma del ridimensionamento dell'istanza nova in horizon
        lineinfile: 'dest={{ nova_policy_json.stdout }} state=present backup=yes regexp="compute:confirm_resize" create=yes line="    \"compute:confirm_resize\": \"!\"," owner=horizon-venv group=horizon-venv mode=0664'

# disabilita il ridimensionamento dell'istanza nova in horizons nova_policy_json
      - name: disabilita il ripristino del ridimensionamento dell'istanza nova in horizon
        lineinfile: 'dest={{ nova_policy_json.stdout }} state=present backup=yes regexp="compute:revert_resize" create=yes line="    \"compute:revert_resize\": \"!\"," owner=horizon-venv group=horizon-venv mode=0664'
#
# su ogni nodo di calcolo
#

    - hosts: NOV-CMP
      sudo: yes

# carica la chiave ssh pubblica in una variabile
      vars:
        nova_public_ssh_key: "{{ lookup('file', '~/nova_resize/id_rsa.pub') }}"

      tasks:
# rimuovi la chiave ssh dal file authorized_keys 
      - authorized_key: 'user=nova key="{{ nova_public_ssh_key }}" path="/var/lib/nova/.ssh/authorized_keys" state=absent'

# rimuovi la chiave privata dalla directory .ssh
      - name: copia la chiave privata ssh nova nella directory .ssh e imposta le autorizzazioni corrette sui nodi di calcolo
        file: path=/var/lib/nova/.ssh/id_rsa state=absent

# imposta stricthostkeychecking su yes nel file di configurazione ssh
      - name: abilita il controllo rigoroso dell'host su ogni nodo di calcolo
        lineinfile: dest=/var/lib/nova/.ssh/config state=present backup=yes regexp="^StrictHostKeyChecking" create=yes line="StrictHostKeyChecking yes" owner=nova group=nova mode=0644

# deseleziona la shell bash come predefinita per l'utente nova
      - name: deseleziona la shell dell'utente nova su ogni nodo di calcolo
        command: usermod -s /bin/false nova

# verifica che l'utente nova non possa accedere senza password localmente
      - name: verifica che l'accesso senza password fallisca per l'utente nova - IL FALLIMENTO ROSSO È BUONO!!!
        become: yes
        become_user: nova
        command: ssh nova@{{ inventory_hostname }} 'echo Passwordless Login Successfully ... NOT!'
        ignore_errors: yes

#
# sul nodo deployer
# 
    - hosts: OPS-LM

      tasks:
# ottieni il nome utente dell'utente corrente
      - name: ottieni il nome utente corrente che sta eseguendo questo playbook
        local_action: command whoami
        register: username_on_the_host

# se è un riesecuzione, rimuovi la chiave privata esistente per facilitare la creazione di una nuova chiave      
      - name: rimuovi la chiave ssh privata
        file: path=~/nova_resize/id_rsa state=absent

# elimina la chiave pubblica esistente 
      - name: elimina la chiave ssh pubblica
        file: path=~/nova_resize/id_rsa.pub state=absent

# modifica il file nova policy.json nel repo mycloud per disabilitare il ridimensionamento
      - name: modifica il file nova policy.json nel repo git del deployer - disabilita il ridimensionamento dell'istanza
        lineinfile: 'dest=~/helion/my_cloud/config/nova/policy.json state=present regexp="compute:resize" create=yes line="    \"compute:resize\": \"\"," owner={{ username_on_the_host.stdout }} group={{ username_on_the_host.stdout }} mode=0777'

# modifica il file nova policy.json nel repo mycloud per disabilitare la migrazione a freddo
      - name: modifica il file nova policy.json nel repo git del deployer - disabilita la migrazione a freddo
        lineinfile: 'dest=~/helion/my_cloud/config/nova/policy.json state=present regexp="\"compute_extension:admin_actions:migrate\"" create=yes line="    \"compute_extension:admin_actions:migrate\": \"\"," owner={{ username_on_the_host.stdout }} group={{ username_on_the_host.stdout }} mode=0777'

# elimina la directory temporanea
      - name: crea directory per memorizzare le chiavi ssh
        file: path=~/nova_resize state=absent

Originally published on allthingscloud.eu (2016-03-17).

← All posts