我最近安装了随AWShell For AWS CLI增强功能一起提供的AWS .NET SDK。
我继续添加IAM用户并生成密钥对,然后将其安装到SDK Store中:
Set-AWSCredentails -AccessKey AAAAAAAAAAAAAA -SecretKey AAAAAAAAAA / AAAA -StoreAs默认
然后我通过提出我知道无法访问的请求来测试我的凭据:
GET-EC2Instance
...然后惊讶地发现打印出三个EC2实例。实例我不拥有!我也尝试过这个:
Get-EC2Instance -Profile default
产生了期望的结果,访问不足。为了继续测试,我向用户添加了EC2FullAccess并重复了最后一行。它正确打印了我个人使用的EC2实例:
GroupNames : {}
Groups : {}
Instances : {aws_personal}
OwnerId : 835586800000
RequesterId :
ReservationId : r-0e625fd77d0000000
但是,每当我尝试不使用-Profile default
的语句时,我都会访问另一个帐户。在没有详细说明的情况下,我在AWS Dashboard中禁用了对该帐户的访问权限。现在命令产生这个输出:
Get-EC2Instance:AWS无法验证提供的访问凭据 在行:1个字符:1 + Get-EC2Instance
我的.AWS
中没有%UserProfile%
目录。在我的计算机上搜索.aws
或credentials
无法找到可以解释此问题的凭据文件。
答案 0 :(得分:1)
我无法解释为什么你在指定-ProfileName参数之间看到不同的行为,但是我可以说明凭证的来源。
PowerShell工具可以读取两个凭据位置(以及在EC2实例上运行时的环境变量和EC2实例元数据)。
首先是加密的SDK凭据存储文件,位于C:\ Users \ userid \ AppData \ Local \ AWSToolkit \ RegisteredAccounts.json - 这个在PowerShell工具,AWS SDK for .NET和适用于Visual Studio的AWS Toolkit。它还可以从ini格式的共享凭证文件中读取(与AWS CLI和其他AWS开发工具包共享)。请注意,虽然可以在帐户和计算机之间移动共享凭据文件,但加密的SDK文件只能由拥有用户使用,并且只能在该单个计算机上使用。
PowerShell工具目前只写入一个商店 - 这是.NET工具专用的加密文件。因此,当您设置凭据并使用-StoreAs选项时,配置文件将被写入RegisteredAccounts.json文件。如果您在文本编辑器中打开此文件,您应该会看到名为“default”的配置文件以及两个加密的blob,它们是您的访问密钥和密钥。
当使用命令给出配置文件名称时,工具首先在RegisteredAccounts.json中查找具有该名称的配置文件,如果在那里找不到,则它会尝试读取%USERPROFILE%.aws \ credentials中的ini格式文件(要绕过加密存储,您可以使用-ProfilesLocation参数指向要从中加载凭据的ini格式文件,如果它不在用户配置文件下的默认位置)。
如果没有给出配置文件名称,工具将探测以找到最接近的凭据集 - 搜索“路径”在https://blogs.aws.amazon.com/net/post/Tx2HQ4JRYLO7OC4/的博客文章中进行了描述。如果您看到加载配置文件的引用,请记住这些工具首先在RegisteredAccounts.json中检查配置文件,然后在共享凭证文件中检查。
HTH,您可以找到工具查找凭据的位置。