您提供的AWS Access Key ID在我们的记录中不存在

Ish*_*ary 6 php java amazon-s3 amazon-web-services

我已经使用AWS用PHP编写了一个库来与ECS服务器通信。现在,我将代码迁移到Java。在Java中,我使用与PHP中相同的密钥和秘密。

在php中,我使用以下方法:

$s3 = Aws\S3\S3Client::factory(array( 'base_url' => $this->base_url, 'command.params' => array('PathStyle' => true), 'key' => $this->key, 'secret' => $this->secret ));
Run Code Online (Sandbox Code Playgroud)

在java中,我正在使用以下方法

BasicAWSCredentials(String accessKey, String secretKey);
Run Code Online (Sandbox Code Playgroud)

我收到以下异常:

Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: The AWS Access Key Id you provided does not exist in our records. (Service: Amazon S3; Status Code: 403; Error Code: InvalidAccessKeyId; Request ID: 3A3000708C8D7883), S3 Extended Request ID: U2rG9KLBBQrAqa6M2rZj65uhaHhOpZpY2VK1rXzqoGrKVd4R/JdR8aeih/skG4fIrecokE4FY3w=
at      com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1401)
    at         com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:945)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:723)
    at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:475)
    at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:437)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:386)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3996)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3933)
    at com.amazonaws.services.s3.AmazonS3Client.listBuckets(AmazonS3Client.java:851)
    at com.amazonaws.services.s3.AmazonS3Client.listBuckets(AmazonS3Client.java:857)
    at com.justdial.DocUpload.DocUpload.main(DocUpload.java:22)
Run Code Online (Sandbox Code Playgroud)

我是否需要Java的新密钥和秘密,或者可以使用先前的密钥和秘密。

我的问题是:1-在使用AWS的BasicAwsCredentials()方法之前,我们需要遵循哪些先决条件?2-我们需要创建IAM角色吗?3-如果这样做,那么如何像在Aws \ S3 \ S3Client :: factory方法中的PHP那样知道要命中哪个IP,我正在指定基本URL。

Ish*_*ary 5

以下代码对我有用。

String accesskey = "objuser1";
String secret = "xxxxxxxxxxxxxxxx";
ClientConfiguration config = new ClientConfiguration();
config.setProtocol(Protocol.HTTP);
AmazonS3 s3 = new AmazonS3Client(new BasicAWSCredentials(accesskey, secret), config);
S3ClientOptions options =  new S3ClientOptions();
options.setPathStyleAccess(true);
s3.setS3ClientOptions(options);
s3.setEndpoint("1.2.3.4:9020");  //ECS IP Address
System.out.println("Listing buckets");
for (Bucket bucket : s3.listBuckets()) {
    System.out.println(" - " + bucket.getName());
}
System.out.println();
Run Code Online (Sandbox Code Playgroud)