вторник, 31 марта 2020 г.

aws secrets manager

https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html
https://docs.aws.amazon.com/secretsmanager/latest/userguide/best-practices.html
https://github.com/jenkinsci/aws-secrets-manager-credentials-provider-plugin/blob/master/docs/README.md
https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/index.html#cli-aws-secretsmanager

Оказывается, через pipeline очень удобно работать с хранящимися данными

Работать лучше через CLI, у веба есть какие-то баги
Bugs
All secrets must be uploaded via the AWS CLI or API. This is because the AWS Web console currently insists on wrapping your secret string in JSON.

Jenkins и upload to S3

Жил-был дженкинс, работал себе, задачи на нём вида Freestyle крутились себе. И сразу оговорка, нода, на которой запускалась задача выкатки, не в амазоне, дальше это будет важно.

Есть для выкатки через freestyle плагин s3 publish, он же /s3/ в плагинах. Но есть у него огромный, гигантский косяк: он не умеет в ACL. Вообще не умеет. Ни в каком виде. А на офсайте жалкая отмазка "выставите нужные права на весь бакет через IAM", что разумеется далеко не всегда приемлемо.
Да, у него есть metadata, но толку от неё ровно 0. Потому что оно мало того что не умеет Canned ACL, так даже x-amz- не выставить, там захардкожен префикс, что-то вроде x-amz-meta-, и ничего с этим не сделать. Ладно, не было печали, посмотрим другие варианты.
aws s3 cp|sync
s3cmd put|sync
итд - поскольку нода не в амазоне, мы не можем настроить IAM на выкатку без токена, а по некоторым причинам его могут не давать сделать.
Хорошо, есть вроде неплохой плагин aws pipeline plugin, он умеет сильно больше чем s3 plugin, поставим. И первый косяк, оно не умеет в freestyle. Надо переписывать задачу в pipeline. Что ж, давно было желание, переписали. Второй косяк. s3Upload не работает, потому что конфликт имён с s3 plugin. И как только мы удаляем s3 plugin, у нас ломаются все связанные задачи. А их может быть больше десятка. Но и это не всё. Косяк 3. Похоже, что s3 plugin выкатывал файлы через Jenkins, потому что оно просто работало. А aws pipeline делает это с самой ноды, и ничего не работает. Никто же не добавил AWS_ переменные. Но даже если добавить withAWS - может не заработать, если у нас не 2 переменные а 3: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN. И передать их как-то - не выйдет. И выставить через def в начале пайплайна - тоже не работает. Так что 2 плагина, функционал которых фактически не пересекается, вместе стоять не могут.

Тут на помощь приходят copyArtifact и более удобный в данном случае stash, при условии что у нас есть нода в амазоне, на которой можно будет сделать unstash + s3Upload.

На то, чтобы выяснить и отладить это всё, может уйти не 1 день.
Если бы удалось пропихнуть фикс в s3 plugin с переименованием s3Upload во что-то ещё (в этом модуле всего 2 функции, в отличие от заточенный под пайплайны aws pipeline), то они могли бы существовать мирно вместе. А так - им надо обоим ставить тэг Conflicts и блокировать совместную установку.

понедельник, 30 марта 2020 г.

Debian: EOL Шрёдингера

Дебиан настолько гениален и велик, что у него бывает EOL Штрёдингера. Когда он еол и не еол одновременно.
https://www.debian.org/releases/jessie/index.ru.html
Jessie получает долгосрочную поддержку (LTS) вплоть до конца июня 2020 года.

Но. https://lepkov.ru/debian-8-jessie-repo-update/
Для пакета jessie-updates вы можете просто удалить его из своего /etc/apt/sources.list. Это бесполезно, потому что все пакеты, которые были в обновлениях jessie, были объединены в jessie, когда был выпущен Debian 8.11.

Пакет jessie-backports был заархивирован на archive.debian.org, поэтому вы можете использовать:
...

Более того, просто поправив бэкпорты, получаем сразу 2 ошибки.
E: Release file for http://archive.debian.org/debian/dists/jessie-backports/InRelease is expired (invalid since 3600d 1h 9min 51s). Updates for this repository will not be applied.

И то, что пакеты больше не согласованы. Банальный certbot УЖЕ не поставить, ругается на зависимости слишком свежих версий. Но это уже совсем другая история...

AWS S3: немного про ACL

Для начала, как посмотреть права на файле в s3, кроме веба?
s3cmd info s3://(bucket)/(dir/file)
aws s3api get-object-acl --bucket (bucket) --key (dir/file)

В выводе будут строки ACL:
Но что с этим знанием делать дальше? Для начала, читать доку

пятница, 20 марта 2020 г.

CloudFormation для VPC Peering

Продолжение https://dragonflybsd.blogspot.com/2020/01/amazon-vpc.html, при настройке через CloudFormation

Казалось бы, настройка элементарна
  VPCPeeringWithMain:
    Type: AWS::EC2::VPCPeeringConnection
    Properties:
      VpcId:
        Fn::ImportValue: !Sub "${AWS::StackName}-VPC"
      PeerVpcId: !Ref VPCMainID

Но нет. Элементарно ловится ошибка
VpcPeeringConnection failed to stabilize. State: [failed]
Открываем доку
https://aws.amazon.com/ru/premiumsupport/knowledge-center/cloudformation-vpc-peering-error/
и начинаем читать. Оказывается, там много подводных камней. Если пирятся разные аккаунты - нужно озаботиться ролями, если разные регионы - читаем
The Region code for the accepter VPC, if the accepter VPC is located in a Region other than the Region in which you make the request.
и так далее, и разумеется, в основной доке про это явно - нет.

И это всё в дополнение к

Скриптик для 2fa, для aws cli

https://github.com/dragonfly-net/utils/blob/master/aws/aws_cli_auth.sh
заменить юзера и аккаунт (цифровой)
Запускать через source aws_cli_auth.sh (code)

воскресенье, 8 марта 2020 г.

Отключение ipv6 в debian

Отключать v6 не рекомендуется, если он работает. Но бывает так, что его включение не даёт ничего кроме проблем. Например, пришлось выключить в hetzner, потому что с ним подключения отваливались по таймауту.

sudo vi /etc/sysctl.d/70-disable-ipv6.conf
# Turn off IPv6
#
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
И перечитываем конфиг
sudo sysctl -p -f /etc/sysctl.d/70-disable-ipv6.conf


debian: заменяем репы для устаревших сборок



Когда сборка становится EoL, репы удаляют, и нужно переключиться на archive.
Пример для wheezy например тут
https://www.ispsystem.ru/news/debianwheezyend

Хотя security.debian.org тоже удалён. В общем, строки будут примерно такие
deb http://archive.debian.org/debian wheezy main
deb http://archive.debian.org/debian-security wheezy/updates main
При возникновении ошибки

E: Release file for http://archive.debian.org/debian-security/dists/wheezy/updates/Release is expired (invalid since 333d 5h 21min 4s). Updates for this repository will not be applied.
нужно выполнить
sudo apt-get -o Acquire::Check-Valid-Until=false update

вторник, 3 марта 2020 г.

aws: Конвертируем существущую инфру в cloudformation template

Using CloudFormer (Beta) to Create AWS CloudFormation Templates from Existing AWS Resources

Important
CloudFormer is currently in beta. We recommend against utilizing it in critical or production environments.

Вкратце. Через CloudFormation создаём новый стэк, examples, CloudFormer. Далее будет создана виртуалка (которая тарифицируется, да, t2.medium), задаём ей логин-пароль, подключаемся. Выбираем что вносим в шаблон, на выходе получаем шаблон.

IP-KVM через QEMU

Да, бывает и такое извращение. Когда железо бытовое для уменьшения цены, и не осилить покупку простейших квм по 5к, начинаются маразмы "загрузитесь в консоль восстановления, поднимите qemu, и потом.."
Собственно, сама команда
qemu-system-x86_64 \
-m 2048M \
-net nic -net user \
-enable-kvm \
-cpu host,nx \
-M pc \
-smp 2 \
-vga std \
-drive file=/dev/sda,format=raw,index=0,media=disk \
-drive file=/dev/sdb,format=raw,index=1,media=disk \
-vnc :0,password \
-monitor stdio

Полная версия
https://habr.com/ru/company/selectel/blog/464565/
И да, страдает таким маразмом именно селектел. То, что хецнер сделал лет 15 назад (подключаемые kvm), для них пока недостижимый прогресс. Минимум тем, что не увидеть что сейчас на сервере творится, что за ошибки в консоли и подобное. Не всегда ребут возможен, минимум тем что текущее состояние аварии гораздо важнее простоя из-за режима восстановления.