Вопрос или проблема
Это странная проблема, для которой мы не можем найти решение.
На 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
у второго пользователя, при этом удаление профиля пользователя нарушает эту проблему.
Причины возникновения ошибки
-
Проблемы с профилем Windows: Удаление профиля пользователя приводит к созданию временного профиля, который, как показывает опыт, не содержит предыдущих настроек и переменных окружения. Это может указывать на то, что в старом профиле могли быть установлены конфликты, мешающие получению учетных данных.
-
Неверные конфигурации переменных среды: На системах Windows могут быть установлены переменные окружения, которые влияют на работу AWS CLI и PowerShell. Особенно это касается переменных, начинающихся с
AWS_
. Если такая переменная существует и имеет значение, не позволяющее получать доступ к метаданным EC2 экземпляра, это может стать источник проблемы. -
Конфликт учетных данных: Существует возможность, что в папке
%USERPROFILE%\.aws\credentials
у второго пользователя находятся неверные или устаревшие учетные данные, которые пo приоритету имеют значение выше, чем удостоверение EC2 экземпляра. Это также касается файлаC:\Users\username\AppData\Local\AWSToolkit\RegisteredAccounts.json
, который может хранить данные о подключаемых учетных записях.
Рекомендации по устранению проблемы
-
Проверка переменных окружения: Используйте команду PowerShell для отображения всех переменных окружения. Убедитесь, что ни одна из них не содержит неправильных значений, связанных с AWS. Если же таковые имеются, попробуйте их удалить или изменить.
Get-ChildItem Env: | Where-Object { $_.Name -like "AWS_*" }
-
Анализ файла учетных данных: Проверьте наличие и содержимое файлов
%USERPROFILE%\.aws\credentials
иC:\Users\username\AppData\Local\AWSToolkit\RegisteredAccounts.json
. Убедитесь, что в этих файлах нет записи, которая могла бы конфликтовать с политиками IAM. -
Сравнение профилей пользователей: Определите различия в настройках между двумя пользователями, чтобы выяснить, что именно может быть причиной проблемы. Это могут быть не только настройки, но и разрешения, предоставленные пользователям.
-
Создание нового пользователя: Если указанная проблема возникает и у нового пользователя, это может указывать на системную проблему. Возникновение проблемы на различных хостах также может свидетельствовать о локальной конфигурации.
-
Использование IAM ролей: Убедитесь, что политика IAM привязана к роли экземпляра и корректно применена. Убедитесь, что экземпляры EC2 имеют доступ к метаданным, которые позволяют получить временные учетные данные.
Заключение
Ошибки получения учетных данных в AWS могут варьироваться по сложности и природе. В случае с конфликтами в пользовательских профилях специфика Windows может влиять на доступ к службам AWS. Следуя вышеуказанным рекомендациям, пользователи смогут минимизировать риск возникновения подобных проблем и обеспечить надежный доступ к AWS S3 через IAM роли.