首页 > 其他分享 >使用 AWS Go SDK 读取审计日志(CloudTrail)

使用 AWS Go SDK 读取审计日志(CloudTrail)

时间:2023-12-12 17:33:07浏览次数:38  
标签:CloudTrail AWS fmt aws Println 文档 Go

背景

公司的海外业务需要将云上的操作读取到内部的日志文件中,永久保存,供内部审计使用。

由于之前没有用过AWS相关的SDK,在使用过程中也遇到一些困难,这里记录一下,并且总结一下过程。

代码

快速开始
代码参考地址: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进行配置(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)
    
    //构造请求参数,可以配置时间、limit等,具体支持参数看后面提供的文档链接
	input := &cloudtrail.LookupEventsInput{EndTime: aws.Time(time.Now()), MaxResults: &maxResult}
    
    //发送请求
	resp, err := svc.LookupEvents(input)
	if err != nil {
		fmt.Println("Got error calling CreateTrail:")
		return err
	}
    
    //读取结果
	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

总结复盘

起初对于审计日志没有最基础的概念,可以理解成系统的操作日志,在系统上的所有操作都会被记录下来,变成一个事件(Event)
公司海外云使用的阿里和AWS,所以首先想到可以先接入阿里云,好处是阿里云的文档中文更友好,接入更加容易,对一些基础概念可以更好的掌握。
一般的云厂商都会把各种资源封装成一个服务,同样是查看审计日志阿里云就封装成审计服务,这与阿里云的SLS完全不一样,方向错了,就越走越远了。

AWS 将审计日志封装成CloudTrail 通过调用历史记录,可以对云上操作进行监控和审计。
【1】 查看CloudTrail文档,(查看上面 CloudTrail 文档)但是会有很对的Actions文档,选择哪一个?
【2】确定Action,查看相应的SDK,以及使用方法,阿里云使用的关键字是LookupEvent,所以就查看AWS有没有相关的内容。
【3】问题是SDK文档提供的是源码类似,并没有如何使用,比如我如何New CloudTrail, 参数如何传递,在New例子中,并没有使用AK,SK的地方。
【4】文档不能提供帮助,开始Google, 找到了SDK 使用示例(AWS GO 使用案例文档)但是还是没有找到如何设置这个 session,接下来问提变成AK,SK的如何与session结合,或者与New CloudTrail结合。
【5】在寻找过程中,有很多aws.Config关键字,以前没用过,感觉可以查看整体如何使用SDK的配置,查看开发者指南,果然通过“Configuring the SDK”找到了Region、Credentials的使用方式,Credentials就包括了AK、SK的设置方式。其实有四种方式。我们没有配置文件,所以首选的Static Credentials的方式。
【6】问题演成GO如何使用Static Credentials,这个时候可以Google一下,也能找到如何与session配置结合。

难者不会,会者不难,即使一个简单的事情,当我们没有概念的时候也会觉得很复杂,关键是总结出一套探索的方法。

标签:CloudTrail,AWS,fmt,aws,Println,文档,Go
From: https://www.cnblogs.com/zhaosc-haha/p/17897396.html

相关文章

  • 免费scrum敏捷管理工具Leangoo领歌私有部署新增第三方身份认证和API对接
    ​为了不断提升我们的产品质量和服务水平,Leangoo持续不断地关注并响应客户的需求。最近,我们完成了一轮新的功能优化和升级!让我们一起来看看吧~Leangoo私有部署支持第三方身份认证对接Leangoo提供两种方式进行身份认证对接a.商户自行提供OAuth服务如果您作为商户希望自行......
  • Argo CD 基础
    Argoproj概述用于Kubernetes运行工作流程、管理集群和正确执行GitOps的开源工具。Argoproj组成ArgoWorkflows基于Kubernetes平台的原生工作流引擎,支持DAG和step-based工作流。ArgoEventsKubernetes上的基于事件的依赖管理器,用于触发Kubernetes中的Argo工作流和其他......
  • Golang实现简易的顺序执行协程池
    countable_executor.go//一个可计数的单线程顺序任务执行器typeCountableExecutorstruct{namestring//名称taskQueuechaniCountableTask//任务队列bufferSizeint//缓冲区大小}//一个可计数的单线程任务......
  • Django 创建项目时找不到数据库sqlite3,提示no changes detected
    原因:PyCharm创建Django项目,找不到数据库sqlite3 解决:如果没有默认的db文件,则应在PyCharm终端中执行以下命令:pythonmanage.pymakemigrations:提示pythonmanage.pymigrate ......
  • django orm 软删除联表查询 需要显示软删除条件
    比如课程学习required_ok=UserLesson.objects.values('uuid').distinct().filter(user_id=self.request.user_id,).filter(lesson__course__course_bx_org__org_id__in=org_ids,).filter(Q(lesson__course__......
  • go 聊天室
    main.go1packagemain23import(4"encoding/json"5"fmt"6"net/http"78"github.com/gorilla/websocket"9"github.com/gorilla/mux"10)1112typeDatast......
  • Go Work Stealing 机制
    一、什么是WorkStealingGo语言的WorkStealing机制是一种用于调度协程(Goroutines)的策略,有助于充分利用多核CPU,提高并发性能,降低锁竞争,从而使Go程序更高效地运行WorkStealing机制的核心思想:每个操作系统线程(M)都有一个本地任务队列,它会尽可能地先执行自己队列中的协程。当某......
  • 部署 Argo Rollouts v1.6.3
    创建nsargo-rollouts#kubectlcreatenamespaceargo-rolloutsnamespace/argo-rolloutscreated安装 argo-rollouts#kubectlapply-nargo-rollouts-fhttps://github.com/argoproj/argo-rollouts/releases/latest/download/install.yamlcustomresourcedefinition.api......
  • mongodb
    mongodb内部培训目录简介基础概念适用场景数据建模嵌入式数据模型标准化数据模型N对N关系事务生产经验一般查询符Null大数据量查询索引创建索引索引名称索引类型单字段索引复合索引多键索引索引的属性唯一索引部分索引稀疏索引HiddenInd......
  • Go 语言字符串使用方式与技巧
    Go语言字符串使用方式与技巧原创 frank Golang语言开发栈 2023-12-1023:00 发表于北京收录于合集#Golang语言156个#Golang进阶学习106个大家好,我是frank。欢迎大家点击标题下方蓝色文字「Golang语言开发栈」关注公众号。公众号主页点击右上角三个点图标,设......