2014-11-23 4 views
3

"서명 된"URL을 클라이언트에 제공 할 수 있기를 원하므로 24 시간 (예 : 24 시간)에만 관련됩니다. 그러나, 나는 생성 된 모든 URL에 대한 S3를 호출하지 않으 :버킷 수준의 Amazon S3 보안 URL

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

는 대신, 나 자신으로 URL 생성 할 (I은 파일 이름과 버킷 링크가를, 내가 직접 구축 할 수 있습니다) .

그러나 버킷 수준의 URL (예 : 주어진 버킷의 모든 파일에 대해 하루에 한 번)에 서명하고 싶습니다. 이것이 가능한가?

답변

3

사전 서명 된 URL을 만들면 완전히 로컬로 처리됩니다. "혼자서"할 수도 있지만 SDK를 사용하는 것이 훨씬 쉽고 실용적인 차이는 없습니다. S3 API에 "서명"동작이 없음을 확인하십시오.

그러나 개체별로 서명이 확인되므로 "버킷 수준"에 서명 할 수 없습니다. 전체 양동이에 서명하는 것이 실현 가능하지 않을 것이라고 생각합니다.

+1

위에서 추출한 라인은 아마존에 대한 실제 호출로서 서명 된 토큰을 얻습니다. 내가 볼 수있는 한 멀리있는 지역이 아닙니다. –

+1

네트워크를 모니터링하거나 소스를 확인할 수 있습니다 (https://github.com/aws/aws-sdk-ruby/blob/b54a5561180c7eaae14e2a8ac440ce4a48c8de8f/lib/aws/s3/s3_object.rb).이 메서드 호출은 로컬에서 처리되며 원격 서비스를 호출하지 않습니다. –

+2

나의 신. 나는 "버킷. 불알"을 가지고 있었다. 내 코드에서 AWS 호출이 실행됩니다. - https://github.com/aws/aws-sdk-ruby/blob/b54a5561180c7eaae14e2a8ac440ce4a48c8de8f/lib/aws/s3/bucket.rb#L252 이 ... 고마워. –

0

나는이 단지 자바 루비 코드가없는 죄송합니다 ...

하지만 당신은 전체 양동이, 각 파일의 presigned URL을 얻을 수 없습니다.

내가 작성한 기능은 다음과 같습니다. 그러면 모든 것이 인쇄됩니다. 프로세스가 의미가 있습니까?

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())); 
}