AWS “Не указаны учетные данные”, даже когда применена политика IAM для EC2

Вопрос или проблема

Это странная проблема, для которой мы не можем найти решение.

На AWS мы запускаем Microsoft Remote Desktop Services на Windows Server 2019. Все серверы присоединены к домену AWS AD Directory Services.

Серверы RDC Host имеют IAM-политику, которая позволяет все действия с S3.

У нас есть два пользователя в домене, оба назначены в одну группу – группу по умолчанию “Domain Users”.

Когда мы входим в Session Host с одним пользователем, у нас нет проблем с вызовом “Get-S3Object”. Но когда мы входим со вторым пользователем и вызываем “Get-S3Object”, мы получаем “Не указаны учётные данные или получены из сохранённых/значений по умолчанию” – разрешения должны быть предоставлены IAM-политикой, прикреплённой к EC2, которая работает для первого пользователя.

Чтобы устранить проблему, мы обнаружили, что если мы удаляем профиль Windows второго пользователя, то в следующий раз, когда второй пользователь входит, ему предоставляется временный профиль, и он может вызвать “Get-S3Object”, так что явно есть проблема с пользовательским профилем.

Сервера Windows практически являются стандартным экземпляром, и странно, что удаление профиля пользователя решает проблему…

Мы также создали нового доменного пользователя, у которого была такая же проблема на одном Session Host, но не на другом. Это очень случайная проблема.

Кто-нибудь сталкивался с этой проблемой? Что может быть причиной этого?

Может быть, у неудачного пользователя установлены какие-то переменные окружения AWS_…, и они мешают учётным данным экземпляра? Я не специалист по Windows, но, конечно, есть способ перечислить все переменные окружения. Если установлена какая-либо переменная, начинающаяся с AWS, снимите её и попробуйте снова.

Надеюсь, это поможет 🙂

Учётные данные AWS обычно поступают либо из переменных окружения, либо из $HOME/.aws/credentials, либо из метаданных экземпляра. Существует ли %USERPROFILE%\.aws\credentials для второго пользователя, случайно?

Согласно этому документу: https://docs.aws.amazon.com/powershell/latest/userguide/specifying-your-aws-credentials.html

для PowerShell учётные данные также могут находиться по адресу C:\Users\username\AppData\Local\AWSToolkit\RegisteredAccounts.json.

Учётные данные AWS – это не магия. Это просто алгоритм, который ищет учётные данные в нескольких местах в строго определённом порядке. Либо второй пользователь не может читать URL метаданных экземпляра, либо должно быть место с более высоким приоритетом, где находятся устаревшие учётные данные.

Ответ или решение

Проблема отсутствия учетных данных на AWS при использовании EC2 IAM политики

Введение

В данной статье мы рассмотрим проблему, с которой столкнулись пользователи в среде AWS, использующие Microsoft Remote Desktop Services на Windows Server 2019. Проблема заключается в том, что один из пользователей не может получить доступ к объектам S3 через команду Get-S3Object, при этом второй пользователь работает без каких-либо проблем. Мы постараемся выявить возможные причины этой ошибки и предложить пути ее решения.

Контекст проблемы

Все серверы Windows Server 2019 привязаны к домену AWS AD Directory Services, и каждому EC2 экземпляру назначена IAM политика с полными правами на действия с S3. В задаче обозначено, что ошибки возникают при попытке выполнения команды Get-S3Object у второго пользователя, при этом удаление профиля пользователя нарушает эту проблему.

Причины возникновения ошибки

  1. Проблемы с профилем Windows: Удаление профиля пользователя приводит к созданию временного профиля, который, как показывает опыт, не содержит предыдущих настроек и переменных окружения. Это может указывать на то, что в старом профиле могли быть установлены конфликты, мешающие получению учетных данных.

  2. Неверные конфигурации переменных среды: На системах Windows могут быть установлены переменные окружения, которые влияют на работу AWS CLI и PowerShell. Особенно это касается переменных, начинающихся с AWS_. Если такая переменная существует и имеет значение, не позволяющее получать доступ к метаданным EC2 экземпляра, это может стать источник проблемы.

  3. Конфликт учетных данных: Существует возможность, что в папке %USERPROFILE%\.aws\credentials у второго пользователя находятся неверные или устаревшие учетные данные, которые пo приоритету имеют значение выше, чем удостоверение EC2 экземпляра. Это также касается файла C:\Users\username\AppData\Local\AWSToolkit\RegisteredAccounts.json, который может хранить данные о подключаемых учетных записях.

Рекомендации по устранению проблемы

  1. Проверка переменных окружения: Используйте команду PowerShell для отображения всех переменных окружения. Убедитесь, что ни одна из них не содержит неправильных значений, связанных с AWS. Если же таковые имеются, попробуйте их удалить или изменить.

    Get-ChildItem Env: | Where-Object { $_.Name -like "AWS_*" }
  2. Анализ файла учетных данных: Проверьте наличие и содержимое файлов %USERPROFILE%\.aws\credentials иC:\Users\username\AppData\Local\AWSToolkit\RegisteredAccounts.json. Убедитесь, что в этих файлах нет записи, которая могла бы конфликтовать с политиками IAM.

  3. Сравнение профилей пользователей: Определите различия в настройках между двумя пользователями, чтобы выяснить, что именно может быть причиной проблемы. Это могут быть не только настройки, но и разрешения, предоставленные пользователям.

  4. Создание нового пользователя: Если указанная проблема возникает и у нового пользователя, это может указывать на системную проблему. Возникновение проблемы на различных хостах также может свидетельствовать о локальной конфигурации.

  5. Использование IAM ролей: Убедитесь, что политика IAM привязана к роли экземпляра и корректно применена. Убедитесь, что экземпляры EC2 имеют доступ к метаданным, которые позволяют получить временные учетные данные.

Заключение

Ошибки получения учетных данных в AWS могут варьироваться по сложности и природе. В случае с конфликтами в пользовательских профилях специфика Windows может влиять на доступ к службам AWS. Следуя вышеуказанным рекомендациям, пользователи смогут минимизировать риск возникновения подобных проблем и обеспечить надежный доступ к AWS S3 через IAM роли.

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

Капча загружается...