尝试将对象放入S3存储桶时访问被拒绝

时间:2018-09-24 15:54:25

标签: amazon-s3 aws-java-sdk

我正在尝试重构一些代码以允许上传大图像。 最初,图像以lambda函数存储在S3中,并且在PROD中效果很好。现在,我已经从函数中提取了该部分,并尝试通过适用于AWS的Java SDK来实现。

这在DEV环境中效果很好,因为存储桶在此处是公共的。当我使用PROD设置对此进行测试时。我收到拒绝访问错误。

存储桶在PROD中是私有的,用户可以访问所有S3操作。 我可以使用AWS CLI访问存储桶,但是当我使用AWS Java SDK尝试存储桶时,出现“访问被拒绝”错误。这是Java中的代码。尽管我知道该区域是默认区域,但我已经明确设置了该区域以确保它得到正确的区域。

    BasicAWSCredentials awsCreds = new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY);

    AmazonS3 s3client = AmazonS3ClientBuilder.standard()
        .withRegion(Regions.US_EAST_1)
        .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
        .build();


    String imageS3Url = null;
    ObjectMetadata d = new ObjectMetadata();
    try {
      s3client.putObject(new PutObjectRequest(S3_BUCKET_NAME, s3Key, stream, d));
      imageS3Url = "https://s3-"+ S3_REGION_NAME +".amazonaws.com/" + S3_BUCKET_NAME +"/"+ s3Key;

    }catch(Exception ex) {
      log.debug(ex.getMessage());
    }

我是否缺少任何配置来授予对AWS Java SDK的访问权限以访问S3存储桶? AWS Java SDK版本为1.11.411。

以下是存储桶和IAM用户策略的匿名版本:

{
    "Version": "2012-10-17",
    "Id": "PolicyABC”,
    "Statement": [
        {
           "Sid": "Stmt123”,
           "Effect": "Allow",
           "Principal": {
               "AWS": "arn:aws:iam::123456789:user/user-name”
           },
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::bucket-name”
       }
    ]
}

IAM用户策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucket-name”,
                "arn:aws:s3:::bucket-name/*”
            ]
        }
    ]
}

0 个答案:

没有答案