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

上次更新时间:2019-04-03

当我使用 AWS 命令行界面 (AWS CLI) 时,能够访问 Amazon Simple Storage Service (Amazon S3) 资源。当我尝试使用 AWS 软件开发工具包访问 Amazon S3 时,为什么会出现拒绝访问错误?

简短描述

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

  1. 验证您正在使用的 AWS CLI 和 AWS SDK 是否配置了相同的凭证。
  2. 检查防火墙、HTTP 代理或 Amazon Virtual Private Cloud (Amazon VPC) 终端节点是否允许使用 AWS 软件开发工具包对 Amazon S3 发出请求。

解决方法

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

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

aws configure list

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

aws sts get-caller-identity

要获取您正在使用的 AWS 开发工具包上配置的凭证,请使用您的 AWS Security Token Service (STS) 客户端运行 GetCallerIdentity 调用。例如,如果您使用的是适用于 Python 的 AWS 软件开发工具包 (Boto3) ,请运行 get_caller_identity。有关向 Boto3 提供凭证的详细信息,请参阅方法参数

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

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

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

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

例如,以下 VPC 终端节点策略仅允许访问 my_secure_bucket。如果您正在使用此 VPC 终端节点,则会拒绝您访问任何其他存储桶。

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

这篇文章对您有帮助吗?

您觉得我们哪些地方需要改进?


需要更多帮助?