Sign AWS S3 Object Urls

JS
S
JavaScript

Typescript service class to sign S3 Objects

1import AWS from 'aws-sdk';
2import fs from 'fs';
3import path from 'path';
4import { Tags } from 'tsoa';
5import aws4 from 'aws4';
6
7import logService from '../services/log';
8
9@Tags('AWS')
10class AWSService {
11  public s3: AWS.S3;
12  public getSignedUrl: any;
13
14  constructor() {
15    logService.log(`info`, `AWS Service running`, { region: process.env.AWS_REGION });
16    AWS.config.update({
17      accessKeyId: process.env.AWS_ACCESS_KEY_ID,
18      secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
19      region: process.env.AWS_REGION
20    });
21    this.s3 = new AWS.S3({
22      signatureVersion: 'v4',
23      region: process.env.AWS_REGION,
24      accessKeyId: process.env.AWS_ACCESS_KEY_ID,
25      secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
26    });
27  }
28
29  public signS3Url(bucket: string, key: string): Promise<string> {
30    logService.log(`info`, `Signing url..`, { bucket, key });
31    const getSignedUrlParams = {
32      Bucket: bucket,
33      Key: key,
34      Expires: 3600 // Set 1 hour expiry: 60*60 seconds = 3600 seconds
35    };
36    return this.s3.getSignedUrlPromise('getObject', getSignedUrlParams);
37  }
38}
39
40export default new AWSService();

Created on 9/24/2019