- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 Java 程序使用 AWS SDK 与 S3 存储桶交互时遇到问题。
这是我用来创建 S3 客户端的代码:
public S3StorageManager(S3Config config) throws StorageException {
BasicAWSCredentials credentials = new BasicAWSCredentials(myAccessKey(), mySecretKey());
AWSStaticCredentialsProvider provider = new AWSStaticCredentialsProvider(credentials);
this.s3Client = AmazonS3ClientBuilder
.standard()
.withCredentials(provider)
.withRegion(myRegion)
.build();
当我尝试下载文件时,在开始下载之前我检查文件是否存在:
s3Client.doesObjectExists(bucketName, objectName);
这是我得到 403:FORBIDDEN 的地方。奇怪的是,只有当我在同一 session 中执行上传之前尝试执行对象存在性检查时,才会出现此问题。换句话说,在初始化 s3Client 之后: - 如果我首先尝试检查一个对象是否存在,它会引发 FORBIDDEN 问题; - 如果我首先执行文件上传,它工作正常,之后任何对象存在检查也工作正常;
这是我的堆栈跟踪:
com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden (Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden; Reques
t ID: A23BB805491E411F)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1588) ~[aws-java-sdk-core-1.
11.128.jar:?]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1258) ~[aws-java-sdk-core-1.11
.128.jar:?]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1030) ~[aws-java-sdk-core-1.11.128
.jar:?]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:742) ~[aws-java-sdk-core-1.11.128.jar:
?]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:716) ~[aws-java-sdk-core-1.11.1
28.jar:?]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699) ~[aws-java-sdk-core-1.11.128.jar:?]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667) ~[aws-java-sdk-core-1.11.128.jar
:?]
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649) ~[aws-java-sdk-core-1.1
1.128.jar:?]
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513) ~[aws-java-sdk-core-1.11.128.jar:?]
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4169) ~[aws-java-sdk-s3-1.11.128.jar:?]
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4116) ~[aws-java-sdk-s3-1.11.128.jar:?]
at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:1237) ~[aws-java-sdk-s3-1.11.128.jar:?]
at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:1213) ~[aws-java-sdk-s3-1.11.128.jar:?]
at com.amazonaws.services.s3.AmazonS3Client.doesObjectExist(AmazonS3Client.java:1272) ~[aws-java-sdk-s3-1.11.128.jar:?]
另一件奇怪的事情是,当我将我的 Java 程序移动到 EC2 远程机器时,所有这些问题都开始了。如果我在我的本地机器上执行它,S3 交互工作正常。但是我不认为问题取决于 IAM 角色,因为我使用 AWSStaticCredentialsProvider。
最佳答案
您的凭据可能是正确的,但如果您没有设置正确的 IAM 策略,您仍然会被禁止访问。要检查 s3 中的对象,您需要以下内容:
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:ListBucket"
],
"Resource":["arn:aws:s3:::examplebucket"]
},
{
"Effect":"Allow",
"Action":[
"s3:GetObject"
],
"Resource":["arn:aws:s3:::examplebucket/*"]
}
]
}
关于java - AWS S3 Java : doesObjectExist results in 403: FORBIDDEN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44256527/
我需要检查 S3 中是否存在一组键,用于大量项目中的每一个。 (每组键与大量项目中的一个相关)。 我正在使用 PHP SDK (v2) 目前我正在为每个键调用 $client->doesObjectE
我已经重写了这个问题以使其更清楚,因为我已经更新了它。 我在使用 Amazon AWS S3 PHP SDK 时遇到问题。我只是想检查文件是否存在。使用此 PHP 脚本: AWS_ACCESS_KE
我的 Java 程序使用 AWS SDK 与 S3 存储桶交互时遇到问题。 这是我用来创建 S3 客户端的代码: public S3StorageManager(S3Config config) th
我是一名优秀的程序员,十分优秀!