-
Notifications
You must be signed in to change notification settings - Fork 0
/
s3PreSign.go
81 lines (70 loc) · 2.1 KB
/
s3PreSign.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// ./s3Sign module helps to create signed url for the given bucket object and timeframe
package main
import (
"flag"
"fmt"
"log"
"os"
"time"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
)
var awsAccessID string
var awsSecretKey string
var region string
// checkCreds checks env var for aws cred
func checkCreds() {
ac, acok := os.LookupEnv("ACCESS_ID")
sk, skok := os.LookupEnv("SECRET_KEY")
re, reok := os.LookupEnv("REGION")
if acok && skok && reok {
awsAccessID = ac
awsSecretKey = sk
region = re
} else {
fmt.Println("Fatal Error: Please make sure to define ACCESS_ID & SECRET_KEY & REGION as env variable before execution.")
os.Exit(1)
}
}
// awsActiveSession helps to fetch aws sdk active session
func awsActiveSession() (source *session.Session) {
fmt.Println("* - Getting the active session for aws")
sourceSession, _ := session.NewSession(&aws.Config{
Region: aws.String(region),
Credentials: credentials.NewStaticCredentials(awsAccessID, awsSecretKey, ""),
})
return sourceSession
}
func main() {
// pre-requisite: First Check for the AWS prod cred
checkCreds()
// properties
bn := flag.String("bucketname", "", "(string) source s3 bucket name")
bnp := flag.String("bucketprefix", "", "(string) source file name inside the bucket")
flag.Parse()
if false {
fmt.Println("./s3PreSign invalid arg count, [help] s3Sign -h \nUsage:")
flag.PrintDefaults()
fmt.Println("Example: [./s3PreSign -bucketname=xyz -bucketprefix=folder/filename.txt]")
os.Exit(1)
} else {
if *bn == "" || *bnp == "" {
fmt.Printf("Either bucketname and bucketprefix cant be blank, BucketName: %v,Prefix: %v", *bn, *bnp)
flag.PrintDefaults()
os.Exit(1)
}
}
svc := s3.New(awsActiveSession())
req, _ := svc.GetObjectRequest(&s3.GetObjectInput{
Bucket: aws.String(*bn),
Key: aws.String(*bnp),
})
// hours, _ := strconv.Atoi(*hs)
urlStr, err := req.Presign(72 * time.Hour)
if err != nil {
log.Println("Failed to sign request", err)
}
log.Println("The URL is", urlStr)
}