четверг, 27 февраля 2020 г.

7 Awesome CloudFormation Hacks

https://garbe.io/blog/2017/07/17/cloudformation-hacks/

Немного про говнокод в aws

Есть уже рабочий стэк, который трогать не хочется, и нужно задеплоить 1 новую машину, для этого заводим новый VPC. Причём уже есть ASG+LaunchConfig где всё деплоится как надо, но тут задача, где больше 1 сервера точно не понадобится, vpn, jenkins итд, много когда более 1 машины просто не нужно.
Открываем "простой" пример, оф. пример, делаем по аналогии, запускаем cfn. На выходе ошибка
Value () for parameter groupId is invalid. The value cannot be empty (Service: AmazonEC2; Status Code: 400; Error Code: InvalidParameterValue; Request ID: ...
Открываем доку и видим
[EC2-Classic, default VPC] The names of the security groups. For a nondefault VPC, you must use security group IDs instead.

Думаем, при чём тут это, находим пост (2), заменяем 
"SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ],
на
"SecurityGroupIds" : [ { "Fn::GetAtt" : [ "InstanceSecurityGroup", "GroupId" ] }],
Наслаждаемся ошибкой
Security group sg-059f48c4cb6c45ad2 and subnet subnet-8206c0d8 belong to different networks. Потому что в SG у нас корректно замапилась группа и VPC, а тут взят дефолтный параметр (помним, что у нас иной VPC?). Со злости удаляем вообще SecurityGroupIds, запускаем, радуемся что всё создалось. А потом идём в управление серверами.. и видим что VPC - default и SG пустой!
Вообще, если посмотреть в параметры, там есть LaunchTemplate. Но пока продолжать разгребать эти конюшни.
Судя по всему, тут роляет именно SecurityGroupIds + SubnetId, про что нигде внятно не сказано! Если будет SecurityGroups+SubnetId (второе на верхнем уровне) то будет ошибка
The parameter groupName cannot be used with the parameter subnet (Service: AmazonEC2; Status Code: 400; Error Code: InvalidParameterCombination;
 Хотя можно попробовать вынести SubnetId в NetworkInterfaces (с обвязкой, читаем доку),  и с SecurityGroups...

вторник, 25 февраля 2020 г.

AWS WAF – Брандмауэр для интернет‑приложений

https://aws.amazon.com/ru/waf/

AWS WAF – это брандмауэр для интернет‑приложений, который позволяет защитить их (или различные API) от распространенных сетевых эксплойтов, способных повлиять на доступность, создать угрозу безопасности или задействовать чрезмерное количество ресурсов API или приложения. AWS WAF предоставляет полный контроль над тем, каким именно образом трафик будет достигать приложений пользователя: он сможет создавать правила безопасности, которые будут блокировать такие выполняемые по распространенным шаблонам атаки, как SQL-инъекции или межсайтовый скриптинг, а также правила, которые будут фильтровать трафик с определенным характером. Начать работу с AWS WAF можно чрезвычайно быстро благодаря наличию управляемых правил – предварительно сформированного набора правил, управляемых AWS или продавцами рынка AWS Marketplace. Управляемые правила для WAF позволяют справиться даже с проблемами из списка десяти главных угроз безопасности по версии OWASP. Эти правила регулярно обновляются по мере возникновения новых проблем. AWS WAF предлагает полнофункциональный API, позволяющий автоматизировать процессы создания, развертывания и обслуживания правил безопасности.

Но в настройке это весьма... объёмная вещь. Конфиги в сотни и сотни строк - вполне норма.
Пример шаблонов
https://aws.amazon.com/ru/solutions/aws-waf-security-automations/
Шаблон к нему
https://s3.amazonaws.com/solutions-reference/aws-waf-security-automations/latest/aws-waf-security-automations.template
40 кб. Это к вопросу размеров. Выкатить несколько независимых стэков - меньше выходит.

Ещё пример, из которого можно собрать нужное
https://github.com/aws-samples/aws-waf-sample

вторник, 18 февраля 2020 г.

aws: Load Balancer Types

Elastic Load Balancing supports the following types of load balancers: Application Load Balancers, Network Load Balancers, and Classic Load Balancers. Amazon ECS services can use either type of load balancer. Application Load Balancers are used to route HTTP/HTTPS (or Layer 7) traffic. Network Load Balancers and Classic Load Balancers are used to route TCP (or Layer 4) traffic.

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/load-balancer-types.html (и вообще лучше ознакомиться, там подходы разные)
https://docs.aws.amazon.com/elasticloadbalancing/latest/application/

Когда нам нужно обрабатывать http(s) трафик, лучше всего подходит application LB. Чем он лучше классического:
https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html#application-load-balancer-benefits

Моменты, о которых надо помнить
- Требуется минимум 2 AZ. Даже если данные есть только в одной, остальные должны просто быть. А вот 1 сети в каждой AZ будет достаточно.
- Не забыть про security groups
- Желательно добавить Health Checks для сервера

В случае с CloudFormation можно начать отсюда
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html
Не путать с почти такой же страницей, но без V2 - так как это classic lb

You can specify the AvailabilityZones or Subnets property, but not both.

среда, 12 февраля 2020 г.

Install aws cli on mac

Самый простой метод - через pip
pip3 install awscli --upgrade --user
но после этого надо добавить путь в path
export PATH=~/Library/Python/3.7/bin:$PATH

Другие варианты:
https://docs.aws.amazon.com/cli/latest/userguide/install-macos.html

Также есть aws cli version 2
For AWS CLI version 2, it doesn't matter if you have Python installed and if you do, it doesn't matter which version. AWS CLI version 2 uses only the embedded version of Python (and any other dependencies) that is included in the installer.

https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html

$ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
$ sudo installer -pkg AWSCLIV2.pkg -target /

пятница, 7 февраля 2020 г.

Jenkins plugins: Usage plugin

https://plugins.jenkins.io/plugin-usage-plugin
https://wiki.jenkins.io/pages/viewpage.action?pageId=73532011
Показывает список установленных плагинов, а для классических задач покажет ещё кто использует (но только использует явно, по связанности может показать нули), а по кнопке expand даже покажет, какими задачами какой плагин используется.

четверг, 6 февраля 2020 г.

Jenkins+aws

Самый простой вариант это ставим aws cli и через execute shell, но далеко не самый правильный

https://github.com/jenkinsci/pipeline-aws-plugin
Умеет работать с s3, cfn, sns и ещё чуть по мелочи

https://jenkins.io/doc/pipeline/steps/s3/
https://plugins.jenkins.io/artifact-manager-s3
более частные случаи