Как определить, какие AWS ключи доступа используются для вызовов boto3 в Python? - PullRequest
0 голосов
/ 06 февраля 2020

Я пишу скрипт для автоматического поворота AWS Ключи доступа на ноутбуках разработчика. Сценарий выполняется в контексте разработчика с использованием любого профиля, который они определяют из своего файла ~/.aws/credentials.

Проблема заключается в том, что если у них есть два ключа API, связанные с их учетной записью пользователя IAM, я не могу создать новую пару ключей пока я не удалю существующий. Однако, если я удаляю тот ключ, который использует сценарий (который, вероятно, из файла ~/.aws/credentials, но может быть из переменных окружения токенов сеанса или чего-то еще), сценарий не сможет создать новый ключ. Есть ли способ определить, какой AWS идентификатор ключа доступа используется для подписи вызовов API boto3 в python?

Мой запасной вариант - проанализировать файл ~/.aws/credentials, но я бы предпочел более надежное решение.

1 Ответ

2 голосов
/ 06 февраля 2020

Создайте сеанс boto3 по умолчанию и получите учетные данные:

print(boto3.Session().get_credentials().access_key)

Тем не менее, я не обязательно большой поклонник предлагаемого вами подхода. Оба ключа могут быть законно использованы. Я бы предпочел стратегию, которая уведомляла бы пользователей о нескольких ключах, просила их подтвердить их использование и предлагать им деактивировать или удалять ключи, которые больше не используются.

Вы также можете использовать IAM get_access_key_last_used () для получения информации о том, когда указанный ключ доступа использовался в последний раз.

Возможно, было бы разумно удалить ключи, которые а) неактивны и б) не использовались в течение N дней, но я думаю, это все еще растянуто и потребует от ваших пользователей тщательной обработки и осведомленности.

Решение real здесь - это перевод ваших пользователей на федеративный доступ и 100% использование ролей IAM. Таким образом, никаких долгосрочных полномочий нигде нет. Я думаю, что это должно быть конечной целью всех AWS пользователей.

...