当前位置: 首页 > 知识库问答 >
问题:

Python无法通过EC2实例访问S3 bucket

浦德明
2023-03-14

我有一个正在运行的Amazon EC2实例,它具有开放的IAM策略,可以调用通过调用公共S3 bucket来证明的任何资源。但是,如果我自己创建一个S3 bucket(带有一些。csv文件的mybucket)并提供bucket策略

{
    "Id": "Policy112324099371",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt3309232",
            "Action": "s3:*",
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::mybucket/*",
            "Principal": {
                "AWS": "*"
            }
        }
    ]
}

要被EC2用户调用,我会得到以下错误。

    com.amazonaws.services.s3.model.AmazonS3Exception: Status Code: 400, AWS Service: Amazon S3, AWS Request ID: <REQUEST ID>, AWS Error Code: null, AWS Error Message: Bad Request, S3 Extended Request ID: <EXTENDED REQUEST ID>
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:798)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:421)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:232)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3528)
    at com.amazonaws.services.s3.AmazonS3Client.headBucket(AmazonS3Client.java:1031)
    at com.amazonaws.services.s3.AmazonS3Client.doesBucketExist(AmazonS3Client.java:994)
    at org.apache.hadoop.fs.s3a.S3AFileSystem.initialize(S3AFileSystem.java:297)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2669)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:94)
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2685)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373)
    at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295)
    at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$14.apply(DataSource.scala:350)
    at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$14.apply(DataSource.scala:348)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241)
    at scala.collection.immutable.List.flatMap(List.scala:344)
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:348)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178)
    at org.apache.spark.sql.DataFrameReader.csv(DataFrameReader.scala:533)
    at sun.reflect.GeneratedMethodAccessor91.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
    at py4j.Gateway.invoke(Gateway.java:280)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:214)
    at java.lang.Thread.run(Thread.java:748)
sqlc = SQLContext(sc)
df=sqlc.read.csv('s3a://mybucket/*', header='true', inferSchema='true')

为什么我会得到这个400错误代码?

共有1个答案

傅明知
2023-03-14

我解决了问题!问题似乎与S3桶的位置有关。在我把地点从EU(伦敦)改到EU(爱尔兰)后,它开始工作了。

 类似资料:
  • 我使用terraform创建了一个新的EC2实例来安装vertica,但无法在实例中访问Internet或pinggoogle.com。 我已使用私有子网设置了 ec2 实例,并使用公有子网设置了 nat 网关。 主路由表允许 0.0.0.0/0 作为目标,目标作为 nat 网关。另一个路由表将子网关联作为私有子网 10.103.2.0/24。互联网网关也连接到 VPC。 我的ec2实例安全组允许

  • 无法通过公共IP访问EC2 Ubuntu 18.04服务器 重启工作EC2实例 正常重启,没有错误 安全组,检查80,443的入站OK 我还能查什么?

  • 如题所示,我正在努力通过EC2实例连接到我的elasticache实例。我有一个orm连接到EC2实例中的redis,但它在我的日志中失败了,所以我登录到EC2实例,尝试手动连接到redis实例,但超时了: < code >无法连接到位于的Redis 它们位于不同的VPC中(弹性缓存实例和EC2实例),但在我的弹性缓存实例的安全组中,我在端口6379处有来自任何来源的自定义TCP入站规则。 哈尔普

  • 在尝试应用terraform计划时,我得到一个不加起来的ssh错误: SSH:握手失败:SSH:密钥交换没有通用算法;提供的客户端:[curve25519-sha256@libssh.org ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 diffie-hellman-group14-sha1 diffie-hellman-grou

  • 我无法通过 SSH 连接到我的 EC2 实例 - 我收到超时错误。我检查了安全组,以确保 SSH 流量正常工作。我检查了路由表,并确保它们已连接到互联网网关。一小时前,我能够通过SSH连接到实例中,但现在已经没有了。我正在通过腻子连接。在使用ec2-user@domain之前,我遇到了相同的超时连接问题,我只需在Putty的主机名字段中输入IP地址即可解决。在这一点上,我能够毫无问题地连接。然后,

  • 我正在运行一个AWS ECS服务,它正在运行一个具有多个容器的任务。任务在awsvpc网络模式下运行。(EC2,不是Fargate) 集装箱港口映射在ECS任务定义中。 PS:目标(公共IP)可以从远程PC访问。只是不是从港口来的。