Лучшие практики безопасного управления учетными данными с помощью AWS CLI
Безопасное управление учетными данными имеет первостепенное значение при взаимодействии с Amazon Web Services (AWS) через интерфейс командной строки (CLI). Ключи доступа (ID ключа доступа и Секретный ключ доступа) предоставляют программный доступ к вашим облачным ресурсам, поэтому их компрометация представляет значительный риск безопасности. В этой статье описываются важнейшие лучшие практики хранения, управления и использования этих учетных данных для минимизации воздействия и поддержания надежной системы безопасности при автоматизации задач или управлении ресурсами через CLI.
AWS CLI использует определенные методы для поиска учетных данных. Понимание этих методов — от конфигурационных файлов до переменных среды и ролей IAM — является первым шагом к обеспечению безопасности вашей среды. Мы рассмотрим рекомендуемый порядок приоритета и выделим современные, более безопасные альтернативы жесткому кодированию секретов.
Понимание порядка загрузки учетных данных AWS CLI
AWS CLI разрешает учетные данные, используя определенную иерархию. Знание этого порядка помогает понять, где CLI ищет учетные данные в первую очередь, и гарантирует, что ваша намеченная, наиболее безопасная конфигурация имеет приоритет.
CLI проверяет наличие учетных данных в следующем порядке (от наивысшего приоритета к наименьшему):
- Параметры командной строки: Учетные данные, передаваемые непосредственно через флаги (
--access-key-idи--secret-access-key). - Переменные среды: Учетные данные, установленные в текущей сессии оболочки.
- Процесс учетных данных (Credential Process): Вывод настроенного процесса учетных данных (часто используется для SSO или внешних инструментов).
- Цепочка поставщиков учетных данных AWS (AWS Credential Provider Chain): Эта цепочка проверяет следующее по порядку:
a. Учетные данные из роли IAM, назначенной запущенному экземпляру EC2 или задаче ECS.
b. Учетные данные, хранящиеся в общем файле учетных данных (~/.aws/credentials). - Конфигурационный файл: Если учетные данные не найдены, CLI прекратит поиск.
Совет по безопасности: Использование флагов командной строки, как правило, не рекомендуется для регулярного использования, поскольку история команд (
.bash_history) может раскрыть конфиденциальную информацию.
1. Защита учетных данных в конфигурационных файлах (~/.aws/credentials)
По умолчанию AWS CLI хранит учетные данные в общем файле учетных данных, который обычно находится по адресу ~/.aws/credentials. Несмотря на удобство, этот файл должен быть защищен.
Защита файла и разрешения
Крайне важно ограничить доступ на чтение к этому файлу. В системах Linux/macOS установите разрешения таким образом, чтобы только владелец мог читать или записывать файл:
chmod 600 ~/.aws/credentials
Использование профилей для сегментации
Использование отдельных профилей позволяет разделять учетные данные для различных сред (например, разработка, промежуточное тестирование, производство) или разных учетных записей. Это предотвращает случайные действия между средами.
Пример ~/.aws/credentials:
[default]
aws_access_key_id = AKIABCDEFGHIJKLMNO
aws_secret_access_key = xYzdEfGhIjKlMnOpQrStUvWxYz1234567890
[production-user]
aws_access_key_id = AKIA9876543210ZYXWVU
aws_secret_access_key = aBcDeFgHiJkLmNoPqRsTuVwXyZ9876543210
При использовании именованного профиля вы должны указать его с помощью флага --profile:
aws s3 ls --profile production-user
2. Использование переменных среды
Переменные среды предлагают динамический способ предоставления учетных данных сеансу CLI без их записи на диск. Это часто предпочтительнее для временного доступа или в сценариях, где запись на диск ограничена или нежелательна.
Установите следующие переменные в сеансе вашей оболочки:
export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
export AWS_DEFAULT_REGION="us-east-1"
Важное замечание о приоритете: Учетные данные, установленные через переменные среды, всегда заменяют те, которые найдены в файле ~/.aws/credentials, поскольку они находятся выше в цепочке загрузки учетных данных.
Предупреждение о безопасности: Будьте осторожны при экспорте переменных среды, особенно в общих терминалах или скриптах, которые могут быть залогированы. Всегда удаляйте их сразу после использования:
bash unset AWS_ACCESS_KEY_ID unset AWS_SECRET_ACCESS_KEY
3. Самый безопасный метод: Роли IAM (Instance Profiles/Web Identity)
Для рабочих нагрузок, работающих в инфраструктуре AWS (например, экземпляры EC2, функции Lambda или задачи ECS), самая безопасная практика — никогда не использовать статические учетные данные. Вместо этого используйте роли IAM.
Роли IAM позволяют назначать временные, автоматически ротируемые учетные данные безопасности ресурсу через службу метаданных экземпляра. AWS CLI автоматически обнаруживает и использует эти учетные данные без их хранения на диске или в переменных среды.
Как это работает:
- Экземпляр EC2 запускается с привязанной ролью IAM.
- CLI, запущенный на этом экземпляре, запрашивает временные учетные данные в Службе метаданных экземпляра (IMDS).
- CLI использует эти временные учетные данные для всех последующих вызовов API.
Это полностью устраняет риск, связанный с долгосрочными ключами доступа.
4. Использование процесса учетных данных (Credential Process) и SSO
Современное управление учетными данными все больше зависит от внешних поставщиков аутентификации, часто интегрируемых через конфигурацию credential_process.
AWS SSO (единый вход)
AWS SSO предоставляет унифицированный способ управления доступом к нескольким учетным записям и ролям с использованием существующих поставщиков удостоверений (IdP). AWS CLI беспрепятственно интегрируется с SSO, абстрагируя управление временными токенами сеанса.
Чтобы начать использовать SSO, сначала выполните команду входа:
aws sso login --profile <profile-name>
Это откроет окно браузера для аутентификации. После успешного входа CLI сохранит необходимые токены сеанса, часто используя механизм credential_process внутренне для автоматического обновления токенов, что означает, что вы не работаете с необработанными секретными ключами.
Настройка credential_process
Вы можете настроить CLI для вызова внешнего инструмента (например, агента хранилища или вспомогательной программы SSO) для динамического получения учетных данных. Это указывается в конфигурационном файле:
Пример ~/.aws/config:
[profile my-vault-profile]
region = us-west-2
credential_process = /usr/local/bin/my-vault-cli get-aws-creds --profile my-vault-profile
Этот метод важен при интеграции с инструментами управления секретами, такими как HashiCorp Vault.
Сводка и контрольный список лучших практик
Чтобы максимально повысить безопасность ваших операций AWS CLI, придерживайтесь этих основных принципов:
- Принцип наименьших привилегий: Убедитесь, что все пользователи и роли IAM имеют только те разрешения, которые строго необходимы для выполнения их задач.
- Предпочитайте роли ключам: Всегда используйте роли IAM (Instance Profiles) при работе в инфраструктуре AWS.
- Используйте SSO: Для интерактивного использования человеком используйте AWS SSO для управления доступом к нескольким учетным записям.
- Никогда не используйте ключи в коде: Избегайте размещения ключей доступа непосредственно в скриптах, исходном коде или истории команд.
- Защита файла учетных данных: Ограничьте разрешения файловой системы (
chmod 600) для~/.aws/credentials. - Регулярная ротация ключей: Если необходимо использовать статические ключи, введите строгий график ротации.
Отдавая приоритет методам динамического получения учетных данных, таким как роли IAM и SSO, перед статическими ключами доступа, хранящимися на диске, вы значительно уменьшаете поверхность атаки, связанную с использованием AWS CLI.