Показаны сообщения с ярлыком AWS. Показать все сообщения
Показаны сообщения с ярлыком AWS. Показать все сообщения

понедельник, 3 июня 2024 г.

amazon aws s3 - path styles

https://community.aws/content/2biM1C0TkMkvJ2BLICiff8MKXS9/format-and-parse-amazon-s3-url

Суть:

есть масса форматов путей у S3, включая особенности про дефолтный регион (вне его такое не работает) - и просто не прочитав про это, можно долго думать что не так.

Если используется амазон и S3 - читать обязательно.

суббота, 30 марта 2024 г.

aws ec2: проблема входа по ключам

 Казалось бы, уже давно отработанный механизм с .ssh/authorized_keys в случае амазона ВДРУГ дал сбой. Вдруг - потому что ещё несколько лет назад этой ПРОБЛЕМЫ не было.

Смотрим /var/log/auth.log и видим там крайне сомнительные строки

AuthorizedKeysCommand /usr/share/ec2-instance-connect/eic_run_authorized_keys username SHA256:ecphulTPPp7xHnSCVkuQH2fcXemYKjT8xFftheRDz+s failed, status 22

Но секрет прост: кто-то "переиграл в безопасность" и

# apt show ec2-instance-connect

...

Description: Configures ssh daemon to accept EC2 Instance Connect ssh keys

 EC2 Instance Connect is a service that publishes ssh keys for use by EC2

 instances based on AWS Credentials. These keys are consumed by on-instance

 configuration provided by this package. The ssh daemon will query EC2

 Instance Metadata service for user-keys at ssh calltime, validate any if

 present as well as validating their signature, and if all checks pass return

 will include them in the authorized keys list.

Фикс версия 1:

apt remove ec2-instance-connect

systemctl restart sshd

Фикс версия 2:

rm /usr/lib/systemd/system/ssh.service.d/ec2-instance-connect.conf

systemctl daemon-reload

И ещё немного почитать

https://github.com/widdix/aws-ec2-ssh/issues/157


И причина: 

ExecStart=/usr/sbin/sshd -D -o "AuthorizedKeysCommand /usr/share/ec2-instance-connect/eic_run_authorized_keys %%u %%f" -o "AuthorizedKeysCommandUser ec2-instance-connect" $SSHD_OPTS

воскресенье, 26 сентября 2021 г.

terraform+aws, первые шаги

 Установка: если раньше надо было качать архивы и распаковывать, то уже (давно) есть фирменные репы, например 

https://www.terraform.io/docs/cli/install/apt.html

Дальше есть видео на офсайте

https://learn.hashicorp.com/tutorials/terraform/aws-build

В частности, надо поставить aws cli и получить Access Key (нужные линки под видео)

Дальше описываем provider и resource. При этом даже офдока создаёт путаницу, где описан в первом варианте единственный блок

module "ec2_instance" {

(под terraform >= 0.13.1)
Хотя если читать дальше, что это вроде как "наследовано" и классическая схема с resource работать будет ровно также.

После установки и запуска базового примера крайне советую смотреть лист от adv-it, там очень многое рассказано.


Далее, на одном из сайтов из топ-5 гугла есть такое описание ресурса
public_key = "${file("terraform-demo.pub")}"
но уже с 0.11 оно устарело:
Terraform 0.11 and earlier required all non-constant expressions to be
provided via interpolation syntax, but this pattern is now deprecated. To
silence this warning, remove the "${ sequence from the start and the }"
sequence from the end of this expression, leaving just the inner expression.

Вообще, если нашли какую-то доку и там проверили версию - смотрите чтобы было ну хотя бы 0.12, если меньше то относитесь к материалу скептически, оно могло устареть напрочь.

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

AWS enable MFA for all

 Есть штатная дока про включение и виды MFA

https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa.html

Но - там ни слова про включение MFA как требование для всех. Впрочем, легко гуглится заметка их блога

https://aws.amazon.com/ru/blogs/security/how-to-delegate-management-of-multi-factor-authentication-to-aws-iam-users/

Включить эту информацию, хотя бы ссылкой, они как всегда не осилили.

четверг, 3 декабря 2020 г.

Amazon cloud, Auto Scale groups, автоматическое обновление

Если машина - часть ASG и min-max-desired настроены (1-2-1 например, важно что max=min+1, desired=min) то оно само пересоздаст инстансы. Если нужно именно этот же инстанс обновлять, без его пересоздания - надо в сторону ansible смотреть.

Также, есть секция, которая запускается при каждом старте, что-то типа bootcmd, надо доки уточнить. И есть cloud_final_modules 

https://aws.amazon.com/ru/premiumsupport/knowledge-center/execute-user-data-ec2/

вот тут про bootcmd есть

https://stackoverflow.com/questions/6475374/how-do-i-make-cloud-init-startup-scripts-run-every-time-my-ec2-instance-boots

В плане, в эти блоки можно поставить ansible. Потому что userdata работает только при создании инстанса.

понедельник, 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

понедельник, 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 заменить * на хитрую строку, подробнее всё в той же доке выше.

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

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

вторник, 21 апреля 2020 г.

AWS Cloud Map

Cloud Map allows you to register any application resources such as databases, queues, microservices, and other cloud resources with custom names. Cloud Map then constantly checks the health of resources to make sure the location is up-to-date. The application can then query the registry for the location of the resources needed based on the application version and deployment environment.
https://aws.amazon.com/ru/about-aws/whats-new/2018/11/introducing-aws-cloud-map/

https://aws.amazon.com/ru/blogs/aws/aws-cloud-map-easily-create-and-maintain-custom-maps-of-your-applications/

Video:
https://www.youtube.com/watch?v=fMGd9IUaotE

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

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

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)

вторник, 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), задаём ей логин-пароль, подключаемся. Выбираем что вносим в шаблон, на выходе получаем шаблон.

четверг, 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...