我在使用 AWS CLI 时能够访问 Amazon S3,但在使用 AWS 软件开发工具包时出现拒绝访问错误。为什么?

上次更新日期:2021 年 1 月 27 日

当我使用 AWS 命令行界面 (AWS CLI) 时,能够访问 Amazon Simple Storage Service (Amazon S3) 资源。但是,当我使用 AWS 开发工具包时,遇到拒绝访问错误。如何解决此问题?

简短描述

如果您可以使用 AWS CLI 但不能使用 AWS 软件开发工具包访问 Amazon S3,请执行以下故障排除步骤:

1.    确认您正在使用的 AWS CLI 和 AWS 开发工具包是否配置了相同的凭证。

2.    检查防火墙、HTTP 代理或 Amazon Virtual Private Cloud (Amazon VPC) 终端节点是否允许对 Amazon S3 发出 AWS 开发工具包请求。

解决方法

验证您正在使用的 AWS CLI 和 AWS 软件开发工具包是否配置了相同的凭证。

要获取在 AWS CLI 上配置的凭证,请运行以下命令:

aws iam list-access-keys

注意:如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

如果您正在使用与 AWS CLI 关联的 AWS Identity and Access Management (IAM) 角色,请运行此命令以获取该角色:

aws sts get-caller-identity

要获取您正在使用的 AWS 软件开发工具包上配置的凭证,请使用您的 AWS Security Token Service (AWS STS) 客户端运行 GetCallerIdentity 调用。例如,如果您使用的是适用于 Python 的 AWS 软件开发工具包 (Boto3) ,请运行 get_caller_identity

如果 AWS CLI 和 AWS 开发工具包使用不同的凭证,请尝试使用 AWS 开发工具包以及 AWS CLI 上存储的凭证。

检查防火墙、HTTP 代理或 Amazon VPC 终端节点是否允许对 Amazon S3 发出 AWS CLI 或开发工具包请求

如果配置的凭证相同,请检查对 S3 发出的 CLI 或开发工具包请求是否也来自同一来源。例如,检查请求是否来自同一个 Amazon Elastic Compute Cloud (Amazon EC2) 实例。

如果请求来自具有相同凭证的同一来源,请确保开发工具包使用的是预期凭证。例如,如果您使用的是适用于 Python 的 AWS 开发工具包 (Boto3),则该开发工具包允许您使用多种方法配置凭证。因此,Boto3 将按特定顺序在多个位置查找凭证。

注意:由于 Boto3 会按特定顺序搜索凭证,因此如果之前指定了任何不正确的凭证,则将使用错误的凭证。因此,请确保在 Boto3 首先检查的位置指定正确的凭证。如需详细了解 Boto3 查找凭证的顺序,请参阅 Boto3 开发工具包网站上的凭证

如果您确认使用了正确的凭证和权限,但仍然收到拒绝访问错误,请对错误进行故障排除。有关如何对错误的不同根本原因进行故障排除的更多信息,请参阅如何解决 Amazon S3 的“403 访问被拒绝”错误?

如果请求从不同的源发送,请检查使用开发工具包的源是否通过防火墙、HTTP 代理或 VPC 终端节点发送请求。然后,确认防火墙、HTTP 代理VPC 终端节点是否允许您尝试发送到Amazon S3 的请求。

例如,以下 VPC 终端节点策略允许为 DOC-EXAMPLE-BUCKET 授予下载和上传权限。如果您正在使用此 VPC 终端节点,则会拒绝您访问任何其他存储桶。

{
    "Statement": [
        {
            "Sid": "Access-to-specific-bucket-only",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
            ]
        }
    ]
  }

这篇文章对您有帮助吗?


您是否需要账单或技术支持?