Использование AWS с многофакторной аутентификацией (MFA) в 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

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

[default]
aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYY
region = us-east-1

[LinuxNotes]
aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYY

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

[default]
aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYY
region = us-east-1

[default-long-term]
aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYY
region = us-east-1

[LinuxNotes]
aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYY

[LinuxNotes-long-term]
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[acc_name]['aws_access_key_id']
    aws_secret_access_key = config[acc_name]['aws_secret_access_key']
    region = config[acc_name]['region']
    mfa_autorisation = config[acc_name]['mfa_autorisation']

    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[3])
    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» подошла к завершению.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.