当我尝试使用 AWS SDK 访问 Amazon S3 时,为什么会出现拒绝访问错误提示?

2 分钟阅读
0

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

解决方法

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

验证您的 AWS CLI 和 AWS SDK 凭证

首先,确认您正在使用的 AWS CLI 和 AWS SDK 是否配置了相同的凭证。为此请执行以下步骤:

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

aws iam list-access-keys

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

aws sts get-caller-identity

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

如果 AWS CLI 和 AWS SDK 使用不同的凭证,请尝试使用 AWS SDK 以及 AWS CLI 上存储的凭证。

排查对 Amazon S3 的 AWS CLI 和 SDK 请求

如果 CLI 和 AWS SDK 使用的凭证相同,则通过询问以下问题继续进行故障排查:

  • 对 S3 的 CLI 和 SDK 请求是否来自同一来源? 即检查请求是否来自同一个 Amazon Elastic Compute Cloud (Amazon EC2) 实例。
  • 如果请求来自同一来源,SDK 是否使用期望的凭证? 例如,如果您使用的是适用于 Python(Boto3)的 AWS SDK,则该 SDK 允许您使用多种方法配置凭证。这意味着 Boto3 将按特定顺序在多个位置查找凭证。如果在早期指定了任何不正确的凭证,则使用的是这些凭证。如需详细了解 Boto3 查找凭证的顺序,请参阅 Boto3 SDK 网站上的凭证

检查您的 VPC 端点是否允许对 S3 的请求

如果请求从不同的源发送,请检查使用 SDK 的源是否通过 VPC 端点发送请求。然后,确认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/*"
      ]
    }
  ]
}

如果您在凭证或源中未发现任何问题,请查看 S3 可能会返回“拒绝访问”错误的一些原因。有关更多信息,请参阅如何对来自 Amazon S3 的 403 访问被拒绝错误执行故障排查?


相关信息

Amazon S3 中的身份和权限管理

相关视频

AWS 官方
AWS 官方已更新 2 年前