为什么我能够从本地主机上传到AWS S3,而不能从我的AWS Elastic BeanStalk实例上传到AWS S3?

时间:2017-10-27 08:42:03

标签: amazon-web-services amazon-s3 elastic-beanstalk amazon-elastic-beanstalk

我正在使用AWS Credentials *连接到我的AWS S3。

final AmazonS3 s3 = new AmazonS3Client(
                  new AWSStaticCredentialsProvider(new BasicAWSCredentials("accessKey*",
                      "secretKey")));
              s3.setRegion(Region.US_West.toAWSRegion());
              s3.setEndpoint("s3-us-west-1.amazonaws.com");

从我的本地主机,我可以上传图像,因为我启用了版本控制,所以我将版本ID恢复为以下行。

versionId = s3.putObject(new PutObjectRequest("bucketName", name, convFile)).getVersionId();

PS 3:上面一段代码被包装在try-catch块中,catch块打印出来

 You failed to upload fileName => fileName.jpeg (Permission denied)

但是如果我从我的ElasticBeanStalk执行相同的代码,我得到versionId = null并且图像不会上传到S3。

我没有看到凭据异常。

    • 当我搜索用户中的accessKey时(在IAM下),我意识到它没有分配给任何用户。

阅读完所有文档后,我创建了两个用户。 一个在我创建的组中,另一组没有组。

我使用了那些用户的accessKey,但我仍无法将图片上传到S3。

这就是我的存储桶政策的样子 创建两个用户后

{
    "Version": "2012-10-17",
    "Id": "Policy1",
    "Statement": [
        {
            "Sid": "Stmt1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::someNumnber:user/username"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::bucketName"
        }
    ]
}

在创建两个用户之前(当localhost成功将图像上传到S3时,以下设置就绪了)

{
    "Version": "2012-10-17",
    "Id": "Policy15",
    "Statement": [
        {
            "Sid": "Stmt1",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bcktName",
                "arn:aws:s3:::bcktName/*"
            ]
        }
    ]
}

我对4个晚上的这个问题感到震惊。 请帮我。 我不使用boto或任何其他东西。 它是一个直接的war文件上传到tomcat,它必须将图像上传到S3。它适用于localhost,但不适用于S3。

PS:这就是我的CORS配置外观

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <MaxAgeSeconds>20000</MaxAgeSeconds>
    <ExposeHeader>ETag</ExposeHeader>
    <ExposeHeader>x-amz-server-side-encryption</ExposeHeader>
    <ExposeHeader>x-amz-request-id</ExposeHeader>
    <ExposeHeader>x-amz-id-2</ExposeHeader>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

PS 2:

我应该在访问控制列表中执行任何操作吗?截至目前,我看到所有者帐户与我整个AWS的用户名相同。我认为从本地工作的访问密钥和密钥也与所有者帐户相关。

1 个答案:

答案 0 :(得分:0)

在Web配置文件中检查您的AWSAccessKey和AWSSecretKey。 Aws API使用这些凭据登录您的s3。

同样的问题在我看来也是如此,我这样解决了它。

希望这对任何人都有帮助。