背景
公司的海外業(yè)務(wù)需要將云上的操作讀取到內(nèi)部的日志文件中,永久保存,供內(nèi)部審計(jì)使用。
由于之前沒有用過AWS相關(guān)的SDK,在使用過程中也遇到一些困難,這里記錄一下,并且總結(jié)一下過程。
代碼
快速開始
代碼參考地址:https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/go/example_code/cloudtrail/lookup_events.go
func AwsCloudTrail() (_err error) {
//初始化session,通過aws.config 將Region 和 AK、SK進(jìn)行配置(Region、AK、SK需要自己的)
sess := session.Must(session.NewSession(&aws.Config{
Region: aws.String("ap-southeast-1"),
Credentials: credentials.NewStaticCredentials("AK", "SK", ""),
}))
svc := cloudtrail.New(sess)
maxResult := int64(30)
//構(gòu)造請(qǐng)求參數(shù),可以配置時(shí)間、limit等,具體支持參數(shù)看后面提供的文檔鏈接
input := &cloudtrail.LookupEventsInput{EndTime: aws.Time(time.Now()), MaxResults: &maxResult}
//發(fā)送請(qǐng)求
resp, err := svc.LookupEvents(input)
if err != nil {
fmt.Println("Got error calling CreateTrail:")
return err
}
//讀取結(jié)果
fmt.Println("Found", len(resp.Events), "events before now")
for _, event := range resp.Events {
fmt.Println("Event:")
fmt.Println(aws.StringValue(event.CloudTrailEvent))
fmt.Println("")
fmt.Println("Name ", aws.StringValue(event.EventName))
fmt.Println("ID: ", aws.StringValue(event.EventId))
fmt.Println("Time: ", aws.TimeValue(event.EventTime))
fmt.Println("User: ", aws.StringValue(event.Username))
fmt.Println("Resources:")
for _, resource := range event.Resources {
fmt.Println(" Name:", aws.StringValue(resource.ResourceName))
fmt.Println(" Type:", aws.StringValue(resource.ResourceType))
}
fmt.Println("")
}
return nil
}
原始文檔
CloudTrail 文檔:https://docs.aws.amazon.com/zh_cn/awscloudtrail/latest/APIReference/Welcome.html
CloudTrail GO SDK文檔:https://docs.aws.amazon.com/sdk-for-go/api/service/cloudtrail/#CloudTrail.LookupEvents
AWS GO 使用案例文檔:https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/go/example_code/cloudtrail/lookup_events.go
stackoverflow 問題文檔:https://stackoverflow.com/questions/41544554/how-to-run-aws-sdk-with-credentials-from-variables
查看AWS 支持的Region:https://docs.aws.amazon.com/zh_cn/awscloudtrail/latest/userguide/cloudtrail-supported-regions.html
總結(jié)復(fù)盤
起初對(duì)于審計(jì)日志沒有最基礎(chǔ)的概念,可以理解成系統(tǒng)的操作日志,在系統(tǒng)上的所有操作都會(huì)被記錄下來,變成一個(gè)事件(Event)
公司海外云使用的阿里和AWS,所以首先想到可以先接入阿里云,好處是阿里云的文檔中文更友好,接入更加容易,對(duì)一些基礎(chǔ)概念可以更好的掌握。
一般的云廠商都會(huì)把各種資源封裝成一個(gè)服務(wù),同樣是查看審計(jì)日志阿里云就封裝成審計(jì)服務(wù),這與阿里云的SLS完全不一樣,方向錯(cuò)了,就越走越遠(yuǎn)了。
AWS 將審計(jì)日志封裝成CloudTrail 通過調(diào)用歷史記錄,可以對(duì)云上操作進(jìn)行監(jiān)控和審計(jì)。
【1】 查看CloudTrail文檔,(查看上面 CloudTrail 文檔)但是會(huì)有很對(duì)的Actions文檔,選擇哪一個(gè)?
【2】確定Action,查看相應(yīng)的SDK,以及使用方法,阿里云使用的關(guān)鍵字是LookupEvent,所以就查看AWS有沒有相關(guān)的內(nèi)容。
【3】問題是SDK文檔提供的是源碼類似,并沒有如何使用,比如我如何New CloudTrail, 參數(shù)如何傳遞,在New例子中,并沒有使用AK,SK的地方。
【4】文檔不能提供幫助,開始Google, 找到了SDK 使用示例(AWS GO 使用案例文檔)但是還是沒有找到如何設(shè)置這個(gè) session,接下來問提變成AK,SK的如何與session結(jié)合,或者與New CloudTrail結(jié)合。
【5】在尋找過程中,有很多aws.Config關(guān)鍵字,以前沒用過,感覺可以查看整體如何使用SDK的配置,查看開發(fā)者指南,果然通過“Configuring the SDK”找到了Region、Credentials的使用方式,Credentials就包括了AK、SK的設(shè)置方式。其實(shí)有四種方式。我們沒有配置文件,所以首選的Static Credentials的方式。
【6】問題演成GO如何使用Static Credentials,這個(gè)時(shí)候可以Google一下,也能找到如何與session配置結(jié)合。文章來源:http://www.zghlxwxcb.cn/news/detail-750766.html
難者不會(huì),會(huì)者不難,即使一個(gè)簡(jiǎn)單的事情,當(dāng)我們沒有概念的時(shí)候也會(huì)覺得很復(fù)雜,關(guān)鍵是總結(jié)出一套探索的方法。文章來源地址http://www.zghlxwxcb.cn/news/detail-750766.html
到了這里,關(guān)于使用 AWS Go SDK 讀取審計(jì)日志(CloudTrail)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!