web-dev-qa-db-ja.com

com.amazonaws.services.s3.model.AmazonS3Exception:Forbidden(サービス:Amazon S3;ステータスコード:403;エラーコード:403 Forbidden;リクエストID:XXXXXXXX)

数日前から、ファイルをS3Bucketにプッシュしようとすると、この例外が発生します。より簡単にすべてが機能しているようで、私の側からのコード変更はないと確信しています。

com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden
(Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden;
Request ID: XXXXXXXXXXXX),
S3 Extended Request ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.Java:1077)
at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.Java:725)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.Java:460)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.Java:295)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.Java:3699)
at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.Java:999)
at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.Java:977)

......。

Com.amazonaws.services.s3.model.AmazonS3Exceptionに関連するそのようなQに出くわしました:それらに従うことは禁じられています

  1. 時間に関連する問題を解決するために、サーバーにNTPをインストールしました。
  2. また、「AmazonS3Client」オブジェクトのendPointUrlを、問題を解決できると思われるコードに追加しました。

この問題を解決するために私が試みることができる他の何か

ファイルをS3Bucketにプッシュするためにaws-Java-sdk:1.9.10を使用しています。

6

ほとんどの場合、インスタンスはS3にアクセスできるIAMインスタンスプロファイルロールで起動されていません。

AWSサービスへのすべてのアクセスは、アクセスキーとシークレットで署名する必要があります。ローカルマシンからこれを行う場合、DefaultCredentialsProviderChain.aws/credentialsファイルで定義されたアクセスキーとシークレットを使用します。

AWSでEC2インスタンスを起動するときは、s3などのサービスへのリクエストにも署名する必要があります。ただし、これは、内部メタデータサービスから資格情報を取得することによって行われます。

したがって、インスタンスが起動時に想定するIAMインスタンスプロファイルを作成します。このIAMインスタンスプロファイルは、たとえばユーザーの他のIAMプロファイルと同様に、インスタンスがアクセスできる対象を定義します。

http://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-Amazon-ec2.html

1
gregwhitaker

私の場合、バケット名はAndroid side(バケット名はS3で 'a'で、Android side)で 'ab'と入力しました)バケット名とその逆、問題を解決しました。

0
kdblue