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
相关产品推荐
相关产品推荐

