現象
アプリケーションからJavaのSDK経由で利用するサービスのポリシーを設定したロールを、ECSのタスク定義に設定してもアクセス拒否されてしまいます。
設定内容は以下のようになっている。(S3のフルアクセスを許可した場合)
エラーメッセージ
Caused by: com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: FF8E926F25943A13)
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1219) ~[aws-java-sdk-core-1.10.32.jar:?]
at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:803) ~[aws-java-sdk-core-1.10.32.jar:?]
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:505) ~[aws-java-sdk-core-1.10.32.jar:?]
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:317) ~[aws-java-sdk-core-1.10.32.jar:?]
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3595) ~[aws-java-sdk-s3-1.10.32.jar:?]
at com.amazonaws.services.s3.AmazonS3Client.getObject(AmazonS3Client.java:1116) ~[aws-java-sdk-s3-1.10.32.jar:?]
解決方法
ECSタスクロールが追加されたのが比較的最近らしく、SDKもアップデートしないと利用できないみたいです。
ちなみに今回エラーが発生したときのバージョンが「1.10.X」でした。
今回のJava用のSDKだと、「1.11.16」以上にすれば解決します。
ただ、バージョンを新しくすることによる弊害も出ると思うので、慎重に行うようにしてください。