web-dev-qa-db-ja.com

指定されたAWSアクセスキーIDはレコードに存在しません

PHP AWSを使用して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 ));

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-次に、AWSのBasicAwsCredentials()メソッドを使用する前に従う必要があるすべての前提条件です。 2-IAMロールを作成する必要がありますか? 3-そうすると、PHP in Aws\S3\S3Client :: factory methodの場合)のように、ヒットするIPをどのようにして知ることができますか?ベースURLを指定していました。

6
Ishan Tiwary

次のコードは私のために働いた。

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();
4
Ishan Tiwary

AWSアクセスキーとシークレットアクセスキーは、使用するSDKに依存しません(PHP、JavaまたはRubyなど)を使用するかどうかは関係ありません)。 AWSで実行/使用するサービスへのアクセスの許可と取得。

エラーの根本的な原因は、アクセスキーとシークレットアクセスキーを指定したにもかかわらず、AWSリージョンを設定していないことです。 これをチェックしてください JavaのAWS認証情報を設定してください。

あなたの質問に答えるために。

  1. 私の知る限り、BasicAwsCredentials()自体は、Amazonサービスで何かを実行する前の必須ステップとして機能します。 BasicAwsCredentials()の前提条件は、認証キーを持つことだけです。

  2. いいえ、これは必須の手順ではありません。それは代替手段です。 this リンクからIAMロールの定義を確認してください。

  3. 「エンドポイント」を使用して、Javaで同じジョブを実行できます。 this リンクから「エンドポイント」の詳細を確認します。

here の例をご覧ください。同じ方法を使用して、「BasicAwsCredentials()」を正常に実行できます。また、「アクセスキー」と「シークレットアクセスキー」に、必要に応じてAmazonサービスにアクセスするために必要なアクセス許可があるかどうかをクロスチェックします。 IAMユーザー、グループを確認し、必要なAWS権限があることを確認します。

4
Venkatesh