这是一个奇怪的问题,我们无法找到解决方案。
在 AWS 上,我们在 Windows Server 2019 上运行 Microsoft 远程桌面服务。所有服务器都加入了 AWS AD 目录服务域。
RDC 主机服务器具有允许对 S3 执行所有操作的 IAM 策略。
我们在域中有两个用户,都分配到同一个组 - 默认组“域用户”。
当我们使用一个用户登录会话主机时,调用“Get-S3Object”没有任何问题。但是当我们使用第二个用户登录并调用“Get-S3Object”时,我们得到“未指定或未从持久化/shell 默认值获取凭据” - 权限应由附加到 EC2 的 IAM 策略授予,该策略适用于第一个用户。
为了解决这个问题,我们发现,如果我们删除第二个用户的 Windows 配置文件,那么下次第二个用户登录时,他们会获得一个 TEMP 配置文件,并且他们能够调用“Get-S3Object”,所以显然用户配置文件有问题。
Windows 服务器实际上是一个原始实例,奇怪的是删除用户的配置文件可以解决问题...
我们还创建了一个新的域用户,该用户在一个会话主机上遇到了同样的问题,但在另一台会话主机上没有遇到。这是一个非常随机的问题。
还有人遇到过这个问题吗?是什么原因导致这种情况发生?
答案1
失败的用户是否可能设置了一些 AWS_... 环境变量,然后这些变量会干扰实例凭据?我不是 Windows 用户,但肯定有办法列出所有环境变量。如果设置了以 AWS 开头的变量,请取消设置并重试。
希望有帮助:)
答案2
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,或者必须有一个优先级更高的位置,其中包含过时的凭证。