Elad Lachmi
Elad Lachmi

Reputation: 10581

cloudfront private time limited url

I have a client that wants to sell tutorial videos online. I already got previews of his tutorials streaming from CF (This is public). Now I want to use the c# sdk to generate private, time limited URLs to allow customers who purchased the tutorials to download them for a limited time period. Once the payment has been confirmed, I want to generate a URL and send it to the client via email.

Does CF/.NET SDK support this? Can someone point me at a sample. I have searched Google, and got a little information overload. Different examples from different versions of sdk/management console. Please help me make sense of it all :)

Upvotes: 2

Views: 1372

Answers (4)

user1906709
user1906709

Reputation: 31

You can use the GUI or code in S3SignURL to sign your URL

https://github.com/DigitalBodyGuard/S3SignURL

Upvotes: 1

Tej Kiran
Tej Kiran

Reputation: 2248

Yes Amazon S3 as well as CloudFront both support preSignedUrl access. If you want to faster content delivery the you should use CloudFront. Mr. Norm Johanson saying correct. To generate signed url you will need of Public-Private key pair. You can user your own key pair and lets associate with you account of Amazon S3 or you can also generate it at amazon s3 account and download to generate presigned url

Upvotes: 2

Norm Johanson
Norm Johanson

Reputation: 3177

If you look at the class Amazon.CloudFront.AmazonCloudFrontUrlSigner that has helper methods for creating presigned URL to private distributions. For example this code snippet creates a url that is valid for one day.

var url = AmazonCloudFrontUrlSigner.GetCannedSignedURL(AmazonCloudFrontUrlSigner.Protocol.http, domainName, cloudFrontPrivateKey, file, cloudFrontKeyPairID, DateTime.Now.AddDays(1));

There are other utility methods in that class for adding more specific access rules.

Note this class was added in version 1.5.2.0 of the SDK which came out in late Augest

Upvotes: 4

Pavel Safronov
Pavel Safronov

Reputation: 1286

You can't do this with CloudFront (CF), but you can do this directly with S3. You simply call the GetPreSignedURL function to generate a time-limited URL to a specific (private) S3 item. This approach is covered in a tutorial here.

The simplest code sample is this:

AmazonS3 client;

GetPreSignedUrlRequest request = new GetPreSignedUrlRequest();
request.WithBucketName(bucketName);
request.WithKey(objectKey);
request.Verb = HttpVerb.GET; // Default.
request.WithExpires(DateTime.Now.AddMinutes(5));

string url = client.GetPreSignedURL(request);

Upvotes: -1

Related Questions