Freigeben eines Objekts mit einer vorsignierten URL - Amazon Simple Storage Service

Willkommen im neuen Amazon-S3-Benutzerhandbuch! Das Amazon-S3-Benutzerhandbuch kombiniert Informationen und Anweisungen aus den drei eingestellten Handbüchern: Amazon-S3-Entwicklerhandbuch, Benutzerhandbuch der Amazon-S3-Konsole und Amazon S3 – Handbuch Erste Schritte.

Freigeben eines Objekts mit einer vorsignierten URL

Standardmäßig werden alle Objekte als privat eingestuft. Nur der Objekteigentümer hat die Berechtigung, auf diese Objekte zuzugreifen. Der Objekteigentümer kann die Objekte jedoch optional mit anderen teilen, indem er eine vorsignierte URL erstellt und seine eigenen Sicherheitsanmeldeinformationen verwendet, um eine temporäre Berechtigung für den Download der Objekte zu erteilen.

Wenn Sie eine vorsignierte URL für Ihr Objekt erstellen, müssen Sie Ihre Sicherheitsanmeldeinformationen bereitstellen, einen Bucket-Namen, einen Objektschlüssel, eine HTTP-Methode (GET für den Download des Objekts) und ein Datum und eine Uhrzeit für den Ablauf angeben. Vorsignierte URLs sind nur für die angegebene Dauer gültig.

Jeder, der die vorsignierte URL erhält, kann dann auf das Objekt zugreifen. Wenn Sie beispielsweise ein Video in Ihrem Bucket haben und sowohl der Bucket als auch das Objekt privat sind, können Sie das Video mit anderen teilen, indem Sie eine vorsignierte URL generieren.

Anmerkung
  • Alle Benutzer mit gültigen Sicherheitsanmeldeinformationen können vorsignierte URLs erstellen. Um erfolgreich auf ein Objekt zugreifen zu können, muss jedoch die vorsignierte URL von jemandem erstellt werden, der die Berechtigung für die Operation besitzt, auf der die vorsignierte URL basiert.

  • Die Anmeldeinformationen, die Sie zum Erstellen einer vorsignierten URL verwenden können, beinhalten:

    • IAM-Instance-Profil: Bis zu 6 Stunden gültig.

    • AWS Security Token Service: Bis zu 36 Stunden gültig, wenn mit permanenten Anmeldeinformationen signiert (beispielsweise Anmeldeinformationen des Stammbenutzers des AWS-Kontos oder eines IAM-Benutzers).

    • IAM-Benutzer: Bis zu 7 Tage gültig, bei Verwendung von AWS Signature Version 4.

      Um eine vorsignierte URL zu erstellen, die bis zu 7 Tage gültig ist, geben Sie zunächst IAM-Benutzeranmeldeinformationen (den Zugriffsschlüssel und den geheimen Zugriffsschlüssel) für das SDK an, das Sie verwenden. Erzeugen Sie dann eine vorsignierte URL mit AWS Signature Version 4.

  • Wenn Sie eine vorsignierte URL mit einem temporären Token erstellt haben, verfällt die URL mit Ablauf des Token, auch wenn die URL mit einer späteren Ablaufzeit erstellt wurde.

  • Da vorsignierte URLs jedem, der die URL hat, Zugriff auf Ihre Amazon-S3-Buckets gewähren, empfehlen wir Ihnen, diese angemessen zu schützen. Weitere Informationen zum Schutz vorsignierter URLs finden Sie unter Beschränkung der Funktionen für vorsignierte URLs.

Generieren einer vorsignierten URL

Sie können eine vorsignierte URL programmgesteuert mithilfe der REST-API, der AWS Command Line Interface, und dem AWS SDK for Java, .NET, Ruby, PHP, Node.js, Python und Go.

Wenn Sie Visual Studio verwenden, können Sie auch den AWS Explorer für Visual Studio verwenden, um eine vorsignierte URL für ein Objekt zu erstellen, ohne Code schreiben zu müssen. Jeder mit dieser URL kann das Objekt herunterladen. Weitere Informationen finden Sie unter Verwenden von Amazon S3 im AWS Explorer.

Anweisungen zur Installation des AWS-Explorers finden Sie unter Entwickeln mit Amazon S3 unter Verwendung der AWS-SDKs und Explorers.

Die folgenden Beispiele generiert eine vorsignierte URL, die Sie für andere bereitstellen können, so dass sie ein Objekt abrufen können. Weitere Informationen finden Sie unter Freigeben eines Objekts mit einer vorsignierten URL.

Java

Das folgende Beispiel erstellt eine vorsignierte URL, die Sie für andere bereitstellen können, so dass sie ein Objekt aus einem S3-Bucket abrufen können. Weitere Informationen finden Sie unter Freigeben eines Objekts mit einer vorsignierten URL.

Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Testen der Java-Codebeispiele für Amazon S3.

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

Das folgende Beispiel generiert eine vorsignierte URL, die Sie für andere bereitstellen können, so dass sie ein Objekt abrufen können. Weitere Informationen finden Sie unter Freigeben eines Objekts mit einer vorsignierten URL.

Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Ausführen der .NET-Codebeispiele für Amazon S3.

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

Sie können das SDK for Go verwenden, um ein Objekt hochzuladen. Sie können eine PUT-Anforderung senden, um Daten in einer einzigen Operation hochzuladen. Weitere Informationen finden Sie unter Generieren einer vorsignierten URL für einen Amazon S3 PUT-Vorgang mit einer bestimmten Nutzlast im AWS-SDK-for-Go-Entwicklerhandbuch.

PHP

Weitere Informationen zur Verwendung von AWS SDK for PHP Version 3 zum Generieren einer vorsignierten URL finden Sie unter Von Amazon S3 vorsignierte URL mit AWS SDK for PHP Version 3 im Entwicklerhandbuch zum AWS SDK for PHP.