From c5a2fa9f92a811d049ab165f6cdba44adbad0709 Mon Sep 17 00:00:00 2001 From: bbernays Date: Tue, 21 Feb 2023 18:49:42 -0600 Subject: [PATCH 01/10] Add new mock --- plugins/source/aws/client/mocks/cloudtrail.go | 20 +++++++++++++++++++ .../source/aws/client/services/cloudtrail.go | 1 + plugins/source/aws/codegen/main.go | 1 + 3 files changed, 22 insertions(+) diff --git a/plugins/source/aws/client/mocks/cloudtrail.go b/plugins/source/aws/client/mocks/cloudtrail.go index 9f2cbb57413a25..5d73a0e46b13f9 100644 --- a/plugins/source/aws/client/mocks/cloudtrail.go +++ b/plugins/source/aws/client/mocks/cloudtrail.go @@ -394,3 +394,23 @@ func (mr *MockCloudtrailClientMockRecorder) ListTrails(arg0, arg1 interface{}, a varargs := append([]interface{}{arg0, arg1}, arg2...) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListTrails", reflect.TypeOf((*MockCloudtrailClient)(nil).ListTrails), varargs...) } + +// LookupEvents mocks base method. +func (m *MockCloudtrailClient) LookupEvents(arg0 context.Context, arg1 *cloudtrail.LookupEventsInput, arg2 ...func(*cloudtrail.Options)) (*cloudtrail.LookupEventsOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "LookupEvents", varargs...) + ret0, _ := ret[0].(*cloudtrail.LookupEventsOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// LookupEvents indicates an expected call of LookupEvents. +func (mr *MockCloudtrailClientMockRecorder) LookupEvents(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LookupEvents", reflect.TypeOf((*MockCloudtrailClient)(nil).LookupEvents), varargs...) +} diff --git a/plugins/source/aws/client/services/cloudtrail.go b/plugins/source/aws/client/services/cloudtrail.go index 63b26a719787db..29489babb8adf6 100644 --- a/plugins/source/aws/client/services/cloudtrail.go +++ b/plugins/source/aws/client/services/cloudtrail.go @@ -26,4 +26,5 @@ type CloudtrailClient interface { ListQueries(context.Context, *cloudtrail.ListQueriesInput, ...func(*cloudtrail.Options)) (*cloudtrail.ListQueriesOutput, error) ListTags(context.Context, *cloudtrail.ListTagsInput, ...func(*cloudtrail.Options)) (*cloudtrail.ListTagsOutput, error) ListTrails(context.Context, *cloudtrail.ListTrailsInput, ...func(*cloudtrail.Options)) (*cloudtrail.ListTrailsOutput, error) + LookupEvents(context.Context, *cloudtrail.LookupEventsInput, ...func(*cloudtrail.Options)) (*cloudtrail.LookupEventsOutput, error) } diff --git a/plugins/source/aws/codegen/main.go b/plugins/source/aws/codegen/main.go index 932dca1e34573b..ad5c45ada926cc 100644 --- a/plugins/source/aws/codegen/main.go +++ b/plugins/source/aws/codegen/main.go @@ -233,6 +233,7 @@ func include(m reflect.Method) bool { var exceptions = []string{ "QuerySchemaVersionMetadata", "GenerateCredentialReport", + "LookupEvents", } if funk.ContainsString(exceptions, m.Name) { return true From 99f5be29d1891cdf91d1931c6f319b5bf04b1732 Mon Sep 17 00:00:00 2001 From: bbernays Date: Tue, 21 Feb 2023 18:50:07 -0600 Subject: [PATCH 02/10] Add backend support --- plugins/source/aws/client/client.go | 13 ++++++++++--- plugins/source/aws/client/testing.go | 2 +- .../services/iam/credential_reports_mock_test.go | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/plugins/source/aws/client/client.go b/plugins/source/aws/client/client.go index 199726e3530439..f2370e7fd2178a 100644 --- a/plugins/source/aws/client/client.go +++ b/plugins/source/aws/client/client.go @@ -19,6 +19,7 @@ import ( "github.com/aws/smithy-go" "github.com/aws/smithy-go/logging" "github.com/cloudquery/cloudquery/plugins/source/aws/client/services" + "github.com/cloudquery/plugin-sdk/backend" "github.com/cloudquery/plugin-sdk/plugins/source" "github.com/cloudquery/plugin-sdk/schema" "github.com/cloudquery/plugin-sdk/specs" @@ -37,6 +38,7 @@ type Client struct { WAFScope wafv2types.Scope Partition string LanguageCode string + Backend backend.Backend } type AwsLogger struct { @@ -103,8 +105,9 @@ func (s *ServicesManager) InitServicesForPartitionAccountAndScope(partition, acc s.wafScopeServices[partition][accountId] = &svcs } -func NewAwsClient(logger zerolog.Logger) Client { +func NewAwsClient(logger zerolog.Logger, b backend.Backend) Client { return Client{ + Backend: b, ServicesManager: ServicesManager{ services: ServicesPartitionAccountRegionMap{}, }, @@ -145,6 +148,7 @@ func (c *Client) withPartitionAccountIDAndRegion(partition, accountID, region st Region: region, AutoscalingNamespace: c.AutoscalingNamespace, WAFScope: c.WAFScope, + Backend: c.Backend, } } @@ -157,6 +161,7 @@ func (c *Client) withPartitionAccountIDRegionAndNamespace(partition, accountID, Region: region, AutoscalingNamespace: namespace, WAFScope: c.WAFScope, + Backend: c.Backend, } } @@ -169,6 +174,7 @@ func (c *Client) withPartitionAccountIDRegionAndScope(partition, accountID, regi Region: region, AutoscalingNamespace: c.AutoscalingNamespace, WAFScope: scope, + Backend: c.Backend, } } @@ -324,7 +330,7 @@ func configureAwsClient(ctx context.Context, logger zerolog.Logger, awsConfig *S return awsCfg, err } -func Configure(ctx context.Context, logger zerolog.Logger, spec specs.Source, _ source.Options) (schema.ClientMeta, error) { +func Configure(ctx context.Context, logger zerolog.Logger, spec specs.Source, opts source.Options) (schema.ClientMeta, error) { var awsConfig Spec err := spec.UnmarshalSpec(&awsConfig) if err != nil { @@ -336,7 +342,8 @@ func Configure(ctx context.Context, logger zerolog.Logger, spec specs.Source, _ return nil, fmt.Errorf("spec validation failed: %w", err) } - client := NewAwsClient(logger) + client := NewAwsClient(logger, opts.Backend) + var adminAccountSts AssumeRoleAPIClient if awsConfig.Organization != nil { diff --git a/plugins/source/aws/client/testing.go b/plugins/source/aws/client/testing.go index 54f0e4830654cf..17e22cacea9ec7 100644 --- a/plugins/source/aws/client/testing.go +++ b/plugins/source/aws/client/testing.go @@ -31,7 +31,7 @@ func AwsMockTestHelper(t *testing.T, table *schema.Table, builder func(*testing. if err := spec.UnmarshalSpec(&awsSpec); err != nil { return nil, fmt.Errorf("failed to unmarshal aws spec: %w", err) } - c := NewAwsClient(l) + c := NewAwsClient(l, nil) c.ServicesManager.InitServicesForPartitionAccountAndRegion("aws", "testAccount", "us-east-1", builder(t, ctrl)) c.Partition = "aws" return &c, nil diff --git a/plugins/source/aws/resources/services/iam/credential_reports_mock_test.go b/plugins/source/aws/resources/services/iam/credential_reports_mock_test.go index c8b4b136e89446..d34325f7a6b612 100644 --- a/plugins/source/aws/resources/services/iam/credential_reports_mock_test.go +++ b/plugins/source/aws/resources/services/iam/credential_reports_mock_test.go @@ -54,7 +54,7 @@ func testCredentialReportsWithNilValues(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) services := buildCredentialReportsWithNilValues(ctrl) - cl := client.NewAwsClient(zerolog.Logger{}) + cl := client.NewAwsClient(zerolog.Logger{}, nil) cl.ServicesManager.InitServicesForPartitionAccountAndRegion("aws", "testAccount", "us-east-1", services) cl.Partition = "aws" cl.Region = "us-east-1" From 6f38c4788717d2622a52daf167ad52af48b0a8a5 Mon Sep 17 00:00:00 2001 From: bbernays Date: Tue, 21 Feb 2023 18:50:28 -0600 Subject: [PATCH 03/10] New table for Cloudtrail_Events --- plugins/source/aws/resources/plugin/tables.go | 1 + .../resources/services/cloudtrail/events.go | 91 +++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 plugins/source/aws/resources/services/cloudtrail/events.go diff --git a/plugins/source/aws/resources/plugin/tables.go b/plugins/source/aws/resources/plugin/tables.go index 131edab07e67a8..abfc51f727995d 100644 --- a/plugins/source/aws/resources/plugin/tables.go +++ b/plugins/source/aws/resources/plugin/tables.go @@ -146,6 +146,7 @@ func tables() []*schema.Table { cloudfront.Distributions(), cloudhsmv2.Backups(), cloudhsmv2.Clusters(), + cloudtrail.Events(), cloudtrail.Trails(), cloudwatch.Alarms(), cloudwatchlogs.LogGroups(), diff --git a/plugins/source/aws/resources/services/cloudtrail/events.go b/plugins/source/aws/resources/services/cloudtrail/events.go new file mode 100644 index 00000000000000..7c1241c13934f0 --- /dev/null +++ b/plugins/source/aws/resources/services/cloudtrail/events.go @@ -0,0 +1,91 @@ +package cloudtrail + +import ( + "context" + "fmt" + "time" + + "github.com/aws/aws-sdk-go-v2/service/cloudtrail" + "github.com/aws/aws-sdk-go-v2/service/cloudtrail/types" + "github.com/cloudquery/cloudquery/plugins/source/aws/client" + "github.com/cloudquery/plugin-sdk/schema" + "github.com/cloudquery/plugin-sdk/transformers" +) + +func Events() *schema.Table { + return &schema.Table{ + Name: "aws_cloudtrail_events", + Description: `https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_Event.html`, + Resolver: fetchCloudtrailEvents, + Multiplex: client.ServiceAccountRegionMultiplexer("cloudtrail"), + Transform: transformers.TransformWithStruct(&types.Event{}, transformers.WithPrimaryKeys("EventId")), + IsIncremental: true, + Columns: []schema.Column{ + client.DefaultAccountIDColumn(true), + client.DefaultRegionColumn(true), + { + Name: "cloud_trail_event", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("CloudTrailEvent"), + }, + { + Name: "event_time", + Type: schema.TypeTimestamp, + Resolver: schema.PathResolver("EventTime"), + CreationOptions: schema.ColumnCreationOptions{ + IncrementalKey: true, + }, + }, + }, + } +} + +func fetchCloudtrailEvents(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { + cl := meta.(*client.Client) + svc := cl.Services().Cloudtrail + + le := &cloudtrail.LookupEventsInput{} + + const key = "cloudwatch_events" + if cl.Backend != nil { + value, err := cl.Backend.Get(ctx, key, cl.ID()) + if err != nil { + return fmt.Errorf("failed to retrieve state from backend: %w", err) + } + + if value != "" { + date, err := time.Parse(time.RFC3339Nano, value) + if err != nil { + return fmt.Errorf("retrieved invalid state value: %q %w", value, err) + } + le.StartTime = &date + } + } + var lastEventTime *time.Time + // var err error + paginator := cloudtrail.NewLookupEventsPaginator(svc, le) + for paginator.HasMorePages() { + page, err := paginator.NextPage(ctx) + if err != nil { + return err + } + res <- page.Events + + for _, event := range page.Events { + if lastEventTime == nil { + lastEventTime = event.EventTime + continue + } + if event.EventTime.After(*lastEventTime) { + lastEventTime = event.EventTime + } + } + } + + if cl.Backend != nil && lastEventTime != nil { + return cl.Backend.Set(ctx, key, cl.ID(), lastEventTime.Format(time.RFC3339Nano)) + } + return nil + + // return err +} From 0e76d53c056416aba065e0b653c1a9809c8dd98e Mon Sep 17 00:00:00 2001 From: bbernays Date: Tue, 21 Feb 2023 18:53:06 -0600 Subject: [PATCH 04/10] docs --- plugins/source/aws/docs/tables/README.md | 1 + .../aws/docs/tables/aws_cloudtrail_events.md | 26 +++++++++++++++++++ .../pages/docs/plugins/sources/aws/tables.md | 1 + 3 files changed, 28 insertions(+) create mode 100644 plugins/source/aws/docs/tables/aws_cloudtrail_events.md diff --git a/plugins/source/aws/docs/tables/README.md b/plugins/source/aws/docs/tables/README.md index 073258fe6f58c8..f85e0b9ae50da5 100644 --- a/plugins/source/aws/docs/tables/README.md +++ b/plugins/source/aws/docs/tables/README.md @@ -89,6 +89,7 @@ - [aws_cloudfront_distributions](aws_cloudfront_distributions.md) - [aws_cloudhsmv2_backups](aws_cloudhsmv2_backups.md) - [aws_cloudhsmv2_clusters](aws_cloudhsmv2_clusters.md) +- [aws_cloudtrail_events](aws_cloudtrail_events.md) (Incremental) - [aws_cloudtrail_trails](aws_cloudtrail_trails.md) - [aws_cloudtrail_trail_event_selectors](aws_cloudtrail_trail_event_selectors.md) - [aws_cloudwatch_alarms](aws_cloudwatch_alarms.md) diff --git a/plugins/source/aws/docs/tables/aws_cloudtrail_events.md b/plugins/source/aws/docs/tables/aws_cloudtrail_events.md new file mode 100644 index 00000000000000..cf6d3b9f2456cd --- /dev/null +++ b/plugins/source/aws/docs/tables/aws_cloudtrail_events.md @@ -0,0 +1,26 @@ +# Table: aws_cloudtrail_events + +https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_Event.html + +The composite primary key for this table is (**account_id**, **region**, **event_id**). +It supports incremental syncs based on the **event_time** column. + +## Columns + +| Name | Type | +| ------------- | ------------- | +|_cq_source_name|String| +|_cq_sync_time|Timestamp| +|_cq_id|UUID| +|_cq_parent_id|UUID| +|account_id (PK)|String| +|region (PK)|String| +|cloud_trail_event|JSON| +|event_time (Incremental Key)|Timestamp| +|access_key_id|String| +|event_id (PK)|String| +|event_name|String| +|event_source|String| +|read_only|String| +|resources|JSON| +|username|String| \ No newline at end of file diff --git a/website/pages/docs/plugins/sources/aws/tables.md b/website/pages/docs/plugins/sources/aws/tables.md index f18555ec1d5926..3ac5e3a4fd8735 100644 --- a/website/pages/docs/plugins/sources/aws/tables.md +++ b/website/pages/docs/plugins/sources/aws/tables.md @@ -89,6 +89,7 @@ - [aws_cloudfront_distributions](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/aws/docs/tables/aws_cloudfront_distributions.md) - [aws_cloudhsmv2_backups](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/aws/docs/tables/aws_cloudhsmv2_backups.md) - [aws_cloudhsmv2_clusters](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/aws/docs/tables/aws_cloudhsmv2_clusters.md) +- [aws_cloudtrail_events](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/aws/docs/tables/aws_cloudtrail_events.md) (Incremental) - [aws_cloudtrail_trails](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/aws/docs/tables/aws_cloudtrail_trails.md) - [aws_cloudtrail_trail_event_selectors](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/aws/docs/tables/aws_cloudtrail_trail_event_selectors.md) - [aws_cloudwatch_alarms](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/aws/docs/tables/aws_cloudwatch_alarms.md) From f21284e67b2a3bd320227e3b2b76b470720638fa Mon Sep 17 00:00:00 2001 From: bbernays Date: Wed, 22 Feb 2023 07:09:53 -0600 Subject: [PATCH 05/10] skip cloudtrail events --- website/pages/docs/plugins/sources/aws/configuration.md | 1 + 1 file changed, 1 insertion(+) diff --git a/website/pages/docs/plugins/sources/aws/configuration.md b/website/pages/docs/plugins/sources/aws/configuration.md index be093a994c26a1..793308f897a95d 100644 --- a/website/pages/docs/plugins/sources/aws/configuration.md +++ b/website/pages/docs/plugins/sources/aws/configuration.md @@ -39,6 +39,7 @@ spec: # unless otherwise indicated they are configuration parameters rather than configured resources skip_tables: - aws_ec2_vpc_endpoint_services # this resource includes services that are available from AWS as well as other AWS Accounts + - aws_cloudtrail_events - aws_docdb_cluster_parameter_groups - aws_docdb_engine_versions - aws_ec2_instance_types From 19f9a8bc3bd978b4061e8137f3f72f35fc13ba97 Mon Sep 17 00:00:00 2001 From: bbernays Date: Wed, 22 Feb 2023 07:09:58 -0600 Subject: [PATCH 06/10] docs --- plugins/source/aws/docs/tables/aws_cloudtrail_events.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/source/aws/docs/tables/aws_cloudtrail_events.md b/plugins/source/aws/docs/tables/aws_cloudtrail_events.md index cf6d3b9f2456cd..55587064a4ccca 100644 --- a/plugins/source/aws/docs/tables/aws_cloudtrail_events.md +++ b/plugins/source/aws/docs/tables/aws_cloudtrail_events.md @@ -2,7 +2,7 @@ https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_Event.html -The composite primary key for this table is (**account_id**, **region**, **event_id**). +The primary key for this table is **event_id**. It supports incremental syncs based on the **event_time** column. ## Columns @@ -13,8 +13,8 @@ It supports incremental syncs based on the **event_time** column. |_cq_sync_time|Timestamp| |_cq_id|UUID| |_cq_parent_id|UUID| -|account_id (PK)|String| -|region (PK)|String| +|account_id|String| +|region|String| |cloud_trail_event|JSON| |event_time (Incremental Key)|Timestamp| |access_key_id|String| From d7a0ea51fbf5c8368c1fd65b6e9a4702981319d8 Mon Sep 17 00:00:00 2001 From: bbernays Date: Wed, 22 Feb 2023 07:10:03 -0600 Subject: [PATCH 07/10] Update events.go --- plugins/source/aws/resources/services/cloudtrail/events.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/plugins/source/aws/resources/services/cloudtrail/events.go b/plugins/source/aws/resources/services/cloudtrail/events.go index 7c1241c13934f0..91a9f80ecc72a9 100644 --- a/plugins/source/aws/resources/services/cloudtrail/events.go +++ b/plugins/source/aws/resources/services/cloudtrail/events.go @@ -21,8 +21,8 @@ func Events() *schema.Table { Transform: transformers.TransformWithStruct(&types.Event{}, transformers.WithPrimaryKeys("EventId")), IsIncremental: true, Columns: []schema.Column{ - client.DefaultAccountIDColumn(true), - client.DefaultRegionColumn(true), + client.DefaultAccountIDColumn(false), + client.DefaultRegionColumn(false), { Name: "cloud_trail_event", Type: schema.TypeJSON, @@ -71,6 +71,7 @@ func fetchCloudtrailEvents(ctx context.Context, meta schema.ClientMeta, parent * } res <- page.Events + // Retrieve the timestamp from the latest event for _, event := range page.Events { if lastEventTime == nil { lastEventTime = event.EventTime @@ -86,6 +87,4 @@ func fetchCloudtrailEvents(ctx context.Context, meta schema.ClientMeta, parent * return cl.Backend.Set(ctx, key, cl.ID(), lastEventTime.Format(time.RFC3339Nano)) } return nil - - // return err } From b070c27c67b831d6917cc6c70cb9c948de63bc9e Mon Sep 17 00:00:00 2001 From: bbernays Date: Wed, 22 Feb 2023 07:10:11 -0600 Subject: [PATCH 08/10] tests --- .../services/cloudtrail/events_mock_test.go | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 plugins/source/aws/resources/services/cloudtrail/events_mock_test.go diff --git a/plugins/source/aws/resources/services/cloudtrail/events_mock_test.go b/plugins/source/aws/resources/services/cloudtrail/events_mock_test.go new file mode 100644 index 00000000000000..8354de6edfcea4 --- /dev/null +++ b/plugins/source/aws/resources/services/cloudtrail/events_mock_test.go @@ -0,0 +1,39 @@ +package cloudtrail + +import ( + "testing" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/cloudtrail" + "github.com/aws/aws-sdk-go-v2/service/cloudtrail/types" + "github.com/cloudquery/cloudquery/plugins/source/aws/client" + "github.com/cloudquery/cloudquery/plugins/source/aws/client/mocks" + "github.com/cloudquery/plugin-sdk/faker" + "github.com/golang/mock/gomock" +) + +func buildCloudtrailEventsMock(t *testing.T, ctrl *gomock.Controller) client.Services { + m := mocks.NewMockCloudtrailClient(ctrl) + services := client.Services{ + Cloudtrail: m, + } + event := types.Event{} + err := faker.FakeObject(&event) + if err != nil { + t.Fatal(err) + } + + event.CloudTrailEvent = aws.String("{}") + m.EXPECT().LookupEvents(gomock.Any(), gomock.Any(), gomock.Any()).Return( + &cloudtrail.LookupEventsOutput{ + Events: []types.Event{event}, + }, + nil, + ) + + return services +} + +func TestCloudtrailEvents(t *testing.T) { + client.AwsMockTestHelper(t, Events(), buildCloudtrailEventsMock, client.TestOptions{}) +} From db5ad9151ef632da8559fede34fb0a80486d621f Mon Sep 17 00:00:00 2001 From: bbernays Date: Wed, 22 Feb 2023 08:36:29 -0600 Subject: [PATCH 09/10] Update events.go --- plugins/source/aws/resources/services/cloudtrail/events.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/source/aws/resources/services/cloudtrail/events.go b/plugins/source/aws/resources/services/cloudtrail/events.go index 91a9f80ecc72a9..72b9ac452bb99a 100644 --- a/plugins/source/aws/resources/services/cloudtrail/events.go +++ b/plugins/source/aws/resources/services/cloudtrail/events.go @@ -46,7 +46,7 @@ func fetchCloudtrailEvents(ctx context.Context, meta schema.ClientMeta, parent * le := &cloudtrail.LookupEventsInput{} - const key = "cloudwatch_events" + const key = "cloudtrail_events" if cl.Backend != nil { value, err := cl.Backend.Get(ctx, key, cl.ID()) if err != nil { From b851cd9274dcf9d451932731904c2ddc9117d5c2 Mon Sep 17 00:00:00 2001 From: bbernays Date: Wed, 22 Feb 2023 08:46:01 -0600 Subject: [PATCH 10/10] Update events.go --- .../source/aws/resources/services/cloudtrail/events.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/plugins/source/aws/resources/services/cloudtrail/events.go b/plugins/source/aws/resources/services/cloudtrail/events.go index 72b9ac452bb99a..01418ab80ac289 100644 --- a/plugins/source/aws/resources/services/cloudtrail/events.go +++ b/plugins/source/aws/resources/services/cloudtrail/events.go @@ -12,9 +12,11 @@ import ( "github.com/cloudquery/plugin-sdk/transformers" ) +const tableName = "aws_cloudtrail_events" + func Events() *schema.Table { return &schema.Table{ - Name: "aws_cloudtrail_events", + Name: tableName, Description: `https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_Event.html`, Resolver: fetchCloudtrailEvents, Multiplex: client.ServiceAccountRegionMultiplexer("cloudtrail"), @@ -46,9 +48,8 @@ func fetchCloudtrailEvents(ctx context.Context, meta schema.ClientMeta, parent * le := &cloudtrail.LookupEventsInput{} - const key = "cloudtrail_events" if cl.Backend != nil { - value, err := cl.Backend.Get(ctx, key, cl.ID()) + value, err := cl.Backend.Get(ctx, tableName, cl.ID()) if err != nil { return fmt.Errorf("failed to retrieve state from backend: %w", err) } @@ -84,7 +85,7 @@ func fetchCloudtrailEvents(ctx context.Context, meta schema.ClientMeta, parent * } if cl.Backend != nil && lastEventTime != nil { - return cl.Backend.Set(ctx, key, cl.ID(), lastEventTime.Format(time.RFC3339Nano)) + return cl.Backend.Set(ctx, tableName, cl.ID(), lastEventTime.Format(time.RFC3339Nano)) } return nil }