3

无论我尝试什么,似乎我的 Web 服务都无法访问我的 .aws/credentials 文件。

我总是收到这个错误:

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 文档中提到的遗留格式。我错过了什么?看来我已经遵循了 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());
4

1 回答 1

4

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

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

注意:我相信——但我不是 100% 肯定——Windows 服务会寻找c:\.aws凭据。我过去曾使用过此路径,但找不到支持此路径的 Amazon 参考文档。我不再将凭据存储在我的 EC2 实例上,因此我与 location 脱节c:\.aws

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

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

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

[在考虑更多错误消息后进行编辑]

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

打开 Windows 资源管理器并找到您的凭据文件的文件夹。右键单击此文件夹,选择属性,然后单击安全选项卡。从这里,选择编辑然后添加。必须添加以下用户并至少授予其读取权限:IUSR 和 IIS_IUSRS。您可能需要添加“列表文件夹内容”。

于 2018-01-27T22:03:58.800 回答