AWS CLI через MFA

Далее последует инструкция по настройке AWS MFA, и последющей установке и настройке AWS CLI.

К сожалению, у меня на эту обязательную процедуру ушла половина рабочего дня. Чтобы другим неуверенным пользователям AWS 😉 как и я сам, не тратить драгоценное время на банальное, решил составить инструкцию.

Даже для sandbox аккаунта настройка MFA — это, как правило, обязательное требование. У нас это так.

Настройка MFA

  1. Установите совместимое мобильное приложение
  2. Зайдите в AWS консоль
  3. My Security Credentials -> Assign MFA Device
    AWS CLI через MFA
  4. Virtual MFA Device
    AWS CLI через MFA
  5. Следуйте инструкциям на экране
    AWS CLI через MFA
    AWS CLI через MFA
  6. Виртуальное устройство готово
    AWS CLI через MFA

Установка AWS CLI

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

Настройка именованного профиля

https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html

  1. My Security Credentials -> Create access key
    AWS CLI через MFA
  2. Скопируйте ключ в буфер обмена. Он понадобится на следующем шаге
  3. $ aws configure --profile <your profile name>

AWS CLI через MFA

  1. Скопируйте ARN виртуального устройства
    AWS CLI через MFA
  2. aws sts get-session-token --profile <имя профиля> --serial-number <ARN виртуального устройства> --token-code <одноразовый пароль>
    Одноразовый пароль необходимо взять из мобильного приложения настроенного ранее.
  3. Команда выведет JSON, отдельные поля которго необходимо подставить в соответствующие переменные окржуения AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN

Я решил автоматизировать через ~/.bash_profile
Для разбора JSON данный скрипт требует jq.

#!/usr/bin/env bash

aws_login() {
    session=$(aws sts get-session-token "$@")
    echo "${session}"
    AWS_ACCESS_KEY_ID=$(echo "${session}" | jq -r '.Credentials.AccessKeyId')
    export AWS_ACCESS_KEY_ID
    AWS_SECRET_ACCESS_KEY=$(echo "${session}" | jq -r '.Credentials.SecretAccessKey')
    export AWS_SECRET_ACCESS_KEY
    AWS_SESSION_TOKEN=$(echo "${session}" | jq -r '.Credentials.SessionToken')
    export AWS_SESSION_TOKEN
}

alias aws-login-dev='aws_login --profile <имя dev профиля> --serial-number <ARN виртуального устройства> --token-code '
alias aws-login-prod='aws_login --profile <имя prod профиля> --serial-number <ARN виртуального устройства> --token-code '

Использование:

$ aws-login-dev <одноразовый пароль>

Надеюсь данная инструкция поможет вам избежать пространных блужданий по официальной документации 😉

Источник: habr.com