Как реализовать двухфакторную аутентификацию (MFA) для AWS CLI?

«Как реализовать двухфакторную аутентификацию (MFA) для AWS CLI?» — вопрос из категории Облачные платформы, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для использования AWS CLI с включенной MFA необходимо получать временные сессионные учетные данные. Постоянные ключи доступа (Access Key/Secret Key) с MFA напрямую не работают.

Шаги настройки и использования:

  1. Настройка MFA на пользователе IAM:

    • В консоли IAM привяжите виртуальное (например, Google Authenticator) или физическое MFA-устройство к своему пользователю.
    • Запишите ARN устройства MFA (например, arn:aws:iam::123456789012:mfa/username).
  2. Получение временных токенов: Используйте команду sts get-session-token, передав код с MFA-устройства.

    aws sts get-session-token 
      --serial-number arn:aws:iam::123456789012:mfa/username 
      --token-code 123456

    Ответ будет содержать AccessKeyId, SecretAccessKey и SessionToken.

  3. Настройка профиля AWS CLI с временными учетными данными:

    • Вариант A: Экспорт переменных окружения (для текущей сессии):
      export AWS_ACCESS_KEY_ID="ASIA..."
      export AWS_SECRET_ACCESS_KEY="..."
      export AWS_SESSION_TOKEN="..."
    • Вариант B: Добавление нового профиля в ~/.aws/credentials (предпочтительно для скриптов):
      [mfa-profile]
      aws_access_key_id = ASIA...
      aws_secret_access_key = ...
      aws_session_token = ...

      Затем используйте CLI с флагом --profile mfa-profile.

  4. Автоматизация (опционально): Можно написать shell-скрипт, который запрашивает MFA-код, получает токены и автоматически обновляет профиль в credentials-файле. Для парсинга JSON-ответа AWS CLI удобно использовать jq.

Важно: Временные учетные данные действуют по умолчанию 12 часов (максимум 36 часов, если у пользователя есть соответствующие права). После истечения срока действия команду нужно выполнить заново.