在Windows上访问AWS Credentials文件

时间:2018-01-27 20:59:49

标签: amazon-web-services aws-sdk aws-sdk-net

无论我尝试什么,似乎我的网络服务都无法访问我的.aws /凭证文件。

我总是收到这个错误:

  

System.UnauthorizedAccessException:拒绝访问路径“{PATH}”。

以下是我的尝试:

  • 将路径从默认目录移至网站根目录
  • 更改网站应用程序池以作为我的用户帐户运行
  • 给予Everyone完全控制文件夹和文件
  • 验证当我将相同的密钥和密码放入web.config时,调用工作
  • 尝试从配置中删除该区域
  • 尝试从配置中删除路径

这是我的配置(请注意,如果我不提供路径,即使在默认位置,也表示没有找到凭证文件)

<add key="AWSProfileName" value="default" />
<add key="AWSRegion" value="us-east-1"/>
<add key="AWSProfilesLocation" value="{PATH}" />

在AWS工具包中,我有一个“默认”配置文件设置,它具有权限,但对此无效。

我甚至尝试过AWS docs中提到的legancy格式。我错过了什么?我似乎已经按照AWS在他们的文档中调用的所有内容。

我正在使用Castle Windsor DI,这样可能会妨碍吗?

container.Register(
            Component.For<IAmazonDynamoDB>()
                .ImplementedBy<AmazonDynamoDBClient>()
                .DependsOn(Dependency.OnValue<RegionEndpoint>(RegionEndpoint.USEast1))
                .LifestylePerWebRequest());

        container.Register(
            Component.For<IDynamoDBContext>()
                .ImplementedBy<DynamoDBContext>()
                .DependsOn(Dependency.OnComponent<IAmazonDynamoDB, AmazonDynamoDBClient>())
                .DependsOn(Dependency.OnValue<DynamoDBContextConfig>(
                    new DynamoDBContextConfig
                    {
                        TableNamePrefix = configurationManager.GetRequiredAppSetting<string>(Constants.Web.AppSettings.AwsDynamoDbPrefix),
                        Conversion = DynamoDBEntryConversion.V2
                    }))
                .LifestylePerWebRequest());

1 个答案:

答案 0 :(得分:3)

您遇到的问题是路径~\.aws\credentials仅在以用户身份登录时定义。

IIS等Windows服务未以创建凭据文件的用户身份登录。因此,Windows服务无法访问该路径。实际上该服务不知道要查看哪个用户。例如,如果您的用户名是john,则路径为c:\users\john\.aws\credentials。 Windows服务不知道您的身份。

注意:我相信 - 但我不是百分百肯定 - 是Windows服务会在c:\.aws中查找凭据。我过去曾使用过这条路径,但我找不到亚马逊的参考文档来支持这一点。我不再在我的EC2实例上存储凭据,因此我对位置c:\.aws失去联系。

你有很多选择。像往常一样创建凭据。然后在IIS安装和设置之外创建一个目录,例如c:\.aws。将~\.aws复制到c:\.aws。然后在程序中指定完整路径。

如果您在AWS上运行服务,更好,更安全的方法是使用IAM角色。创建具有所需权限的角色,并将角色附加到EC2实例。所有AWS软件开发工具包和工具都知道如何从AWS元数据中查找凭据。

还有更多方法,例如EC2 Parameter Store。在您的实例或程序内部存储凭据不是一个好主意。

[在仔细考虑错误信息后编辑]

您可能遇到IIS对存储凭据的位置没有访问权限的问题。

打开Windows资源管理器并找到凭据文件的文件夹。右键单击此文件夹,选择“属性”并单击“安全”选项卡。从这里,选择编辑然后添加。必须添加以下用户并至少给予READ权限:IUSR&amp; IIS_IUSRS。您可能需要添加“LIST FOLDER CONTENTS”。