

# 署名付き URL を使用したオブジェクトの共有
<a name="ShareObjectPreSignedURL"></a>

デフォルトでは、すべての Amazon S3 オブジェクトはプライベートであり、オブジェクトの所有者のみがアクセスできます。ただし、オブジェクトの所有者は、署名付き URL を作成することで、他のユーザーとオブジェクトを共有できます。署名付き URL は、セキュリティ認証情報を使用してオブジェクトをダウンロードするアクセス許可を期限付きで付与します。署名付き URL をブラウザに入力するか、プログラムで使用してオブジェクトをダウンロードできます。署名付き URL で使用される認証情報は、URL を生成した AWS ユーザーのものです。

署名付き URL の一般的な情報については、「[署名付き URL を使用したオブジェクトのダウンロードおよびアップロード](using-presigned-url.md)」を参照してください。

オブジェクトを共有するための署名付き 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 コンソールの使用
<a name="generating-presigned-url"></a>

 Amazon S3 コンソールで次の手順に従い、最大 5 TB のオブジェクトを共有するための署名付き URL を生成できます。コンソールを使用した場合、署名付き URL の最大有効期限は作成時点から 12 時間です。

**Amazon S3 コンソールを使用して署名付き URL を生成するには**

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

1. **[汎用バケット]** リストで、署名付き URL を取得するオブジェクトが含まれている汎用バケットの名前を選択します。

1. **[オブジェクト]** リストで、署名付き URL を作成するオブジェクトを選択します。

1. **[オブジェクトアクション]** メニューで、**[署名付き URL で共有]** を選択します。

1. 署名付き URL の有効期間を指定します。

1. **[Create presigned URL]** (署名付き 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*」ファイルとして保存します。次の例を使用する際は、*ユーザー入力用プレースホルダー*を独自の情報 (ファイル名など) に置き換えます。

   ```
   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 を生成するには、バケット名と目的のオブジェクトパスを使用して次のスクリプトを実行します。

    次のコマンドでは、値の例を使用しています。*ユーザー入力プレースホルダー*を独自の情報に置き換えます。

   ```
   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. 生成された署名付き URL と curl を使用してファイルをダウンロードできます。

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

AWS SDK を使用してオブジェクトを共有するための署名付き URL を生成する他の例については、「[AWS SDK を使用して Amazon S3 の署名付き URL を作成する](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 を使用する場合、Tagging 属性はクエリパラメータではなく、ヘッダーでなければなりません。他のすべての属性は、署名付き URL のパラメータとして渡すことができます。

------

## AWS Toolkit for Visual Studio の使用 (Windows)
<a name="ShareObjectPreSignedURLVSExplorer"></a>

**注記**  
現時点では、AWS Toolkit for Visual Studio は Visual Studio for Mac をサポートしていません。

1. 「*AWS Toolkit for Visual Studio ユーザーガイド*」の「[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 ユーザーガイド*」の「[Connecting to 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 ユーザーガイド*」の「[Connecting to 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. **[エクスプローラー]** で、**[S3]** を選択します。

1. バケットとファイルを選択し、右クリックしてコンテキストメニューを開きます。

1. **[署名付き URL を生成]** を選択し、有効期限 (分単位) を設定します。

1. Enter キーを押すと、署名付き URL がクリップボードにコピーされます。