사전 서명 URL로 객체 공유하기

사전 서명 URL로 객체 공유하기

기본적으로 모든 Amazon S3 객체는 비공개이고, 객체 소유자만 액세스할 권한이 있어요. 하지만 객체 소유자는 사전 서명 URL을 만들어 다른 사람과 객체를 공유할 수 있어요. 사전 서명 URL은 보안 자격 증명을 사용해 객체를 다운로드할 수 있는 시간 제한 권한을 부여해요. 그 URL은 브라우저에 입력하거나 프로그램에서 사용해 객체를 다운로드할 수 있어요. 사전 서명 URL이 사용하는 자격 증명은 그 URL을 생성한 AWS 사용자의 자격 증명이에요.

사전 서명 URL에 대한 일반 정보는 사전 서명 URL로 객체 다운로드·업로드하기를 참고하세요.

코드를 작성하지 않고 객체를 공유하기 위한 사전 서명 URL을 Amazon S3 콘솔, AWS Explorer for Visual Studio(Windows), 또는 AWS Toolkit for Visual Studio Code로 만들 수 있어요. AWS Command Line Interface(AWS CLI) 또는 AWS SDK로 프로그래밍 방식으로 사전 서명 URL을 생성할 수도 있어요.

다음 단계에 따라 S3 콘솔을 사용해 최대 5TB 객체를 공유하기 위한 사전 서명 URL을 생성할 수 있어요. 콘솔을 사용할 때 사전 서명 URL의 최대 만료 시간은 생성 시점부터 12시간이에요.

출처: 문서

본문

S3 콘솔로 사전 서명 URL을 생성하려면

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.
  2. 왼쪽 탐색 창에서 General purpose buckets를 선택합니다.
  3. General purpose buckets 목록에서 사전 서명 URL을 원하는 객체가 들어 있는 일반 용도 버킷의 이름을 선택합니다.
  4. Objects 목록에서 사전 서명 URL을 생성할 객체를 선택합니다.
  5. Object actions 메뉴에서 Share with a presigned URL을 선택합니다.
  6. 사전 서명 URL이 유효한 기간을 지정합니다.
  7. Create presigned URL을 선택합니다.
  8. 확인이 나타나면 URL이 자동으로 클립보드에 복사됩니다. 다시 복사해야 한다면 사전 서명 URL을 복사하는 버튼이 보여요.

다음 AWS CLI 명령 예시는 Amazon S3 버킷에서 객체를 공유하기 위한 사전 서명 URL을 생성해요. AWS CLI를 사용할 때 사전 서명 URL의 최대 만료 시간은 생성 시점부터 7일이에요. 이 예시를 사용하려면 user input placeholders를 여러분의 정보로 바꾸세요.

aws s3 presign s3://amzn-s3-demo-bucket/mydoc.txt --expires-in 604800

--expires-in 매개변수는 만료 시간을 초 단위로 지정해요.

참고

2019년 3월 20일 이후에 출시된 모든 AWS 리전에서는 요청과 함께 endpoint-url과 AWS Region을 지정해야 해요. 모든 Amazon S3 리전과 엔드포인트 목록은 _AWS General Reference_의 리전과 엔드포인트를 참고하세요.

aws s3 presign s3://amzn-s3-demo-bucket/mydoc.txt --expires-in 604800 --region af-south-1 --endpoint-url https://s3.af-south-1.amazonaws.com

자세한 내용은 _AWS CLI Command Reference_의 presign을 참고하세요.

AWS SDK를 사용해 프로그래밍 방식으로 사전 서명 URL을 생성할 수 있어요.

Python

다음 Python 스크립트는 객체를 공유하기 위한 GET 사전 서명 URL을 생성해요.

  1. 스크립트 내용을 복사해 "get-only-url.py" 파일로 저장합니다. 다음 예시를 사용하려면 user input placeholders를 여러분의 정보(예: 파일 이름)로 바꾸세요.
import argparse
import boto3
from botocore.exceptions import ClientError

def generate_presigned_url(s3_client, client_method, method_parameters, expires_in):
    """
    Generate a presigned Amazon S3 URL that can be used to perform an action.

    :param s3_client: A Boto3 Amazon S3 client.
    :param client_method: The name of the client method that the URL performs.
    :param method_parameters: The parameters of the specified client method.
    :param expires_in: The number of seconds the presigned URL is valid for.
    :return: The presigned URL.
    """
    try:
        url = s3_client.generate_presigned_url(
            ClientMethod=client_method,
            Params=method_parameters,
            ExpiresIn=expires_in
        )
    except ClientError:
        print(f"Couldn't get a presigned URL for client method '{client_method}'.")
        raise
    return url

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("bucket", help="The name of the bucket.")
    parser.add_argument(
        "key", help="The key (path and filename) in the S3 bucket.",
    )
    args = parser.parse_args()

    # By default, this will use credentials from ~/.aws/credentials
    s3_client = boto3.client("s3")

    # The presigned URL is specified to expire in 1000 seconds
    url = generate_presigned_url(
        s3_client,
        "get_object",
        {"Bucket": args.bucket, "Key": args.key},
        1000
    )
    print(f"Generated GET presigned URL: {url}")

if __name__ == "__main__":
    main()
  1. 파일 공유용 GET 사전 서명 URL을 생성하려면 버킷 이름과 원하는 객체 경로로 다음 스크립트를 실행합니다.

다음 명령은 예시 값을 사용해요. user input placeholders를 여러분의 정보로 바꾸세요.

python get-only-url.py amzn-s3-demo-bucket <object-path>

스크립트는 GET 사전 서명 URL을 출력해요.

Generated GET presigned URL: https://amzn-s3-demo-bucket.s3.amazonaws.com/object.txt?AWSAccessKeyId=AKIAIO...MPLE&Signature=vjbyNxybdZaMmLa%2ByT372YEAiv4%3D&Expires=1741978496
  1. 생성된 사전 서명 URL을 curl로 사용해 파일을 다운로드할 수 있어요.
curl -X GET "generated-presigned-url" -o "path/to/save/file"

AWS SDK로 객체 공유용 사전 서명 URL을 생성하는 더 많은 예시는 AWS SDK로 Amazon S3용 사전 서명 URL 만들기를 참고하세요.

참고

2019년 3월 20일 이후에 출시된 모든 AWS 리전에서는 요청과 함께 endpoint-url과 AWS Region을 지정해야 해요. 모든 Amazon S3 리전과 엔드포인트 목록은 _AWS General Reference_의 리전과 엔드포인트를 참고하세요.

참고

AWS SDK를 사용할 때 Tagging 속성은 쿼리 매개변수가 아니라 헤더여야 해요. 다른 모든 속성은 사전 서명 URL의 매개변수로 전달할 수 있어요.

참고

현재 AWS Toolkit for Visual Studio는 Visual Studio for Mac을 지원하지 않아요.

  1. _AWS Toolkit for Visual Studio User Guide_의 Toolkit for Visual Studio 설치·설정 지침에 따라 AWS Toolkit for Visual Studio를 설치합니다.
  2. _AWS Toolkit for Visual Studio User Guide_의 AWS에 연결 단계에 따라 AWS에 연결합니다.
  3. AWS Explorer로 표시된 왼쪽 패널에서 객체가 들어 있는 버킷을 엽니다.
  4. 사전 서명 URL을 생성하려는 객체의 컨텍스트 메뉴를 열고 **Create Pre-Signed URL...**을 선택합니다.
  5. 팝업 창에서 사전 서명 URL의 만료 날짜와 시각을 설정합니다.
  6. Object Key에는 선택한 객체에 따라 값이 미리 채워져야 합니다.
  7. 이 사전 서명 URL이 객체 다운로드에 사용될 것임을 지정하려면 GET을 선택합니다.
  8. Generate 버튼을 선택합니다.
  9. URL을 클립보드에 복사하려면 Copy를 선택합니다.
  10. 생성된 사전 서명 URL을 사용하려면 URL을 아무 브라우저에 붙여 넣습니다.

Visual Studio Code를 사용한다면 코드를 작성하지 않고도 AWS Toolkit for Visual Studio Code로 객체를 공유할 사전 서명 URL을 생성할 수 있어요. 일반 정보는 _AWS Toolkit for Visual Studio Code User Guide_의 AWS Toolkit for Visual Studio Code를 참고하세요.

AWS Toolkit for Visual Studio Code 설치 지침은 _AWS Toolkit for Visual Studio Code User Guide_의 AWS Toolkit for Visual Studio Code 설치를 참고하세요.

  1. _AWS Toolkit for Visual Studio Code User Guide_의 AWS Toolkit for Visual Studio Code에 연결 단계에 따라 AWS에 연결합니다.
  2. Visual Studio Code 왼쪽 패널에서 AWS 로고를 선택합니다.
  3. EXPLORER에서 S3를 선택합니다.
  4. 버킷과 파일을 선택하고 컨텍스트 메뉴(오른쪽 클릭)를 엽니다.
  5. Generate presigned URL을 선택한 다음 만료 시간(분)을 설정합니다.
  6. Enter를 누르면 사전 서명 URL이 클립보드에 복사됩니다.

더 알아보기 (Learn more)