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

上次更新日期:2020 年 10 月 22 日

当我使用 AWS Command Line Interface (AWS CLI) 时,我能够访问我的 Amazon Simple Storage (Amazon S3) 资源,但是在使用 AWS 软件开发工具包时收到拒绝访问错误。如何修复此问题?

简短描述

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

  1. 验证您正在使用的 AWS CLI 和 AWS SDK 是否配置了相同的凭证。
  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 软件开发工具包请求

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

如果请求来自不同的源,请检查使用 AWS 软件开发工具包的源是否通过防火墙、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/*"
            ]
        }
    ]
  }

这篇文章对您有帮助吗?


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