Options
All
  • Public
  • Public/Protected
  • All
Menu

Module @aws-sdk/s3-request-presigner

@aws-sdk/s3-request-presigner

NPM version NPM downloads

This package provides a presigner based on signature V4 that will attempt to generate signed url for S3.

Get Presigned URL with Client and Command

You can generated presigned url from S3 client and command. Here's the example:

JavaScript Example:

const { getSignedUrl } = require("@aws-sdk/s3-request-presigner");
const { S3Client, GetObjectCommand } = require("@aws-sdk/client-s3");
const client = new S3Client(clientParams);
const command = new GetObjectCommand(getObjectParams);
const url = await getSignedUrl(client, command, { expiresIn: 3600 });

ES6 Example

import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3";
const client = new S3Client(clientParams);
const command = new GetObjectCommand(getObjectParams);
const url = await getSignedUrl(client, command, { expiresIn: 3600 });

You can get signed URL for other S3 operations too, like PutObjectCommand. expiresIn config from the examples above is optional. If not set, it's default at 900.

If your request contains server-side encryption(SSE*) configurations, because of S3 limitation, you need to send corresponding headers along with the presigned url. For more information, please go to S3 SSE reference

If you already have a request, you can pre-sign the request following the section bellow.

Get Presigned URL from an Existing Request

JavaScript Example:

const { S3RequestPresigner } = require("@aws-sdk/s3-request-presigner");
const { Sha256 } = require("@aws-crypto/sha256-browser");
const { Hash } = require("@aws-sdk/hash-node");
const signer = new S3RequestPresigner({
  region: regionProvider,
  credentials: credentialsProvider,
  sha256: Hash.bind(null, "sha256"), // In Node.js
  //sha256: Sha256 // In browsers
});
const presigned = await signer.presign(request);

ES6 Example:

import { S3RequestPresigner } from "@aws-sdk/s3-request-presigner";
import { Sha256 } from "@aws-crypto/sha256-browser";
import { Hash } from "@aws-sdk/hash-node";
const signer = new S3RequestPresigner({
  region: regionProvider,
  credentials: credentialsProvider,
  sha256: Hash.bind(null, "sha256"), // In Node.js
  //sha256: Sha256 // In browsers
});
const presigned = await signer.presign(request);

To avoid redundant construction parameters when instantiating the s3 presigner, you can simply spread the configuration of an existing s3 client and supply it to the presigner's constructor.

//s3 is instantiated from S3Client from @aws-sdk/client-s3-* packages
const signer = new S3RequestPresigner({
  ...s3.config,
});

If your request contains server-side encryption(x-amz-server-side-encryption*) headers, because of S3 limitation, you need to send these headers along with the presigned url. That is to say, the url only from calling formatUrl() to presigned is not sufficient to make a request. You need to send the server-side encryption headers along with the url. These headers remain in the presigned.headers

For more information, please go to S3 SSE reference

Index

References

S3RequestPresigner

Re-exports S3RequestPresigner

S3RequestPresignerOptions

Re-exports S3RequestPresignerOptions

getSignedUrl

Re-exports getSignedUrl

Type aliases

PartialBy

PartialBy<T, K>: Omit<T, K> & Partial<Pick<T, K>>

Type parameters

  • T

  • K: keyof T

S3RequestPresignerOptions

S3RequestPresignerOptions: PartialBy<SignatureV4MultiRegionInit, "service" | "uriEscapePath"> & { signingName?: string }

Variables

Const ALGORITHM_IDENTIFIER

ALGORITHM_IDENTIFIER: "AWS4-HMAC-SHA256" = "AWS4-HMAC-SHA256"

Const ALGORITHM_QUERY_PARAM

ALGORITHM_QUERY_PARAM: "X-Amz-Algorithm" = "X-Amz-Algorithm"

Const AMZ_DATE_QUERY_PARAM

AMZ_DATE_QUERY_PARAM: "X-Amz-Date" = "X-Amz-Date"

Const CREDENTIAL_QUERY_PARAM

CREDENTIAL_QUERY_PARAM: "X-Amz-Credential" = "X-Amz-Credential"

Const EXPIRES_QUERY_PARAM

EXPIRES_QUERY_PARAM: "X-Amz-Expires" = "X-Amz-Expires"

Const HOST_HEADER

HOST_HEADER: "host" = "host"

Const SHA256_HEADER

SHA256_HEADER: "X-Amz-Content-Sha256" = "X-Amz-Content-Sha256"

Const SIGNED_HEADERS_QUERY_PARAM

SIGNED_HEADERS_QUERY_PARAM: "X-Amz-SignedHeaders" = "X-Amz-SignedHeaders"

Const UNSIGNED_PAYLOAD

UNSIGNED_PAYLOAD: "UNSIGNED-PAYLOAD" = "UNSIGNED-PAYLOAD"

Functions

Const getSignedUrl