【发布时间】:2020-03-21 07:42:51
【问题描述】:
我正在尝试使用访问密钥和密钥凭据连接到 S3 存储桶。
这在我的本地机器上正常工作。但是,当我尝试在 EC2 实例上运行它时,执行似乎停止在 result = s3Client.listObjectsV2(request); 行。没有例外。根本没有回应。非常感谢任何帮助。
Java 代码
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accesskey, secretkey)))
.withRegion(region).build();
ListObjectsV2Result result = null;
List<S3ObjectSummary> objects = null;
String continuationToken = null;
System.out.println("Starting loop to request information");
int count = 1;
do {
ListObjectsV2Request request = new ListObjectsV2Request();
request.setBucketName(bucket);
request.setContinuationToken(continuationToken);
System.out.println("Placing request information #" + count);
result = s3Client.listObjectsV2(request);
System.out.println("Got response for request #" + count++);
continuationToken = result.getNextContinuationToken();
objects = result.getObjectSummaries();
for (S3ObjectSummary os : objects) {
System.out.println(os.getKey());
}
} while (continuationToken != null);
pom.xml
<!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.466</version>
</dependency>
S3 存储桶政策
{
"Version": "2012-10-17",
"Id": "Policy1563965234895",
"Statement": [
{
"Sid": "Stmt1563965231235",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::xxxxxxxxxxxx:user/xyz_dev",
]
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::xxxx-yyy-bucket",
"arn:aws:s3:::xxxx-yyy-bucket/*"
]
}
]
}
【问题讨论】:
-
确保实例可以访问互联网,并且您的凭据配置相同
-
如果执行停止,这听起来像是一个被捕获并忽略的异常。
-
为什么不将 IAM 角色附加到 EC2 实例:docs.aws.amazon.com/AWSEC2/latest/UserGuide/… 并在存储桶策略中允许该角色?
-
@AndrewA。我没有专门尝试过,但我确实尝试将 EC2 IAM 角色分配给 Bucket 策略。让我再试一次。
-
您是否在私有子网中运行?
标签: java amazon-web-services amazon-s3 amazon-ec2 aws-java-sdk