署名付き 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 を生成できます。署名付き URL は、AWS SDKs for Java、.NET、RubyPHPNode.jsPython、および Go を使用してプログラムで生成できます。

AWS Management Console を使用して、次の手順に従い、オブジェクトの署名付き URL を生成できます。

注記

Amazon S3 コンソールでは、署名付き URL の最大有効期限は、作成時点から 12 時間です。

AWS Management Console を使用した署名付き URL の生成

  1. AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

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

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

  4. [Action] (アクション) メニューで、[Share with a presigned URL] (署名付き URL の共有) を選択します。

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

  6. [Create presigned URL] (署名付き 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 およびエクスプローラーを使用して Amazon S3 で開発する」を参照してください。

次の例では、署名付き URL を生成します。この URL を他ユーザーに配布すると、オブジェクトを取得できるようになります。

注記

AWS SDK では、署名付き URL の最大有効期限は、作成時点から 7 日間です。

Java

次のサンプルコードは、署名付き URL を生成します。この URL は、S3 バケットからのオブジェクトの取得を可能にするために他のユーザーに配布できます。詳細については、署名付き 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

SDK for Python (Boto3) を使用してオブジェクトを共有する署名付き URL を生成します。例えば、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 を参照してください。

AWS CLI を使用してオブジェクトを共有するための署名付き URL を生成するには、「AWS CLI コマンドリファレンス」の「事前署名」を参照してください。

注記

AWS CLI では、署名付き URL の最大有効期限は、作成時点から 7 日間です。