Рубрики
Uncategorized

Автоматизация развертывания с помощью сценариев Bash и Google Cloud SDK

Вам не нужно знать Terraform, Ansible, Chef, Puppet или любой другой инфраструктуру как код (IAC), чтобы … Помечено DevOps, Googlecloud, Bash, новички.

Вам не нужно знать Terraform, Ansible, Chef, Puppet или любые другие инструменты инфраструктуры как кода (IAC) для автоматизации ваших развертываний на платформе Google Cloud.

Google предлагает несколько инструментов командной строки в своем Комплект для разработки программного обеспечения (SDK) Это можно использовать для создания/уничтожения ресурсов, взаимодействия с ведрами хранения, создания правил брандмауэра и многого другого; Вы можете автоматизировать все свое развертывание!

Наличие надежного понимания инструментов SDK принесет дивиденды в вашей карьере, и они являются требованиями для каждого сертификата GCP; Очень полезно потратить некоторое время на то, чтобы чувствовать себя комфортно с ними.

Это не учебник о том, как использовать GCLOUD, поэтому, если вы, как правило, не знакомы с инструментом, пожалуйста, посмотрите ресурсы ниже, чтобы заполнить какие -либо пробелы в знаниях.

Обзор инструмента командной строки GCLOUD | Облачная документация SDK GCLOUD Chief -Speat | Облачная документация SDK

Чтобы автоматизировать вызов нескольких команд GCLOUD для создания нашей инфраструктуры, я собираюсь использовать сценарии Bash. Если вы не знакомы с сценарием Bash, вот TLDR;

Команды оболочки перечислены в файле, который выполняется в последовательности

Давайте посмотрим на небольшой сценарий развертывания.

create_instance.sh

#!/bin/bash

ZONE="us-east1-a"

echo "Welcome to our tiny script - lets create an instance"
gcloud compute instances create instance-1 --zone $ZONE

echo "Done!

Этот скрипт дает нам некоторые консольные выводы, чтобы сообщить нам, что он работает, создает экземпляр с именем экземпляр 1 В зоне, определенной переменной Зона В этом случае US-EAST1-A Анкет

С этой концепцией мы можем расширить его до более крупных более сложных развертываний; И то же самое можно использовать для разрыва инфраструктуры целесообразной программой.

Чтобы наши системы были правильно настроены после создания в облаке, мы собираемся использовать еще одну функцию, предлагаемую нам GCP, «сценарий стартапа». Сценарий запуска — это скрипт, который выполняется после создания системы и вращается в первый раз. Мы можем настроить сценарий запуска, чтобы запустить несколько разных способов:

  1. Удаленный файл, хранящийся на общедоступном сервере
  2. Файл, хранящийся в ведре Google Cloud
  3. Вставлен в наш сценарий развертывания

В приведенном ниже примере показана пара значений значений метаданных в команде GCLOUD, чтобы вытащить файл с удаленного сервера

Gcloud Compute Acces Create Encance-1 –Metadata://server.com/script.sh

script.sh

# Update and install packages
sudo apt-get update
sudo apt-get install git build-essential apache2 -y

# Update index.html page
echo "

We're live!

" > /var/www/html/index.html echo "DONE!"

Наш скрипт расположен на удаленном (общедоступном) сервере, снята, выполнено, и наш пользовательский сервер работает и работает!

Этот обзор должен дать вам новое представление о мощности автоматизации создания сети и начальной загрузки системы.

Выходя из этой идеи на следующий уровень, я хотел иметь сценарии развертывания для различных вариантов использования, готовых в моем распоряжении, когда это необходимо. Одна из тех, кого я хочу пройти с вами сегодня, — это простая факультета криминалистики. Место, где файлы могут быть рассечены, хранить вредоносное ПО и сегментирование от моего личного и рабочего оборудования.

Вот мои требования

  1. Судебная станция
  2. Kali Linux Workstation
  3. Горшок меда
    • Сегментированный от других рабочих станций
  4. Ведро для вредоносных программ и потенциальных плохих вещей

Небольшое художественное усилие позже это сетевая диаграмма, которую я придумал.

Эта сетевая диаграмма дает нам больше понимания того, как мы хотим, чтобы наши ресурсы были структурированы и сгруппированы, давайте больше создам нашу дизайнерскую документацию.

VPC, который содержит две подчинки, безопасные/небезопасные. Safe будет содержать наши экземпляры, используемые для анализа и инструментов, помеченных «администратором» для правил брандмауэра, которые позволяют Ingress на 22, 80, 443 и ICMP (Ping).

Небезопасная подсеть будет содержать один хост, honeypot и помеченная «небезопасная» правила брандмауэра, чтобы разрешить соединения на всех портах и протоколах только для хостов с соответствующей тегом.

Не напрямую объект, который будет жить в нашем VPC Но у нас также будет облачное ведро для хранения любых файлов или отчетов анализа; Этот ресурс будет ресурсом на уровне проекта.

Имея в виду эти соображения дизайна и использование пользовательского интерфейса Console, чтобы помочь нам создать Gcloud команды В конечном итоге мы получим следующий скрипт развертывания (примечание. Для внедрения в блоге сценарии запуска ясности вставлены сценарии)

#!/bin/bash

echo "Create VPC and subnets"
gcloud compute networks create lab-net  --subnet-mode=custom --bgp-routing-mode=regional

gcloud compute networks subnets create safe  --range=192.168.0.0/24 --network=lab-net --region=us-east1

gcloud compute networks subnets create unsafe --range=192.168.128.0/29 --network=lab-net --region=us-east1

echo "Creating SIFT instance"
gcloud compute instances create sift-1 --tags=admin \
  --metadata startup-script='
  #! /bin/bash
  sudo su -
  apt-get update
  # TO DO: Install SIFT
  EOF'

echo "Creating Kali instance"
gcloud compute instances create kali-1 --tags=admin \
  --metadata startup-script='
  #! /bin/bash
  sudo su -
  apt-get update
  # TO DO: Install KALI Tools
  EOF'

echo "Creating Honeypot instance"
gcloud compute instances create honeypot-1 --tags=insecure \
  --metadata startup-script='
  #! /bin/bash
  sudo su -
  apt-get update
  # TO DO: Install Honeypots
  EOF'

echo "Create Bucket for storage"
gsutil mb gs://bucket-of-bad-stuff

echo "Adding firewall rules"

gcloud compute firewall-rules create allow-ingress-admin-lab-net --direction=INGRESS --priority=1000 --network=lab-net --action=ALLOW --rules=tcp:22,tcp:80,tcp:443,icmp --source-ranges=0.0.0.0/0 --target-tags=admin

gcloud compute firewall-rules create allow-ingress-insecure-lab-net --direction=INGRESS --priority=1000 --network=lab-net --action=ALLOW --rules=all --source-ranges=0.0.0.0/0 --target-tags=insecure

echo "Done"

Я оставлю понимание сценариев в качестве упражнения для читателя!

Чтобы лаборатория была завершена, все еще есть некоторые недостающие части, ни одна из систем не была сконфигурирована и все еще находится в состоянии их по умолчанию; что будет усилием на другой день.

Кроме того, если наши экземпляры не имеют необходимости сохранять в течение длительных периодов времени, мы можем сократить расходы, используя упреждаемые экземпляры, о чем я говорю в это Сообщение блога.

Как только мы собрали все наши образцы, выполнили наш исчерпывающий анализ криминалистики, написали подробный отчет и отправили его нашему клиенту, мы можем начать разрушать нашу инфраструктуру. Это то, что мы также можем автоматизировать с помощью небольшого сценария Bash.

#!/bin/bash

echo "Deleting instances..."
gcloud compute instances delete sift-1 -q
gcloud compute instances delete kali-1 -q
gcloud compute instances delete honeypot-1 -q

echo "Removing bucket..."
gsutil rm -r gs://bucket-of-bad-stuff

echo "Removing firewall rules..."
gcloud compute firewall-rules delete allow-ingress-admin-lab-net -q 
gcloud compute firewall-rules delete allow-ingress-insecure-lab-net -q 

echo "Removing subnets and network..."
gcloud compute networks subnets delete unsafe -q
gcloud compute networks subnets delete safe -q
gcloud compute networks delete lab-net -q

echo "Done"

Каждый ресурс можно ссылаться по имени и удаляется с использованием соответствующего gcloud командный модуль. -q Флаг превосходит «Вы уверены? » Предупреждение и управляет действием.

В последнем действии мне было любопытно, сколько времени требуется, чтобы настроить и уничтожить этот VPC, я провел некоторые не очень научные тесты времени.

В среднем VPC и создание ресурсов было завершено менее чем за 1 м30,*

bash DEPLOY_FORENSICS_ENV.sh  7.95s user 1.65s system 11% cpu 1:22.75 total

*Примечание. Время создания не учитывает время настройки системы, если есть какие -либо сценарии запуска, ваша система может быть создана, но не полностью готова к действию.

Разрушение заняло больше времени.

bash DESTROY_FORENSICS_ENV.sh  7.81s user 1.69s system 7% cpu 2:10.41 total

Это время также будет варьироваться в зависимости от таких вещей, как: тип машины, если есть какие -либо сценарии отключения и размер диска.

Я надеюсь, что это дает вам представление о том, что возможно с автоматическими развертываниями, и что вы начнете думать о создании своей собственной одноразовой инфраструктуры для выполнения задач, а не привязан к владению аппаратным обеспечением.

Оригинал: «https://dev.to/0xbanana/automating-deploys-with-bash-scripting-and-google-cloud-sdk-4976»