미리 서명된 URL을 사용하여 객체 공유 - Amazon Simple Storage Service

미리 서명된 URL을 사용하여 객체 공유

기본적으로 모든 S3 객체는 비공개입니다. 객체 소유자만 액세스할 수 있습니다. 그러나 객체 소유자는 필요할 경우 자신의 보안 자격 증명을 사용하여 일정 기간 동안 객체 다운로드를 허가하는 미리 서명된 URL을 만들어 다른 사용자와 객체를 공유할 수 있습니다.

객체에 대해 미리 서명된 URL을 만들 때 보안 자격 증명을 제공하고 버킷 이름, 객체 키, HTTP 메서드(GET으로 객체 다운로드) 및 만료 날짜와 시간을 지정해야 합니다. 사전 서명된 URL은 지정된 기간 동안만 유효합니다. 임시 토큰을 사용하여 미리 서명된 URL을 생성하면 이 URL이 토큰 만료보다 이후의 만료 시간으로 생성된 경우에도 토큰이 만료되면 이 URL도 만료됩니다.

미리 서명된 URL을 받은 사용자는 누구나 객체에 액세스할 수 있습니다. 예를 들어, 버킷에 동영상이 있고 버킷과 객체 모두 비공개인 경우 미리 서명된 URL을 만들어 다른 사용자와 동영상을 공유할 수 있습니다. 미리 서명된 URL은 URL을 아는 모든 사람에게 Amazon S3 버킷에 대한 액세스 권한을 부여하므로 적절하게 보호하는 것이 좋습니다. 미리 서명된 URL 보호에 대한 자세한 내용은 미리 서명된 URL 기능 제한 섹션을 참조하세요.

미리 서명된 URL을 생성할 수 있는 사용자에 대한 자세한 내용은 미리 서명된 URL을 생성할 수 있는 사용자 섹션을 참조하세요.

미리 서명된 URL을 생성하여 객체 공유

S3 콘솔 또는 AWS Explorer for Visual Studio를 사용하여 코드를 작성할 필요 없이 미리 서명된 객체 URL을 만들 수 있습니다. Java용 AWS SDK, .NET, Ruby, PHP, Node.js, PythonGo를 사용하여 미리 서명된 URL을 프로그래밍 방식으로 생성할 수 있습니다.

다음 단계에 따라 AWS Management Console을 사용하여 객체의 미리 서명된 URL을 생성합니다.

참고

Amazon S3 콘솔에서 미리 서명된 URL의 최대 만료 시간은 생성 시점으로부터 12시간입니다.

AWS Management Console을 사용하여 미리 서명된 URL을 생성하려면

  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷(Buckets) 목록에서 미리 서명된 URL이 필요한 객체가 있는 버킷 이름을 선택합니다.

  3. 객체(Objects) 목록에서 미리 서명된 URL을 생성할 객체를 선택합니다.

  4. 작업 메뉴에서 미리 서명된 URL 생성을 선택합니다.

  5. 미리 서명된 URL의 유효 기간을 지정합니다.

  6. 미리 서명된 URL 생성을 선택합니다.

  7. 확인 메시지가 표시되면 URL이 클립보드로 자동으로 복사됩니다. 미리 서명된 URL을 다시 복사해야 하는 경우 미리 서명된 URL을 복사하는 버튼이 표시됩니다.

Visual Studio를 사용할 경우 코드를 작성할 필요 없이 AWS Explorer for Visual Studio로 미리 서명된 객체 URL을 만들 수 있습니다. 이 URL만 있으면 누구나 객체를 다운로드할 수 있습니다. 자세한 내용은 AWS Explorer에서 Amazon S3 사용을 참조하세요.

참고

AWS Explorer for Visual Studio를 사용하면 미리 서명된 URL의 최대 만료 시간은 생성 시점으로부터 7일입니다.

AWS Explorer를 설치하는 방법에 대한 자세한 내용은 AWS SDK 및 Explorer를 사용하여 Amazon S3로 개발 섹션을 참조하세요.

다음 예제에서는 객체를 검색할 수 있도록 다른 사용자에게 제공할 미리 서명된 URL을 생성합니다.

참고

AWS SDK를 사용하면 미리 서명된 URL의 최대 만료 시간은 생성 시점으로부터 7일입니다.

Java

다음 예제에서는 S3 버킷에서 객체를 검색할 수 있도록 다른 사용자에게 제공할 미리 서명된 URL을 생성합니다. 자세한 정보는 미리 서명된 URL을 사용하여 객체 공유을 참조하십시오.

실제 예제를 작성 및 테스트하는 방법에 대한 자세한 내용은 Amazon S3 Java 코드 예제 테스트 섹션을 참조하세요.

import com.amazonaws.AmazonServiceException; import com.amazonaws.HttpMethod; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest; import java.io.IOException; import java.net.URL; import java.time.Instant; public class GeneratePresignedURL { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; String objectKey = "*** Object key ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion(clientRegion) .withCredentials(new ProfileCredentialsProvider()) .build(); // Set the presigned URL to expire after one hour. java.util.Date expiration = new java.util.Date(); long expTimeMillis = Instant.now().toEpochMilli(); expTimeMillis += 1000 * 60 * 60; expiration.setTime(expTimeMillis); // Generate the presigned URL. System.out.println("Generating pre-signed URL."); GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, objectKey) .withMethod(HttpMethod.GET) .withExpiration(expiration); URL url = s3Client.generatePresignedUrl(generatePresignedUrlRequest); System.out.println("Pre-Signed URL: " + url.toString()); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }
.NET

실제 예제를 작성 및 테스트하는 방법에 대한 자세한 내용은 Amazon S3 .NET 코드 예제 실행 섹션을 참조하세요.

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; namespace Amazon.DocSamples.S3 { class GenPresignedURLTest { private const string bucketName = "*** bucket name ***"; private const string objectKey = "*** object key ***"; // Specify how long the presigned URL lasts, in hours private const double timeoutDuration = 12; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 s3Client; public static void Main() { s3Client = new AmazonS3Client(bucketRegion); string urlString = GeneratePreSignedURL(timeoutDuration); } static string GeneratePreSignedURL(double duration) { string urlString = ""; try { GetPreSignedUrlRequest request1 = new GetPreSignedUrlRequest { BucketName = bucketName, Key = objectKey, Expires = DateTime.UtcNow.AddHours(duration) }; urlString = s3Client.GetPreSignedURL(request1); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } return urlString; } } }
PHP

AWS SDK for PHP 버전 3을 사용하여 미리 서명된 URL을 생성하는 방법에 대한 자세한 내용은 AWS SDK for PHP 개발자 안내서에서 AWS SDK for PHP 버전 3으로 미리 서명된 Amazon S3 URL을 참조하세요.

Python

미리 서명된 URL을 생성하여 SDK for Python(Boto3)을 사용해 객체를 공유합니다. 예를 들어, Boto3 클라이언트와 generate_presigned_url 함수를 사용하여 객체를 GET하는 미리 서명된 URL을 생성합니다.

import boto3 url = boto3.client('s3').generate_presigned_url( ClientMethod='get_object', Params={'Bucket': 'BUCKET_NAME', 'Key': 'OBJECT_KEY'}, ExpiresIn=3600)

SDK for Python(Boto3)을 사용하여 미리 서명된 URL을 생성하는 방법에 대한 자세한 내용은 AWS SDK for Python (Boto) API 참조Python을 참조하세요.

미리 서명된 URL을 생성하여 AWS CLI를 통해 객체를 공유하려면 AWS CLI 명령 참조presign을 참조하세요.

참고

AWS CLI을 사용하면 미리 서명된 URL의 최대 만료 시간은 생성 시점으로부터 7일입니다.