Вопросы и ответы по amazon route 53

Inputs

Name Description Type Default Required
alias An alias block. Conflicts with ttl & records. Alias record documented below.
{  "evaluate_target_healths": [],  "names": [],  "zone_ids": []}
no
allow_overwrites Allow creation of this record in Terraform to overwrite an existing record, if any. This does not affect the ability to update the record in Terraform and does not prevent other resources within Terraform or manual Route 53 changes outside Terraform from overwriting this record. false by default. This configuration is not recommended for most environments. no
application Application (e.g. or ). no
attributes Additional attributes (e.g. ). no
comment A comment for the hosted zone. Defaults to ‘Managed by Terraform’. no
delegation_set_id The ID of the reusable delegation set whose NS records you want to assign to the hosted zone. Conflicts with vpc as delegation sets can only be used for public zones. no
delimiter Delimiter to be used between , , and . no
domain_name This is the name of the resource. n/a yes
enabled Whether to create Route53 vpc association. no
environment Environment (e.g. , , ). no
failover_enabled Whether to create Route53 record set. no
failover_routing_policies A block indicating the routing behavior when associated health check fails. Conflicts with any other routing policy. Documented below. no
force_destroy Whether to destroy all records (possibly managed outside of Terraform) in the zone when destroying the zone. no
geolocation_enabled Whether to create Route53 record set. no
geolocation_routing_policies A block indicating a routing policy based on the geolocation of the requestor. Conflicts with any other routing policy. Documented below. no
health_check_ids The health check the record should be associated with. no
label_order Label order, e.g. ,. no
latency_enabled Whether to create Route53 record set. no
latency_routing_policies A block indicating a routing policy based on the latency between the requestor and an AWS region. Conflicts with any other routing policy. Documented below. no
managedby ManagedBy, eg ‘CloudDrove’ or ‘AnmolNagpal’. no
multivalue_answer_routing_policies Set to true to indicate a multivalue answer routing policy. Conflicts with any other routing policy. no
name Name (e.g. or ). no
names The name of the record. no
private_enabled Whether to create private Route53 zone. no
public_enabled Whether to create public Route53 zone. no
record_enabled Whether to create Route53 record set. no
record_set_enabled Whether to create seperate Route53 record set. no
repository Terraform current module repo no
secondary_vpc_id The VPC to associate with the private hosted zone. no
secondary_vpc_region The VPC’s region. Defaults to the region of the AWS provider. no
set_identifiers Unique identifier to differentiate records with routing policies from one another. Required if using failover, geolocation, latency, or weighted routing policies documented below. no
tags Additional tags (e.g. map(,). no
ttls (Required for non-alias records) The TTL of the record. no
types The record type. Valid values are A, AAAA, CAA, CNAME, MX, NAPTR, NS, PTR, SOA, SPF, SRV and TXT. no
values (Required for non-alias records) A string list of records. To specify a single record value longer than 255 characters such as a TXT record for DKIM, add «» inside the Terraform configuration string (e.g. «first255characters»»morecharacters»). no
vpc_id VPC ID. no
weighted_enabled Whether to create Route53 record set. no
weighted_routing_policies A block indicating a weighted routing policy. Conflicts with any other routing policy. Documented below. no
zone_id Zone ID. no

Работа с AWS CLI в Unix/Linux

После установки AWS CLI, нужно прописать ключики. Открываем:

# vim ~/.aws/credentials

И прописываем (пример):

aws_access_key_id = AKIAJCMNQGYHTIR2FIBQ
aws_secret_access_key = hZ7JMx5NHGGVBNKLSompEyZmjp0jQ5Zv4H4RaX

PS: Так же, можно добавить регион (например):

region=us-east-1

Можно не открывать файл, а выполнить следующую команду:

$ aws configure

И нам предлагают ввести некоторые данные:

AWS Access Key ID : AWS_Access_Key_ID
 : AWS_Secret_Access_Key
Default region name : Your_Region
Default output format : output_format(json|text)

Они будут записаны в дефолтное значения ( в файле ~/.aws/config):

$ cat ~/.aws/config

Если у вас несколько профилей, вы можете настроить дополнительные именованные профили с помощью параметра —profile:

$ aws configure --profile user2

AWS Access Key ID : AKIAIKLLBJLBNBGJHJVJHAMPLE
AWS Secret Access Key : je7MHLKGJKGJKHGHFGFHGEXAMPLEKEY
Default region name : us-east-1
Default output format : text

Данная тема, довольно большая и я буду выкладывать постепенно новый материал.

  • Работа с AWS AMI через командную строку в Unix/Linux
  • Работа с AWS ELB через командную строку в Unix/Linux
  • Работа с AWS S3 через командную строку в Unix/Linux
  • Работа с AWS EC2 через командную строку в Unix/Linux
  • Работа с AWS IAM через командную строку в Unix/Linux
  • Другие темы будут, но попозже!

На этом, у меня все. Статья «Установка AWS CLI в Unix/Linux» завершена.

Установка terraform в Unix/Linux

Установка крайне примитивная и я описал как это можно сделать тут:

Так же, в данной статье, я создал скрипт для автоматической установки данного ПО. Он был протестирован на CentOS 6/7, Debian 8 и на Mac OS X. Все работает должным образом!

Чтобы получить помощь по использованию команд, выполните:

$ terraform --help
Usage: terraform   <command> 

The available commands for execution are listed below.
The most common, useful commands are shown first, followed by
less common or more advanced commands. If you're just getting
started with Terraform, stick with the common commands. For the
other commands, please read the help and docs before usage.

Common commands:
    apply              Builds or changes infrastructure
    console            Interactive console for Terraform interpolations
    destroy            Destroy Terraform-managed infrastructure
    env                Workspace management
    fmt                Rewrites config files to canonical format
    get                Download and install modules for the configuration
    graph              Create a visual graph of Terraform resources
    import             Import existing infrastructure into Terraform
    init               Initialize a Terraform working directory
    output             Read an output from a state file
    plan               Generate and show an execution plan
    providers          Prints a tree of the providers used in the configuration
    push               Upload this Terraform module to Atlas to run
    refresh            Update local state file against real resources
    show               Inspect Terraform state or plan
    taint              Manually mark a resource for recreation
    untaint            Manually unmark a resource as tainted
    validate           Validates the Terraform files
    version            Prints the Terraform version
    workspace          Workspace management

All other commands:
    debug              Debug output management (experimental)
    force-unlock       Manually unlock the terraform state
    state              Advanced state management

Приступим к использованию!

» Argument Reference

The following arguments are supported:

  • — (Required) The ID of the hosted zone to contain this record.
  • — (Required) The name of the record.
  • — (Required) The record type. Valid values are , , , , , , , , , , and .
  • — (Required for non-alias records) The TTL of the record.
  • — (Required for non-alias records) A string list of records. To specify a single record value longer than 255 characters such as a TXT record for DKIM, add inside the Terraform configuration string (e.g. ).
  • — (Optional) Unique identifier to differentiate records with routing policies from one another. Required if using , , , or routing policies documented below.
  • — (Optional) The health check the record should be associated with.
  • — (Optional) An alias block. Conflicts with & .
    Alias record documented below.
  • — (Optional) A block indicating the routing behavior when associated health check fails. Conflicts with any other routing policy. Documented below.
  • — (Optional) A block indicating a routing policy based on the geolocation of the requestor. Conflicts with any other routing policy. Documented below.
  • — (Optional) A block indicating a routing policy based on the latency between the requestor and an AWS region. Conflicts with any other routing policy. Documented below.
  • — (Optional) A block indicating a weighted routing policy. Conflicts with any other routing policy. Documented below.
  • — (Optional) Set to to indicate a multivalue answer routing policy. Conflicts with any other routing policy.
  • — (Optional) Allow creation of this record in Terraform to overwrite an existing record, if any. This does not prevent other resources within Terraform or manual Route53 changes from overwriting this record. by default.

Exactly one of or must be specified: this determines whether it’s an alias record.

Alias records support the following:

  • — (Required) DNS domain name for a CloudFront distribution, S3 bucket, ELB, or another resource record set in this hosted zone.
  • — (Required) Hosted zone ID for a CloudFront distribution, S3 bucket, ELB, or Route 53 hosted zone. See for example.
  • — (Required) Set to if you want Route 53 to determine whether to respond to DNS queries using this resource record set by checking the health of the resource record set. Some resources have special requirements, see .

Failover routing policies support the following:

type — (Required) PRIMARY or SECONDARY. A PRIMARY record will be served if its healthcheck is passing, otherwise the SECONDARY will be served. See http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-configuring-options.html#dns-failover-failover-rrsets

Geolocation routing policies support the following:

  • — A two-letter continent code. See http://docs.aws.amazon.com/Route53/latest/APIReference/API_GetGeoLocation.html for code details. Either or must be specified.
  • — A two-character country code or to indicate a default resource record set.
  • — (Optional) A subdivision code for a country.

Latency routing policies support the following:

region — (Required) An AWS region from which to measure latency. See http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html#routing-policy-latency

Weighted routing policies support the following:

weight — (Required) A numeric value indicating the relative weight of the record. See http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html#routing-policy-weighted.

CloudFront – настройка CDN и привязка HTTPS

CloudFront позволит нам не только привязать к сайту бесплатный SSL-сертификат, но и позволяет использовать для доступа к сайту протокол HTTP/2, который во всех тестах показывает производительность намного выше, чем HTTP. Кроме того, большая распределенная сеть CDN CloudFront еще более увеличивает скорость доступа к нашему сайту из разных точек мира.

    1. В разделе Networking & Content Delivery выберите CloudFront.
    2. Нажмите на кнопку Create Distribution, а затем в разделе Web distribution нажмите кнопку Get Started
    3. Я задал такие настройки (остальные можно оставить по-умолчанию):

Origin: длинный URL сайта, предоставляемый S3.Viewer Protocol Policy: Redirect HTTP to HTTPSCompress Objects Automatically: YesCNAMEs: www.mystaticsite77.ruCustom SSL Certificate: выберите созданный ранее SSL сертификат.Default Root Object: index.html

Затем нажмите Create Distribution

Примечание: По умолчанию CloudFront покажет список источников и предложит использовать S3 Bucket. Вам нужно будет сменить S3 Bucket, выбрав вместо него S3 URL (Endpoint S3 bucket). К примеру, http://www.mystaticsite77.ru.s3-website-us-east-1.amazonaws.com

Генерация данных в сети CloudFront займет довольно продолжительное время – от 30 минут до нескольких часов.

Authentication Domain

Click and enter the and fields recorded in the ACM authentication step in the input box on the right window.

When you are done adding them. Go back to the ACM interface and wait for about 5 minutes. Click the Refresh button. Wait for the status of ACM certificate to change to .

At this point, the ACM certificate has been applied.
Please make a note of the ARN string marked by the orange box in the image above. This value will be used as an input value in Cloudformation. For example.

Rapid Deployment

The steps in this article are focused on deploying the solution while running in an AWS (Ningxia) region operated by NWCD or an AWS (Beijing) region operated by Sinnet. You can quickly start a CloudFormation stack to deploy and manage the entire solution using the following link.

Supported DNS Resource Record Types

  • A (Address) Format
  • AAAA Format
  • CNAME Format
    • is the same format as a domain name
    • DNS protocol does not allow creation of a CNAME record for the top node of a DNS namespace, also known as the zone apex for e.g. the DNS name example.com registration, the zone apex is example.com, a CNAME record for example.com cannot be created, but CNAME records can be created for www.example.com, newproduct.example.com etc.
    • If a CNAME record is created for a subdomain, any other resource record sets for that subdomain cannot be created for e.g. if a CNAME created for www.example.com, not other resource record sets for which the value of the Name field is www.example.com can be created

MX (Mail Xchange) Format

NS (Name Server) Format

PTR Format

SOA (Start of Authority) Format

SPF (Sender Policy Framework) Format

  • SPF records were formerly used to verify the identity of the sender of email messages, however is not recommended
  • Instead of an SPF record, a TXT record that contains the applicable value is recommended

SRV Format

TXT (Text) Format

Get OpenID Endpoint

Get the OpenID Endpoint Configuration for this realm.
Click on and select the tab. Click on the link in Endpoints.

When clicked, the system returns the following json string.

Please record the corresponding value of the issue field. For example

Setting up the IAM OpenID Provider

Create an OpenID Provider in IAM.

Go to the IAM Console and click

Click the button.

Select the OpenID Connect option.

Provider URL Enter the domain name and realm information to which Keycloak is bound. For example, . Note: Please make sure to use https method, otherwise it will not be added.

Add the name of the Client created in Keycloak, e.g. .

Click to confirm the provider information. Click on the button.

Alias resource record sets

  • Route 53 supports alias resource record sets, which enables routing of queries to a CloudFront distribution, Elastic Beanstalk, ELB, an S3 bucket configured as a static website, or another Route 53 resource record set
  • Alias records are not standard for DNS RFC and are a Route 53 extension to DNS functionality
  • Alias record is similar to a CNAME record, but can create an alias record both for the root domain or apex zone, such as example.com, and for subdomains, such as www.example.com. CNAME records can be used only for subdomains.
  • Route 53 automatically recognizes changes in the resource record sets that the alias resource record set refers to for e.g. for a site pointing to an load balancer, if the ip of the load balancer changes, Route 53 will reflect those changes automatically in the DNS answers without any changes to the hosted zone that contains resource record sets
  • If an alias resource record set points to a CloudFront distribution, a load balancer, or an S3 bucket, the time to live (TTL) can’t be set; Route 53 uses the CloudFront, load balancer, or Amazon S3 TTLs.

Установка terraform в Unix/Linux

Установка крайне примитивная и я описал как это можно сделать тут:

Так же, в данной статье, я создал скрипт для автоматической установки данного ПО. Он был протестирован на CentOS 6/7, Debian 8 и на Mac OS X. Все работает должным образом!

Чтобы получить помощь по использованию команд, выполните:

$ terraform
Usage: terraform   <command> 

The available commands for execution are listed below.
The most common, useful commands are shown first, followed by
less common or more advanced commands. If you're just getting
started with Terraform, stick with the common commands. For the
other commands, please read the help and docs before usage.

Common commands:
    apply              Builds or changes infrastructure
    console            Interactive console for Terraform interpolations
    destroy            Destroy Terraform-managed infrastructure
    env                Workspace management
    fmt                Rewrites config files to canonical format
    get                Download and install modules for the configuration
    graph              Create a visual graph of Terraform resources
    import             Import existing infrastructure into Terraform
    init               Initialize a Terraform working directory
    output             Read an output from a state file
    plan               Generate and show an execution plan
    providers          Prints a tree of the providers used in the configuration
    push               Upload this Terraform module to Atlas to run
    refresh            Update local state file against real resources
    show               Inspect Terraform state or plan
    taint              Manually mark a resource for recreation
    untaint            Manually unmark a resource as tainted
    validate           Validates the Terraform files
    version            Prints the Terraform version
    workspace          Workspace management

All other commands:
    debug              Debug output management (experimental)
    force-unlock       Manually unlock the terraform state
    state              Advanced state management

Приступим к использованию!

Route 53 Hosted Zone

  • Hosted Zone is A container for records, which include information about how to route traffic for a domain (such as example.com) and all of its subdomains (such as www.example.com, retail.example.com, and seattle.accounting.example.com).
  • A hosted zone has the same name as the corresponding domain.
  • Routing Traffic to the Resources
    • Create a hosted zone with either a public hosted zone or a private hosted zone:
      • Public Hosted Zone – for routing internet traffic to your resources for a specific domain and its subdomains
      • Private hosted zone – for routing traffic within an VPC
    • Create records in the hosted zone
      • Records define where to route traffic for each domain name or subdomain name.
      • name of each record in a hosted zone must end with the name of the hosted zone.

Создание статического сайта на AWS S3

Войдите в свой аккаунт AWS и создайте корзину (bucket) с именем www.mystaticsite77.ru (обязательно укажите www в начале имени). Выберите регион, в котором должны храниться ваши файлы.
На вкладке Properties включите функцию хостинга статического сайта (Static website hosting).
Укажите имя основного файла (index.html) и страницу, которую нужно отображать при ошибке (404.html). Сохраните изменения

Обратите внимание на URL (Endpoint), сгенерированного AWS. Скопируйте его

Чтобы открыть общий доступ к это корзине, нужно изменить политику на вкладке Permissions -> Bucket Policy
Загрузите новую статическую страницу HTML в созданную корзину (Object->Upload).

Теперь сайт должен быть доступен по длинному endpoint bucket URL, который выглядит примерно так: http://www.mystaticsite77.ru.s3-website-us-east-1.amazonaws.com

Create a recordset in Route53 for resolving the domain name

Go to the administration interface of Route53 and click the button.

Fill in the following information.

  • Name: Fill in the second-level domain name required by Keycloak, with the default suffix being the first-level domain name filed with ICP, e.g. Keycloak.ch.test.com
  • Alternate Name: Select the «Yes» radio box button
  • Alternate Target: Select the URL of the load balancing created by Keycloak on AWS in the previous step.

Click the button.

At this point, Keycloak on AWS can provide services to the public using the domain name and HTTPS.

Using Keycloak

Enter in the address bar of your browser, as defined above .
Since this guide uses a certificate requested by ACM, the certificate authority seen is Amazon.

Then click on the Administration Console link.

Enter the KeyCloak administrator username and password, the initial username and password will be automatically generated in the AWS Secrets Manager

Вступление

В рамках этой статьи рассмотрим подробную установку  виртуальной машины под управлением Ubuntu 18.04 Server на виртуальную машину на сервисе от Amazon — AWS.

Amazon выбран не случайно — сейчас он является одним из самых популярных хостеров для различных проектов и уметь им пользоваться — необходимо. А так же — Amazon предоставляет бесплатный (с некоторыми ограничениями) хостинг на почти год.

Версии ПО и необходимые вещи используемые для установки в данном руководстве:

  • Аккаунт на AWS; — Amazon предоствляет 1 год бесплатного использования виртуалок. 
  • Ubuntu 18.04;
  • Виртуальная карта с 1$ на счету. Рекомендую Я.Деньги;
  • Работающий номер телефона для приёма 1 смс;
  • Почтовый ящик для приёма письма с верификацией;

Регистрируем Виртуальную карту Яндекса.Деньги

Виртуальная карта нам понадобится для регистрации на AWS. AWS предоставляет 1 год  использования

Тебе нужен аккаунт в Яндексе

Дальше переходи на страницу Карты Яндекс Денег

Регистрация аккаунта на Amazon Web Services (AWS)

  • Сначала создаём виртуальную карту (можно и реальную, но если забыть выключить, например, Elastic IP или отключить хост и забыть — за пару месяцев может набежать приличная сумма) и переводим на неё 1$;

Указываем классические имя аккаунта, почту, телефон, указываем карту с 1$ для подтверждения аккаунта, вводим капчу, получаем смс на номер телефона, выбираем план оплаты Basic, заканчиваем регистрацию аккаунта, авторизуемся и видим не совсем понятную панель:

Пугаться её не стоит, она довольно проста. Переходим в «Services» → EC2:

Выбираем кнопку Running instances или сразу Launch instance:

Я пойду через первый вариант и выберу Launch instance уже оттуда. В поисковой строке вводим ubuntu:

И выбираем первый в списке инстанс, тип выбираем, естественно, бесплатный, нажимаем Launch:

Затем панель предложит создать новую связку ключей. Соглашаемся, сохраняем её к себе на ПК:

Инстанс создан и запущен:

Запрос бесплатного SSL сертификата через Certificate Manager

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

  1. В разделе Security, Identity & Compliance откройте секцию Certificate Manager
  2. Нажмите кнопку “Request a certificate” и укажите имя своего домена в *.mystaticsite77.ru и mystaticsite77.ru, а затем нажмите кнопку “Review and request“.
  3. Подтвердите запрос сертификата и AWS попытается отправить вам электронное письмо для подтверждения запроса. Нажав на стрелку, можно отобразить список email, на которые должен быть отправлен запрос.Это, пожалуй, самый «трудный» шаг, т.к. у вас должен быть доступ к любому из ящиков в списке. Как правило, это ящик, указанный во WHOIS домена (я использую адрес privacyguardian.org для защиты данных WHOIS).
  4. После получения письма от AWS, нажмите на ссылку в письме для подтверждения запроса на выпуск SSL сертификата. Имейте в виду, что AWS отправит два письма (для *.mystaticsite77.ru и mystaticsite77.ru ), нужно подтвердить их оба.

Работа с AWS EC2 через командную строку в Unix/Linux

Устанавливаем AWS CLI:

Открываем конфиг:

# vim ~/.aws/credentials

Прописываем ключи. Например:

aws_access_key_id = XXXXXXXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYY

Где:

  • Your_acc_name — Имя для аккаунта. Потом можно его использовать.
  • aws_access_key_id — Ключик.
  • aws_secret_access_key — Еще один ключик.

Просмотр AWS EC2 через командную строку в Unix/Linux

И так, чтобы просмотреть имеющиеся волюмы для конкретного профеля, используйте:

$ aws ec2 --profile Reaxys describe-volumes

PS: Иногда требуется указывать регион:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes

Так же, можно region указать в конфиг-файле.

Чтобы распечатать только 1-ю volume, используйте:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes'

Чтобы распечатать все волюмы, используйте:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes'

Можно выводить не все параметры, а только определенные, например:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes.{ID:VolumeId,AZ:AvailabilityZone,Size:Size}'

Вот еще пример:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes.{ID:VolumeId,InstanceId:Attachments.InstanceId,AZ:AvailabilityZone,Size:Size}'

Можно вывести волюмы с определенного региона, например:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes'

Можно выводить содержание в виде текста, например:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes..InstanceId, AvailabilityZone, Size, FakeKey]' --output text

Добавил параметр для вывода состояния волюмы:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes..InstanceId, AvailabilityZone, State, Size, FakeKey]' --output text

Очень удобно и наглядно использовать вывод в виде столбцов, например:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes.{ID:VolumeId,InstanceId:Attachments.InstanceId,AZ:AvailabilityZone,Size:Size}' --output table

Ничего сложного.

Проверим доступность зон:

$ aws ec2 --profile Reaxys --region us-east-1 describe-availability-zones

Чтобы получить описание всех имеджей, выполните:

$ aws ec2 --profile Reaxys --region us-east-1 describe-images

Или, для определенного:

$ aws ec2 --profile Reaxys --region us-east-1 describe-images --image-ids "ami-f480c59e"

Идем далее.

Генерация CLI Skeleton через командную строку в Unix/Linux

Большинство команд CLI поддерживают параметры «-generate-cli-skeleton» и «-cli-input-json», которые вы можете использовать для хранения параметров в JSON и читать их из файла, а не вводить их в командной строке.

И так, сгенерируем скелетон:

$ aws ec2 --profile Reaxys --region us-east-1 run-instances --generate-cli-skeleton --dry-run

PS: Опция «—dry-run» служит для тестирования ( она не создает никаких изменений).

Можно сохранить вывод в файл:

$ aws ec2 --profile Reaxys --region us-east-1 run-instances --generate-cli-skeleton > ec2runinst.json

Можно открыть данный файл и внести изменения ( например удалить не нужное или что-то добавить).

Передайте конфигурацию JSON-у:

$ aws ec2 --profile Reaxys --region us-east-1 run-instances --cli-input-json file://ec2runinst.json

Перезапуск AWS EC2 инстенсов через командную строку в Unix/Linux

Смотрим какие имеются:

$ aws ec2 --profile Reaxys --region us-east-1 describe-instances --query 'Reservations[].Instances[].' --output text

И, собственно, ребутаем:

$ aws ec2 --profile Reaxys --region us-east-1 reboot-instances --instance-ids i-09aa273c40cb05767 --dry-run

PS: Я использую «—dry-run» опцию для тестов. С данной опцией не произойдет рестарт инстенса.

В AWS CLI для EC2 нет ничего сложного. Нужно почитать документацию и вникнуть в процесс.

Для помощи, используйте:

$ aws ec2 help

Я постараюсь дополнять данную тему новыми примерами.

Вот и все, статья «Работа с AWS EC2 через командную строку в Unix/Linux» завершена.

Использование AWS с многофакторной аутентификацией (MFA) в Unix/Linux

Многие ставят MFA на свои учетные записи в AWS для более секурного использования. Типа, — супер секурно и все дела… Это правда, но MFA с AWScli в стандартной конфигурации, — не будет работать из-за того, что используется временные токены.

Я расскажу как можно обойти это дело и начать использовать AWS cli с MFA. Для начала, ставим питон (у меня используется python3). Ставим библиотеки:

# pip3 install boto3 aws-mfa

PS: Если используете питон2, то можно выполнить:

# pip install boto3 aws-mfa

и так, либы уже установлены, — осталось немного видоизменить конфиг-файл самого AWS. Открываем:

$ vim ~/.aws/credentials

Стандартный конфиг выглядит следующим образом:

aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYY
region = us-east-1


aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYY

Приводим к виду:

aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYY
region = us-east-1


aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYY
region = us-east-1


aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYY


aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYY

И так далее….. Суть уловили…

После чего, запускаем:

$ aws-mfa --duration 1800 --device arn:aws:iam::41316628489:mfa/captain --profile=LinuxNotes

Где:

  • —duration 1800 — Время (Количество секунд), через которое будет сбрасыватся временные креденшелы.
  • —device arn:aws:iam::41316628489:mfa/captain — Это MFA роль. Ее можно глянуть через веб-консоль.
  • —profile=LinuxNotes — профиль, который прописали в ~/.aws/credentials

Для удобства использования, можно использовать переменные:

$ export MFA_DEVICE=arn:aws:iam::41316628489:mfa/captain
$ export MFA_STS_DURATION=1800

И потом, просто вызвать:

$ aws-mfa --profile=LinuxNotes

PS: Так же, можно заекспортировать и профиль:

$ export AWS_PROFILE=LinuxNotes

После запуска данной команды, вас попросят ввести MFA. Мне надоело каждый раз доставать свой телефон и вводить значение, по этому — я написал скрипт на питоне:

# vim get_creds.py

Вот как он выглядит:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import configparser
import argparse
import pyotp


def get_creds_from_acc_name(acc_name):
    db_file = '~/.aws/credentials'
    config = configparser.ConfigParser()
    config.sections()
    config.read(db_file)
    aws_access_key_id = config
    aws_secret_access_key = config
    region = config
    mfa_autorisation = config

    return aws_access_key_id, aws_secret_access_key, region, mfa_autorisation


def generate_token(acc_name):
    account_creds = get_creds_from_acc_name(acc_name)
    totp = pyotp.TOTP(account_creds)
    print("Current OTP for %s:" % acc_name, totp.now())
    # print (totp.verify(totp.now()))

    return generate_token


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--acc', dest='account', help='Account name', default=None)
    results = parser.parse_args()
    ac_name = results.account
    generate_token(ac_name)


if __name__ == '__main__':
    main()

Где нужно изменить:

  • db_file — Это путь где лежит ваш .aws/credentials файл.
  • Добавить значение для MFA в поле mfa_autorisation (нужно самому вставить) — в файле .aws/credentials.

После чего, можно использовать:

$ python3 get_creds.py --acc LinuxNotes

Current OTP for LinuxNotes: 328868

После чего, можно использовать AWS CLI, например:

# aws ec2 describe-instances --region=us-east-1 --profile=LinuxNotes --query "Reservations[].Instances[].PrivateIpAddress[]" --instance-ids

Это немного облегчает жизнь. У меня на этом все и статья «Использование AWS с многофакторной аутентификацией (MFA) в Unix/Linux» подошла к завершению.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: