· 8 years ago · Dec 06, 2017, 12:56 AM
1package main
2
3import (
4 "flag"
5 "fmt"
6 "os"
7
8 "github.com/aws/aws-sdk-go/aws"
9 "github.com/aws/aws-sdk-go/aws/credentials"
10 "github.com/aws/aws-sdk-go/aws/session"
11 "github.com/aws/aws-sdk-go/service/s3"
12)
13
14var (
15 aKey = flag.String("a", "", "Accesskey for using aws sdk")
16 sKey = flag.String("s", "", "Secretkey for using aws sdk")
17 date = flag.String("d", "201701", "date(yyyymm) to get cloudtrail log")
18)
19
20func main() {
21 flag.Parse()
22 getCloudTrailLog := CloudTrailLogFromS3{
23 AccessKey: *aKey,
24 SecretKey: *sKey,
25 Region: "ap-northeast-1",
26 BucketName: "[BucketName]",
27 Date: *date,
28 }
29
30 getCloudTrailLog.getLogs()
31}
32
33type CloudTrailLogFromS3 struct {
34 AccessKey string
35 SecretKey string
36 Region string
37 BucketName string
38 Date string
39}
40
41func (f *CloudTrailLogFromS3) getLogs() {
42 isTruncated := false
43 marker := ""
44 var count int64 = 0
45
46 conf := &aws.Config{
47 Credentials: credentials.NewStaticCredentials(f.AccessKey, f.SecretKey, ""),
48 Region: &(f.Region),
49 }
50
51 sess, err := session.NewSession(conf)
52 if err != nil {
53 exitErrorof("セッション張るã®ã«å¤±æ•—ã—ãŸã‚ˆ, %v", err)
54 }
55 svc := s3.New(sess)
56
57 for {
58 listInput := &s3.ListObjectsV2Input{
59 Bucket: aws.String(f.BucketName),
60 Prefix: aws.String("[é©åˆ‡ãªkey]/" + f.Date[0:4] + "/" + f.Date[4:6] + "/"),
61 StartAfter: aws.String(marker),
62 }
63
64 result, err := svc.ListObjectsV2(listInput)
65 if err != nil {
66 exitErrorof("リストã®å–å¾—ã«å¤±æ•—ã—ãŸã‚ˆ, %v", err)
67 } else {
68 isTruncated = *(result.IsTruncated)
69 count += *(result.KeyCount)
70 if isTruncated == true {
71 marker = *(result.Contents[*(result.KeyCount)-1].Key)
72 } else {
73 fmt.Printf("filecount, %v", count)
74 break
75 }
76 }
77 }
78}
79
80func exitErrorof(msg string, args ...interface{}) {
81 fmt.Fprintf(os.Stderr, msg+"\n", args...)
82 os.Exit(1)
83}