StoredProfileAWSCredentials抱怨它无法在Web应用程序中找到配置文件

时间:2015-03-20 20:50:19

标签: asp.net-mvc amazon-web-services

当我在Web应用程序中运行StoredProfileAWSCredentials默认构造函数时,我看到返回以下错误:

System.AggregateException: One or more errors occurred. ---> System.ArgumentException: Path cannot be the empty string or all whitespace.
Parameter name: path
   at System.IO.Directory.GetParent(String path)
   at Amazon.Runtime.StoredProfileAWSCredentials.DetermineCredentialsFilePath(String profilesLocation) in d:\Jenkins\jobs\build-sdkandtools-release\workspace\sdk\src\AWSSDK_DotNet35\Amazon.Runtime\AWSCredentials.cs:line 354
   at Amazon.Runtime.StoredProfileAWSCredentials..ctor(String profileName, String profilesLocation) in d:\Jenkins\jobs\build-sdkandtools-release\workspace\sdk\src\AWSSDK_DotNet35\Amazon.Runtime\AWSCredentials.cs:line 300
   at Amazon.Runtime.StoredProfileAWSCredentials..ctor(String profileName) in d:\Jenkins\jobs\build-sdkandtools-release\workspace\sdk\src\AWSSDK_DotNet35\Amazon.Runtime\AWSCredentials.cs:line 270
   at Amazon.Runtime.StoredProfileAWSCredentials..ctor() in d:\Jenkins\jobs\build-sdkandtools-release\workspace\sdk\src\AWSSDK_DotNet35\Amazon.Runtime\AWSCredentials.cs:line 260

我在没有参数的情况下调用此方法。我有一个定义的“默认”配置文件,它在使用时有效。 Web应用程序在IIS 6.1下运行,该应用程序池使用我的凭据(因为AWS凭据是在我的登录下获得的)。

我尝试使用名为“default”的双参数构造函数和RegisteredAccounts.json文件的本地磁盘路径(由VS 2013的AWS Toolkit扩展为我生成)。

这里发生了什么,我该如何解决?

2 个答案:

答案 0 :(得分:6)

您需要在Web.config文件中设置路径:

<appSettings>
    <add key="AWSProfilesLocation" value="path\to\RegisteredAccounts.json" />
    <add key="AWSProfileName" value="default"/>
    <add key="AWSRegion" value="us-west-2" />
</appSettings>

凭证文件应采用以下格式:

[default]
aws_access_key_id = XXXXXXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

另一个选择是直接将您的密钥包含在web / app.config中:

<appSettings>
    <add key="AWSAccessKey" value="your key" />
    <add key="AWSSecretKey" value="your key"/>
</appSettings>

documentation中提供了更多详细信息。

答案 1 :(得分:1)

我在同样的问题上挣扎,幸运的是源代码在GitHub上打开: https://github.com/aws/aws-sdk-net/tree/master/AWSSDK_DotNet35

当您使用SDK商店时,它会尝试使用以下代码获取RegisteredAccounts.json文件的路径: System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData)+&#34; / AWSToolkit&#34;

在我的本地环境中,它指向我的用户个人资料,例如&#34; C:\ Users \ MyUser \ AppData \ Local \ AWSToolkit&#34;

但是在服务器中它返回了一个空白字符串,因为我在应用程序池中使用了网络用户,然后我为服务器中的本地用户更改了它,即使这样,路径也与我所使用的路径不同得到了: &#34; C:\的Windows \ system32 \设置\ systemprofile \应用程序数据\本地\ AWSToolkit&#34;

然后我在那里复制了.json文件,但是直到我在服务器中使用新用户登录并且SDK的PowerShell工具使用以下命令创建了一个新文件时,它才起作用: Set-AWSCredentials -AccessKey -SecretKey -StoreAs

它在位于用户文件夹中的AppData中创建了文件,然后将其复制到system32中的路径。

然后它终于奏效了。看起来太麻烦,但我真的需要加密凭据,当你使用AWSProfilesLocation时,你必须在纯文本文件中存储UserAcessKey和UserSecretKey而没有任何安全性。