amazonawsS3に画像ファイル(ストリーム処理されたもの)をアップロードする際にエラーが発生します
なお、既に手動でアップロードしたコンテンツのダウンロード(client.getObject())は問題なく作動しています
s3は使い始めたばかりで仕様を把握しきれていません
もし当たり前に設定されていると思われる物でも思い当たることがあればご指摘ください
java
1import java.io.InputStream; 2 3import com.amazonaws.SdkClientException; 4import com.amazonaws.auth.AWSStaticCredentialsProvider; 5import com.amazonaws.auth.BasicAWSCredentials; 6import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration; 7import com.amazonaws.services.s3.AmazonS3; 8import com.amazonaws.services.s3.AmazonS3ClientBuilder; 9import com.amazonaws.services.s3.model.ObjectMetadata; 10import com.amazonaws.services.s3.model.S3Object; 11 12public class S3Access { 13 public void upload(InputStream stream, String title, String fileName) { 14 String region = "ap-northeast-1"; //リージョン,東京 15 String bucketName = "バケット名"; 16 String endpointUrl = "https://s3-ap-northeast-1.amazonaws.com"; 17 String accessKey = "アクセスキー"; 18 String secretKey = "シークレットキー"; 19 String objectKey = title; 20 try { 21 //エンドポイント設定 22 EndpointConfiguration endpoint = new EndpointConfiguration(endpointUrl, region); 23 24 AmazonS3 client = AmazonS3ClientBuilder 25 .standard() 26 .withCredentials (new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey))) 27 .withEndpointConfiguration(endpoint) 28 .build(); 29 ObjectMetadata metadata = new ObjectMetadata(); 30 metadata.setContentType("image/jpeg"); 31 metadata.addUserMetadata("キー", "値"); 32 client.putObject(bucketName, objectKey, stream, metadata); 33 } catch(SdkClientException e) { 34 e.printStackTrace(); 35 } 36 } 37} 38
client.putObject()の行で以下のエラー
警告はオブジェクトサイズを設定していない為であると思われますが今は例外の対処を優先します
警告: No content length specified for stream data. Stream contents will be buffered in memory and could result in out of memory errors. [火 7 09 05:43:30 GMT+09:00 2019] com.amazonaws.services.s3.model.AmazonS3Exception: There were headers present in the request which were not signed (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: D7F346A9556C9B07; S3 Extended Request ID: ZIMjW1sGjlYmzFh0Lw0i1fB6+BH/xcS87GM5NB086baBl/Dxx/DZtugmud5GSjvNfjG9khpVhEY=), S3 Extended Request ID: ZIMjW1sGjlYmzFh0Lw0i1fB6+BH/xcS87GM5NB086baBl/Dxx/DZtugmud5GSjvNfjG9khpVhEY= at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1712) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1367) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1113) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:770) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:744) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:726) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:686) at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:668) at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:532) at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:512) at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4921) at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4867) at com.amazonaws.services.s3.AmazonS3Client.access$300(AmazonS3Client.java:389) at com.amazonaws.services.s3.AmazonS3Client$PutObjectStrategy.invokeServiceCall(AmazonS3Client.java:5801) at com.amazonaws.services.s3.AmazonS3Client.uploadObject(AmazonS3Client.java:1789) at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1749) at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1687) at amazonS3.S3Access.upload(S3Access.java:36) at servlet.Upload.doPost(Upload.java:61) at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:651) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:407) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1376) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)
追記
権限周りの問題ではないかとの指摘を頂いたのでと確認したことと結果を追記します
1.IAMユーザーの権限確認
現在使用しているIAMユーザーは"AdministratorAccess"権限を有するグループに属しています
IAMポリシーシミュレータにて確認したところ、アクション"PutObject"で許可の判定が出ました
2.バケットポリシーの確認
バケット>アクセス権限>ブロックパブリックアクセスは4つの項目全てオン、
アクセスコントロールリストは[オブジェクトの一覧, オブジェクトの書き込み, バケットのアクセス権限の読み取り, バケットのアクセス権限書き込み]すべてに「はい」と表示、
バケットポリシーは未入力の空欄、となっています
回答2件
あなたの回答
tips
プレビュー