You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS S3服务403访问拒绝问题排查求助

问题描述

我执行了以下操作:

步骤1:配置AWS SDK

  • 在pom.xml文件中添加AWS SDK依赖:
<dependencies>
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>s3</artifactId>
        <version>2.2.29</version> <!-- use the latest version -->
    </dependency>
</dependencies>
  • 若未使用Maven,请下载AWS SDK for Java并将其加入项目类路径。

步骤2:创建IAM用户

  • 登录AWS管理控制台。
  • 进入IAM控制台。
  • 创建一个带有编程访问权限的新IAM用户,并附加授予S3必要权限的策略(如AmazonS3FullAccess)。
  • 记录该用户的访问密钥ID和秘密访问密钥。

步骤3:配置凭证

通过以下方式之一配置凭证:

  • 环境变量:设置AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY环境变量。
  • AWS凭证文件:在~/.aws/credentials(Linux和Mac)或C:\Users\USERNAME\.aws\credentials(Windows)路径下创建AWS凭证文件,内容如下:
[default]
aws_access_key_id=YOUR_ACCESS_KEY_ID
aws_secret_access_key=YOUR_SECRET_ACCESS_KEY

步骤4:编写Java文件上传代码

  • 初始化S3客户端:
public class S3Config {

    @Bean
    public S3Client s3Client() {
        S3Client client = S3Client.builder()
                .region(Region.EU_WEST_1)
                .build();
        return client;
    }

}

public void putObject(String bucketName, String key, byte[] files) {
    PutObjectRequest objectRequest = PutObjectRequest.builder()
            .bucket(bucketName)
            .key(key)
            .build();    
    PutObjectResponse putObjectResponse = s3Client.putObject(objectRequest, RequestBody.fromBytes(files));
    putObjectResponse.toString();
} 

我使用以下代码进行测试:

@Bean
CommandLineRunner commandLineRunner(S3Service s3Service) {
    return args -> {
        s3Service.putObject("flexcoreobjectstore",
                "foo",
                "hello world".getBytes());

        byte[] foos = s3Service.getObject("flexcoreobjectstore", "foo");

        System.out.println(new String(foos));
    };
}

但出现如下错误:

Caused by: software.amazon.awssdk.services.s3.model.S3Exception: Access Denied (Service: S3, Status Code: 403, Request ID: PC0YG9X9Z9CXRFV9, Extended Request ID: WlrLIh6/j9Xd8vhRL9Xtt5dPO4n56WE4cLT8MLX2CFiG1COgbNapseovy47L4sTd4s4SBoA4lNevEYqH6GAhfQ==)

请问我遗漏了哪些操作步骤?


可能遗漏的操作步骤

1. 验证IAM用户权限与桶的关联

  • 确认附加给IAM用户的策略(如AmazonS3FullAccess)是否覆盖目标桶flexcoreobjectstore。若桶存在桶策略,即使IAM用户有全权限,桶策略的拒绝规则也会优先生效,需检查桶策略中是否存在限制该用户访问的条目。
  • 进入S3控制台,找到flexcoreobjectstore桶,查看权限选项卡的桶策略,确保没有拒绝该IAM用户访问的配置。

2. 确认凭证是否正确加载

  • 检查应用是否读取到正确的凭证:可在代码中添加日志输出当前使用的凭证标识(避免泄露真实密钥),或用AWS CLI命令aws configure list验证本地凭证配置的正确性。
  • 若使用环境变量,需确认环境变量在应用运行进程中生效(比如IDE需重启才能读取新配置的环境变量)。

3. 验证桶的区域匹配

  • 确认S3客户端配置的Region.EU_WEST_1与flexcoreobjectstore桶的实际区域一致。桶的区域不匹配会直接导致访问被拒绝,可在S3控制台的桶属性中查看其所在区域。

4. 检查桶的公有访问设置

  • 进入S3控制台的桶权限页面,查看阻止公有访问设置。若开启了严格的公有访问阻止规则,可能会影响IAM用户的正常访问(尤其是桶策略涉及公有访问配置时),需确保规则未误限制IAM用户的权限。

5. 等待IAM权限生效

  • IAM权限变更通常需要数分钟才能生效,若刚创建完IAM用户就测试,可等待5-10分钟后重试。

6. 确认凭证加载优先级

  • 若同时配置了环境变量和凭证文件,SDK会按固定优先级读取凭证,需确认应用使用的是你配置的那组凭证。可通过添加日志排查凭证来源,或调整配置方式确保正确加载目标凭证。

内容的提问来源于stack exchange,提问作者Sarangan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:30:12