存储桶级别的Amazon S3安全URL

时间:2014-11-23 16:00:16

标签: ruby amazon-web-services amazon-s3

我希望能够将客户端的URL提供给签名的#34;所以,仅与24小时有关(例如)。 但是,我不想为生成的每个网址调用S3:

AWS::S3::S3Object.new(bucket, name).url_for(:read, :secure => true, :expires => expires_in).to_s

相反,我想自己生成URL(我有文件名和存储桶链接,我可以自己构建)。

但是,我想在桶级别对URL进行签名(例如,对于给定存储桶中的所有文件,每天一次)。这有可能吗?

2 个答案:

答案 0 :(得分:3)

创建预签名网址时,完全在本地完成。你可以自己做#34;但是使用SDK要容易得多,并且没有实际的差异。看到没有"签署" S3 API上的行动。

但是,您无法在"存储桶级别"上签名,因为每个对象都会检查签名。我认为签署一个整桶是不可行的。

答案 1 :(得分:0)

抱歉,我没有这个只有Java的ruby代码...

但是你无法获得整个存储桶的预分配网址,只能获得每个文件。

这是我创建的功能。这将为您打印一切。这个过程有意义吗?

private static URI GetURL(AmazonS3Client amazonS3Client, S3ObjectSummary s3ObjectSummary) throws URISyntaxException {
    return amazonS3Client.generatePresignedUrl(
            new GeneratePresignedUrlRequest(s3ObjectSummary.getBucketName(), s3ObjectSummary.getKey())
            .withMethod(HttpMethod.GET)
            .withExpiration(GetExperation())).toURI();
}

public static void run(String accessKey, String secretKey, String bucketName) {

    AmazonS3Client amazonS3Client = new AmazonS3Client(new BasicAWSCredentials(accessKey, secretKey));
    amazonS3Client.listObjects(bucketName)
            .getObjectSummaries()
            .stream()
            .forEach(s3ObjectSummary
                    -> System.out.println(GetURL(amazonS3Client, s3ObjectSummary).toString()));
}