署名付き URL を使用したオブジェクトの共有 - Amazon Simple Storage Service

新しい Amazon S3 ユーザーガイドにようこそ! Amazon S3 ユーザーガイドは、使用中止された 3 つのガイド (Amazon S3 開発者ガイドAmazon S3 コンソールユーザーガイドAmazon S3 入門ガイド) の情報と手順をまとめたものです。

署名付き URL を使用したオブジェクトの共有

デフォルトでは、すべてのオブジェクトがプライベートです。オブジェクトの所有者のみがプライベートのオブジェクトにアクセスできます。ただし、オブジェクトの所有者はオプションで他ユーザーとオブジェクトを共有することができます。その場合は、署名付き URL を作成し、独自のセキュリティ証明書を使用して、オブジェクトをダウンロードするための期限付きの許可を相手に付与します。

オブジェクトの署名付き URL を作成するときは、セキュリティ証明書を提供し、バケット名とオブジェクトキーを指定する必要があります。また、HTTP メソッド (オブジェクトをダウンロードするには GET) と有効期限の日時も指定する必要があります。署名付き URL は、指定した期間のみ有効です。

署名付き URL を受け取った相手は誰でも、そのオブジェクトにアクセスできるようになります。たとえば、プライベートのバケット内にプライベートの動画を格納している場合は、署名付き URL を生成することで、その動画を他ユーザーと共有できます。

注記
  • 有効なセキュリティ認証情報を持つすべてのユーザーが、署名付き URL を作成できます。ただし、オブジェクトに正常にアクセスするには、署名付き URL を使用して行うオペレーションの実行権限を持っているユーザーが、署名付き URL を作成する必要があります。

  • 署名付き URL の作成に使用できる認証情報には以下が含まれます。

    • IAM インスタンスプロファイル: 最大 6 時間有効

    • AWS Security Token Service: 最大 36 時間有効 (AWS アカウントルートユーザーや IAM ユーザーの認証情報など、永続的認証情報を使用して署名した場合)

    • IAM ユーザー: 最大 7 日間有効 (AWS 署名バージョン 4 を使用した場合)

      最大 7 日間有効の署名付き URL を作成するには、まず、使用する SDK への IAM ユーザー認証情報 (アクセスキーとシークレットアクセスキー) を指定します。次に、AWS 署名バージョン 4 を使用して署名付き URL を生成します。

  • 一時トークンを使用して署名付き URL を作成した場合、トークンが有効期限切れになると、URL は失効します。URL の有効期限がより長い場合でも失効します。

  • 署名付き URL は、URL を持つすべてのユーザーに Amazon S3 バケットへのアクセスを許可するため、適切に保護することをお勧めします。署名付き URL の保護の詳細については、「署名付き URL 機能の制限」を参照してください。

署名付き URL の生成

署名付き URL は、REST APIAWS コマンドラインインターフェイス、AWS SDK for Java、.NET、RubyPHPNode.jsPython、および Go を使用してプログラムで作成できます。

Visual Studio を使用している場合は、AWS Explorer for Visual Studio を使用することで、コードを一切記述しなくてもオブジェクトの署名付き URL を生成できます。この URL を受け取った相手は誰でも、オブジェクトをダウンロードできるようになります。詳細については、「AWS Explorer で Amazon S3 を使用する」を参照してください。

AWS Explorer をインストールする方法については、「AWS SDK およびエクスプローラーを使用して Amazon S3 で開発する」を参照してください。

次の例では、署名付き URL を生成します。この URL を他ユーザーに配布すると、オブジェクトを取得できるようになります。詳細については、「署名付き URL を使用したオブジェクトの共有」を参照してください。

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; 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 = expiration.getTime(); 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

次のサンプルコードは、署名付き URL を生成します。この URL は、オブジェクトの取得を可能にするために他ユーザーに配布できます。詳細については、「署名付き URL を使用したオブジェクトの共有」を参照してください。

実際に動作するコードを作成、テストする方法については、「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; } } }
Go

SDK for Go を使用してオブジェクトをアップロードできます。PUT リクエストを送信して 1 回のオペレーションでデータをアップロードできます。詳細については、AWS SDK for Go 開発者ガイドの「特定のペイロードを持つ Amazon S3 PUT オペレーションに署名付き URL を生成する」を参照してください。

PHP

AWS SDK for PHP バージョン 3 を使用して署名済み URL を生成する方法の詳細については、AWS SDK for PHP デベロッパーガイドの「AWS SDK for PHP バージョン 3 を使用した Amazon S3 署名付き URL」を参照してください 。