2017-02-08 6 views
1

Я написал библиотеку на PHP, используя AWS для связи с сервером ECS. Теперь я переношу свой код в java. В java я использую тот же ключ и секрет, который я использовал в PHP.Идентификатор ключа доступа AWS, который вы предоставили, не существует в наших записях

В PHP я использовал следующий метод:

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

В Java Я использую следующий метод

BasicAWSCredentials(String accessKey, String secretKey); 

Я получаю следующее исключение:

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) 

Нужно ли мне можно использовать новый ключ и секрет для Java или предыдущего.

Мои вопросы: 1 - Есть ли какие-либо предпосылки, которые нам необходимо выполнить перед использованием метода BasicAwsCredentials() AWS. 2 - Нужно ли создавать роли IAM. 3 - Если мы это сделаем, тогда как он узнает, какой IP-адрес попал, как в случае PHP в Aws \ S3 \ S3Client :: factory, я указывал базовый url.

ответ

1

Следующий код работал для меня.

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(); 
1

Ключи доступа и секретные ключи AWS не зависят от используемых вами SDK (неважно, используете ли вы PHP, Java или Ruby и т. Д.), Это больше о предоставлении и получении доступа к услугам, которые вы запускаете/используете на AWS.

Коренной причиной ошибки является то, что я не установил область AWS, хотя вы предоставили ключ доступа и секретный ключ доступа. Пожалуйста, check this, чтобы установить учетные данные AWS для Java.

Чтобы ответить на ваши вопросы.

  1. Насколько я знаю BasicAwsCredentials() сам по себе действует как шаг предварительных условий, прежде чем вы хотите сделать что-нибудь с услугами Amazon. Только для BasicAwsCredentials() необходимо иметь ключи аутентификации.

  2. Нет, это необязательный шаг. Это альтернатива. Пожалуйста, проверьте определение роли IAM от ссылки this.

  3. Вы можете использовать «конечную точку» для выполнения той же работы на Java. Проверьте информацию о конечной точке от .

Пожалуйста, взгляните на примеры от here. Используя тот же метод, я могу успешно выполнить «BasicAwsCredentials()». Кроме того, перекрестно проверьте, имеют ли «ключ доступа» и «секретный ключ доступа» необходимые разрешения для доступа к услугам Amazon в соответствии с вашими потребностями. Проверьте пользователя IAM, группу и убедитесь, что у них есть необходимые разрешения AWS.

+0

Это я пробовал. Проблема существует. Мой вопрос: 1 - Есть ли какие-либо предпосылки, которые нам нужно выполнить, прежде чем использовать метод BasicAwsCredentials() AWS. 2 - Нужно ли создавать роли IAM. 3 - Если мы это сделаем, тогда как он узнает, какой IP-адрес попал, как в случае PHP в Aws \ S3 \ S3Client :: factory, я указывал базовый url. –

+0

Я отредактировал тот же ответ, чтобы ответить на ваши вопросы, а также взглянуть на примеры из приведенной мной ссылки. Надеюсь, это поможет. – Venkatesh