вторник, 29 сентября 2020 г.

Mongo+Kubernetes шаблоны

https://stackoverflow.com/questions/60924254/mongodb-replicaset-is-broken-in-kubernetes

https://dba.stackexchange.com/questions/236758/mongodb-replicaset-instance-re-join-after-kubernetes-pod-restart

Хотя там и идёт как "вопросы с ошибками", их можно взять за основу.

Но остаётся ещё вопрос. Что в случае кубера, что cfn - у нас после деплоя на выходе есть N обезличенных серверов и нет механизмов, что есть mongo1 а что есть mongoN и что автоматически сборку надо запустить ровно на одной из машин, причём все ноды уже должны быть установлены (резолвиться в днс как минимум). И если запуск сборки ещё можно решить на внешних скриптах, то с именами - всё печально.

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

Mongo: Delete existing replicaSet record

 Delete existing replicaSet record in Server C using the command


   shell> mongo 

   mongo> use local

   mongo>db.system.replset.remove({});

   mongo>exit

понедельник, 28 сентября 2020 г.

AWS: CDK

 Изучаем замену для cfn - cdk (AWS Cloud Development Kit)

"это платформа разработки программного обеспечения ... используя привычные языки программирования"

И вот для быстрого старта: https://youtu.be/bz4jTx4v-l8

И пример кода

https://github.com/aws-samples/aws-cdk-for-k3scluster

AWS CFN: несколько полезных ссылок для изучения CFN

7 Awesome CloudFormation Hacks

19 Best Practices for Creating Amazon Cloud Formation Templates

Continuous Delivery in the Cloud: CloudFormation

Эти 6 уроков работы с cloudformation я усвоил на всю жизнь

AWS CFN: замечание про последовательную выкатку стэка

 Если нам нужно выкатывать набор инстансов, то там можно указать DependsOn и сборка будет ждать готовности инстанса. Но в случае с ASG всё не так просто.

Во-первых, DependsOn на ASG - продолжит развёртывание по готовности самого ASG, но не его машин.

Во-вторых, повесить DependsOn на отдельный инстанс группы или их набор - невозможно напрямую.

В третьих, есть механизмы CreationPolicy и UpdatePolicy (которые так же нужно вешать на инстанс, чтобы стек ждал готовности ноды) и через /opt/aws/bin/cfn-signal на ASG выставлять что нода готова.

Можно сделать внешний счётчик через WaitCondition + WaitConditionHandle.

У него есть нюанс. Если в случае *Policy используется формат --resource (ASGName), то в случае WaitCondition - такой формат не работает! Мы должны применять форму cfn-signal -e 0 !Ref OurWaitCondition, ну или использовать curl. У меня ушло много времени, чтобы найти этот "особый" формат. И да, если мы используем runcmd с блоком Sub - то вместо !Ref надо использовать  формат ${OurWaitCondition}.

Второй нюанс: Anytime you add a WaitCondition resource during a stack update or update a resource with a wait condition, you must associate the wait condition with a new WaitConditionHandle resource. Do not reuse an old wait condition handle that has already been defined in the template. If you reuse a wait condition handle, the wait condition might evaluate old signals from a previous create or update stack command.

И напоследок: Updates are not supported for this resource.


И ещё линки

https://github.com/awslabs/aws-cloudformation-templates/blob/master/aws/services/AutoScaling/AutoScalingRollingUpdates.yaml

https://aws.amazon.com/ru/blogs/mt/signaling-aws-cloudformation-waitconditions-using-aws-privatelink/

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.html

вторник, 15 сентября 2020 г.

LetsEncrypt: End of Life Plan for ACMEv1

 https://community.letsencrypt.org/t/end-of-life-plan-for-acmev1/88430

In June of 2020 we will stop allowing new domains to validate via ACMEv1.

In June of 2021 we will entirely disable ACMEv1 as a viable way to get a Let’s Encrypt certificate.

Проблема будет со старыми системами, например debian 7 - старая версия больше не работает на создание, а через год не будет работать на продление, а обновление возможно не всегда.

При этом быа ещё такая утилита dehydrated, тоже продали.

https://lukas.im/2020/01/30/selling-dehydrated/index.html

понедельник, 7 сентября 2020 г.

aws: ещё один графический дизайнер стэков

https://www.stackery.io/


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

Одно но: оно платное, хотя есть Developer версия,  1 seat, 1 linked AWS account, 6 active stacks

AWS CFN: Fixing UPDATE_ROLLBACK_FAILED

https://harrisonmilbradt.com/blog/fixing-update_rollback_failed-in-serverless/

Actions > Continue Update Rollback и там есть пропуск сломанных шагов. Также есть консольная версия

aws cloudformation continue-update-rollback --stack-name my-stack --resources-to-skip failed-resource1 failed-resource2

пятница, 21 августа 2020 г.

AWS: Cognito

 Есть у амазона сервис авторизации Cognito, позволяет настроить авторизацию гугла, oauth и подобным. 

https://aws.amazon.com/ru/blogs/database/get-started-with-amazon-elasticsearch-service-use-amazon-cognito-for-kibana-access-control/

Сам по себе сервис достаточно прост: сначала в User pools создаём пул юзеров, причём на старте достаточно "review defaults", потом создаем базу для вошедших юзеров - Identity.

Теперь в самом простом случае - заводим локальных пользователей, создаём группу (по доке выше) - и вот уже сервис можно использовать.

Замечание для kibana: после включения Cognito в настройках, авторизацию запрашивать не будет, нужно нажать в ES - Modify access policy и в Principal заменить * на хитрую строку, подробнее всё в той же доке выше.

четверг, 20 августа 2020 г.

rpmbuild: условия в Requires

 Starting with rpm-4.13, RPM is able to process boolean expressions in all dependencies (Requires, Recommends, Suggests, Supplements, Enhances, Conflicts). Boolean Expressions are always enclosed with parenthesis. They are build out of “normal” dependencies: either name only or name, comparison and version description.

https://rpm.org/user_doc/boolean_dependencies.html

То есть теперь можно написать такие вещи как

Requires: (pkgA or (pkgB and pkgC))

Supplements: (foo and (lang-support-cz or lang-support-all))

и так далее. НО - это всё есть только в centos8, в 7 и ниже версии старые, в 7 например 4.11.

пятница, 7 августа 2020 г.

AWS AD + AD FS

 Если нужно поставить AD FS для AWS AD - полноценно это не сделать, потому что AWS AD не даёт юзеров с правами domain administrator. 

In a default AD FS installation, AD FS uses two containers that require special AD permissions that your AWS Microsoft AD administrative account does not have. To address this, you will create two nested containers in your OU for AD FS to use. When you install AD FS, you tell AD FS where to find the containers through a Windows PowerShell parameter.

Поэтому создавать нужно через PowerShell, заглядывая в https://aws.amazon.com/jp/blogs/security/how-to-enable-your-users-to-access-office-365-with-aws-microsoft-active-directory-credentials/, выкидывая часть про azure и office, но "тело" там вполне универсально.

Для этого нужен Windows instance, введённый в домен.

вторник, 16 июня 2020 г.

fail2ban+systemd+sshd

У fail2ban начиная с версии 1.9.0 есть поддержка опции
backend = systemd

Но в centos, debian (например в 8) чаще 0.8, поэтому тут решение - подключать rsyslog

apt-get install rsyslog

/etc/rsyslog.d/sshd.conf:
authpriv.*      /var/log/auth.log
systemctl enable rsyslog
systemctl start rsyslog
ls -la /var/log/auth.log

И теперь как обычно
cat >> /etc/fail2ban/jail.local << EOF
[ssh]
enabled = true
bantime = 12m
EOF
(в случае centos поправить имя блока до sshd, файл лога при этом писать не в auth.log а в /var/log/secure, но в центос обычно rsyslog уже из коробки настроен как надо)

среда, 3 июня 2020 г.

Duo Unix - Two-Factor Authentication for SSH with PAM Support (pam_duo)

https://duo.com/docs/duounix

Очень удобная штука, позволяет управлять кто и куда может подключаться, 2FA для большей безопасности... Лучше с офсайтом ознакомиться.
Интересен ещё и тем, что есть интеграция с Cisco, например вход в VPN может штатно запрашивать подтверждение на телефоне.
Отдалённый аналог - google authenticator, но тот только генератор номеров, а тут полный стэк.

Помимо PAM, есть вариант настройки через login
https://duo.com/docs/loginduo

Есть и такая дока
https://www.stephenwagner.com/2018/05/06/configure-duo-mfa-centos-7-linux-with-pam_duo/

CloudFormation, ASG and Route53

Иногда нужно добавлять домены в Route53 при создании серверов. Для обычных EC2::Instance просто добавляем столько же секций, сколько нам нужно доменов. Всё усложняется, когда нужно делать динамические имена для ASG (Auto Scale Groups).
Вариант "в лоб": делим единый ASG на столько, сколько у нас инстансов, и уже к каждому привязываем конкретный поддомен и всё что нужно. Да, это дублирование как самих ASG, так и связанных LaunchConfiguration, потому что теперь они как минимум содержат номер, поддомен или ещё что-либо. То есть получаем по сути обычный EC::Instance, с небольщим отличием - самовосстановлением, если машина полностью ломается то она будет пересоздана автоматически.
Есть вариант через CloudMap, там уже есть некая гибкость, но нужно внимательно изучить
Есть и такое
https://underthehood.meltwater.com/blog/2020/02/07/dynamic-route53-records-for-aws-auto-scaling-groups-with-terraform/
но тоже надо смотреть, как оно внутри устроено и работает.
Далее, можно в UserData какими-то БД, внешними арбитрами итд вычислять нужные имена и далее через aws route53 манипулировать
Также есть Macro
https://github.com/awslabs/aws-cloudformation-templates/tree/master/aws/services/CloudFormation/MacrosExamples/Count