【问题标题】:Access Denied on Windows for AWS Credentials fileAWS 凭证文件在 Windows 上的访问被拒绝
【发布时间】:2018-01-27 20:59:48
【问题描述】:

无论我尝试什么,我的网络服务似乎都无法访问我的 .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 docs 中提到的遗留格式。我错过了什么?看来我已经遵循了 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());

【问题讨论】:

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


    【解决方案1】:

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

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

    注意:我相信——但我不是 100% 确定——Windows 服务会在 c:\.aws 中查找凭据。我过去曾使用过此路径,但找不到支持此路径的 Amazon 参考文档。我不再在我的 EC2 实例上存储凭据,因此我无法联系到位置 c:\.aws

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

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

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

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

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

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

    【讨论】:

    • 同意服务器的 IAM 角色。在服务器上,它将使用 IAM 角色。然而,这是当地的发展。正如我上面提到的,我还尝试将文件所在的位置移动到“将路径从默认目录移动到网站根目录”。由于这是本地开发人员并且我以我的身份登录,因此定义了路径并且 IIS 应用程序池正在以我的身份运行,它也应该可以访问该路径。
    • 对于在本地开发机器上运行的 Windows 服务器,除了您不能使用 IAM 角色之外,一切都适用。您仍然必须将凭据存储在 IIS 服务可以访问的位置。
    • 同意。我的问题是,为什么即使凭据文件与所有其他站点文件并在一起并且 IIS 以我的身份运行和/或当我授予每个人对它的权限时它也无法访问它?
    • 此行中 PATH 的值是多少:
    • 你找到解决这个问题的方法了吗?
    猜你喜欢
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2021-10-01
    • 2012-07-23
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2011-04-29
    相关资源
    最近更新 更多