

# 미리 서명된 URL을 통해 객체 공유
<a name="ShareObjectPreSignedURL"></a>

기본적으로 모든 Amazon S3 객체는 프라이빗이며 객체 소유자만 액세스할 수 있는 권한이 있습니다. 그러나 객체 소유자는 미리 서명된 URL을 생성하여 다른 사람과 객체를 공유할 수 있습니다. 미리 서명된 URL은 보안 자격 증명을 사용하여 객체를 다운로드할 수 있는 시간 제한 권한을 부여합니다. 해당 URL은 브라우저에 입력하거나 프로그램에서 객체를 다운로드하는 데 사용할 수 있습니다. 미리 서명된 URL에서 사용하는 자격 증명은 URL을 생성한 AWS 사용자의 자격 증명입니다.

미리 서명된 URL에 대한 일반적인 내용은 [미리 서명된 URL을 통해 객체 다운로드 및 업로드](using-presigned-url.md) 섹션을 참조하세요.

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

## S3 콘솔 사용
<a name="generating-presigned-url"></a>

 다음 단계에 따라 Amazon S3 콘솔을 사용하여 최대 5TB의 객체 공유를 위해 미리 서명된 URL을 생성할 수 있습니다. 콘솔을 사용할 때 미리 서명된 URL의 최대 만료 시간은 생성 시점으로부터 12시간입니다.

**Amazon S3 콘솔을 사용하여 미리 서명된 URL을 생성하려면**

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

1. 왼쪽 탐색 창에서 **범용 버킷**을 선택합니다.

1. **범용 버킷** 목록에서 미리 서명된 URL을 사용할 객체가 있는 범용 버킷 이름을 선택합니다.

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

1. **객체 작업** 메뉴에서 **미리 서명된 URL 공유**를 선택합니다.

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

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

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

## AWS CLI 사용
<a name="ShareObjectPresignedCLI"></a>

다음 예제 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 리전` 리전을 지정해야 합니다. 모든 Amazon S3 리전 및 엔드포인트 목록은 **AWS 일반 참조의 [리전 및 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)를 참조하세요.

```
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 명령 참조*의 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/presign.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/presign.html) 섹션을 참조하십시오.

## AWS SDK 사용
<a name="ShareObjectPreSignedURLSDK"></a>

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=AKIAIOSFODNN7EXAMPLE&Signature=vjbyNxybdZaMmLa%2ByT372YEAiv4%3D&Expires=1741978496
   ```

1. 다음 curl을 통해 생성된 미리 서명된 URL을 사용하여 파일을 다운로드할 수 있습니다.

   ```
   curl -X GET "generated-presigned-url" -o "path/to/save/file" 
   ```

AWS SDK를 사용하여 객체를 공유하기 위한 미리 서명된 URL을 생성하는 더 많은 예시는 [Create a presigned URL for Amazon S3 by using an AWS SDK](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_Scenario_PresignedUrl_section.html)를 참조하세요.

**참고**  
2019년 3월 20일 이후에 출시된 모든 AWS 리전 리전의 경우 요청에 엔드포인트 `endpoint-url`과 `AWS 리전` 리전을 지정해야 합니다. 모든 Amazon S3 리전 및 엔드포인트 목록은 **AWS 일반 참조의 [리전 및 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)를 참조하십시오.

**참고**  
AWS SDK를 사용할 때 태그 지정 속성은 쿼리 파라미터가 아닌 헤더여야 합니다. 다른 모든 속성은 미리 서명된 URL의 파라미터로 전달할 수 있습니다.

------

## 사용 AWS Toolkit for Visual Studio(Windows)
<a name="ShareObjectPreSignedURLVSExplorer"></a>

**참고**  
현재 AWS Toolkit for Visual Studio는 Mac용 Visual Studio를 지원하지 않습니다.

1. **AWS Toolkit for Visual Studio 사용 설명서의 [Installing and setting up the Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/setup.html) 지침에 따라 AWS Toolkit for Visual Studio를 설치합니다.

1. 다음 단계, *AWS Toolkit for Visual Studio* 사용 설명서의 [AWS](https://docs.aws.amazon.com/AWSToolkitVS/latest/UserGuide/connect.html)에 연결 단계를 사용하여 AWS에 연결합니다.

1. **AWS Explorer**라는 레이블이 붙은 왼쪽 패널에서 객체가 들어 있는 버킷을 두 번 클릭합니다.

1. 미리 서명된 URL을 생성하려는 객체를 마우스 오른쪽 버튼으로 클릭하고 **미리 서명된 URL 생성...**을 선택합니다.

1. 팝업 창에서 미리 서명된 URL의 만료 날짜와 시간을 설정합니다.

1. **객체 키**는 선택한 객체를 기반으로 미리 채워집니다.

1. **GET**을 선택하여 이 미리 서명된 URL이 객체를 다운로드하는 데 사용되도록 지정합니다.

1. **생성** 버튼을 선택합니다.

1. URL을 클립보드에 복사하려면 **복사**를 선택합니다.

1. 생성된 미리 서명된 URL을 사용하려면 URL을 브라우저에 붙여 넣습니다.

## 사용AWS Toolkit for Visual Studio Code
<a name="ShareObjectPreSignedURLVSCode"></a>

Visual Studio Code를 사용할 경우 코드를 작성하지 않고도 공유할 수 있는 AWS Toolkit for Visual Studio Code를 사용하여 미리 서명된 객체 URL을 만들 수 있습니다. 일반적인 정보는 **AWS Toolkit for Visual Studio Code 사용 설명서의 [AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/welcome.html) 섹션을 참조하십시오.

AWS Toolkit for Visual Studio Code을 설치하는 방법에 대한 지침은 **AWS Toolkit for Visual Studio Code 사용 설명서의 [AWS Toolkit for Visual Studio Code 설치](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-toolkit.html)를 참조하십시오.

1. 다음 단계, *AWS Toolkit for Visual Studio Code* 사용 설명서의 [AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/connect.html)에 연결 단계를 사용하여 AWS에 연결합니다.

1. Visual Studio Code의 왼쪽 패널에서 AWS 로고를 선택합니다.

1. **Explorer**에서 **S3**를 선택합니다.

1. 버킷과 파일을 선택하고 컨텍스트 메뉴를 엽니다(마우스 오른쪽 버튼 클릭).

1. **미리 서명된 URL 생성**을 선택한 다음 만료 시간(분 단위)을 설정합니다.

1. Enter 키를 누르면 미리 서명된 URL이 클립보드에 복사됩니다.