java - 无法连接到 scala 上的 Amazon S3。 Python 连接运行良好,但在 Scala 上我收到 403 Forbidden 响应

标签 java scala amazon-web-services amazon-s3 aws-sdk

我也有端口号,但我没有找到在哪里设置它。我该如何解决这个问题?通过 python 的“boto”客户端,我成功连接到我的服务,但在 Scala 上它总是返回禁止消息。

object a extends App{

      import com.amazonaws.auth.BasicAWSCredentials

      val accessKey = "myAccessKey"
      val secretKey = "mySecretKey"
      val credentials = new BasicAWSCredentials(accessKey, secretKey)

      import com.amazonaws.services.s3.AmazonS3Client

      val s3client = new AmazonS3Client(credentials)

      s3client.setEndpoint("address")

      val s3object = s3client.getObject("myBucket", "file.txt")

      println(s3object.getKey, s3object.getObjectMetadata.getLastModified)
    }

这是错误日志:

Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden (Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden; Request ID: null; S3 Extended Request ID: null), S3 Extended Request ID: null
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1639)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1304)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1056)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:743)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:717)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4319)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4266)
    at com.amazonaws.services.s3.AmazonS3Client.getObject(AmazonS3Client.java:1406)
    at com.amazonaws.services.s3.AmazonS3Client.getObject(AmazonS3Client.java:1267)
    at a$.delayedEndpoint$a$1(a.scala:17)
    at a$delayedInit$body.apply(a.scala:3)
    at scala.Function0.apply$mcV$sp(Function0.scala:34)
    at scala.Function0.apply$mcV$sp$(Function0.scala:34)
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
    at scala.App.$anonfun$main$1$adapted(App.scala:76)
    at scala.collection.immutable.List.foreach(List.scala:389)
    at scala.App.main(App.scala:76)
    at scala.App.main$(App.scala:74)
    at a$.main(a.scala:3)
    at a.main(a.scala)

最佳答案

AWS SDK 在某种程度上不鼓励使用端点 ( JavaDoc ):

Only use this if using a non-standard service endpoint - the recommended approach for configuring a client is to use {@link #withRegion(String)}

相反,请使用withRegion:

import com.amazonaws.auth.{AWSStaticCredentialsProvider, BasicAWSCredentials}
import com.amazonaws.regions.Regions
import com.amazonaws.services.s3.AmazonS3Client

AmazonS3Client.builder()
  .withCredentials(new AWSStaticCredentialsProvider(
    new BasicAWSCredentials("accessKey", "secretKey")))
  .withRegion(Regions.EU_WEST_1).build()

关于java - 无法连接到 scala 上的 Amazon S3。 Python 连接运行良好,但在 Scala 上我收到 403 Forbidden 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47551828/

相关文章:

java - EditText .setError() 未在重新创建时应用我的自定义错误图标

java - 当调用新的 JPanel 时,单击 JButton 时随机生成数字

amazon-web-services - 如何在 CodeDeploy 中设置和获取环境变量

postgresql - 斯卡拉光滑。错误的分页\w Postgres

scala - Spark SQL 嵌套 withColumn

python - 调用 PutObject 操作时的 PermanentRedirect

amazon-web-services - 地形上的 AWS : Error deleting resource: timeout while waiting for state to become 'destroyed'

java - 如何设置每次不同间隔的新作业

java - 如何从我的服务层内部创建一个 cookie 并添加到 http 响应?

scala - Scala 中的叉积