From 1f316dbcefd47be68bb7a5c8cb44b9debff4dfec Mon Sep 17 00:00:00 2001 From: Herman Schaaf Date: Tue, 2 May 2023 12:01:09 +0100 Subject: [PATCH 01/10] Add more configuration resources --- plugins/source/aws/resources/plugin/tables.go | 3 ++ .../resources/services/cloudtrail/events.go | 9 +++- .../config/configuration_aggregators.go | 53 +++++++++++++++++++ .../configuration_aggregators_mock_test.go | 31 +++++++++++ .../config/remediation_configurations.go | 46 ++++++++++++++++ .../remediation_configurations_mock_test.go | 31 +++++++++++ .../config/retention_configurations.go | 46 ++++++++++++++++ .../retention_configurations_mock_test.go | 31 +++++++++++ 8 files changed, 249 insertions(+), 1 deletion(-) create mode 100644 plugins/source/aws/resources/services/config/configuration_aggregators.go create mode 100644 plugins/source/aws/resources/services/config/configuration_aggregators_mock_test.go create mode 100644 plugins/source/aws/resources/services/config/remediation_configurations.go create mode 100644 plugins/source/aws/resources/services/config/remediation_configurations_mock_test.go create mode 100644 plugins/source/aws/resources/services/config/retention_configurations.go create mode 100644 plugins/source/aws/resources/services/config/retention_configurations_mock_test.go diff --git a/plugins/source/aws/resources/plugin/tables.go b/plugins/source/aws/resources/plugin/tables.go index c6b9ec55323243..3df1d24897369e 100644 --- a/plugins/source/aws/resources/plugin/tables.go +++ b/plugins/source/aws/resources/plugin/tables.go @@ -176,9 +176,12 @@ func tables() []*schema.Table { computeoptimizer.EnrollmentStatuses(), computeoptimizer.LambdaFunctionsRecommendations(), config.ConfigRules(), + config.ConfigurationAggregators(), config.ConfigurationRecorders(), config.ConformancePacks(), config.DeliveryChannels(), + config.RemediationConfigurations(), + config.RetentionConfigurations(), costexplorer.ThirtyDayCost(), costexplorer.ThirtyDayCostForecast(), dax.Clusters(), diff --git a/plugins/source/aws/resources/services/cloudtrail/events.go b/plugins/source/aws/resources/services/cloudtrail/events.go index c1f7bd1d00de1d..15a83b58d1198a 100644 --- a/plugins/source/aws/resources/services/cloudtrail/events.go +++ b/plugins/source/aws/resources/services/cloudtrail/events.go @@ -46,7 +46,14 @@ func fetchCloudtrailEvents(ctx context.Context, meta schema.ClientMeta, parent * cl := meta.(*client.Client) svc := cl.Services().Cloudtrail - le := &cloudtrail.LookupEventsInput{} + le := &cloudtrail.LookupEventsInput{ + StartTime: nil, + EndTime: nil, + EventCategory: "", + LookupAttributes: nil, + MaxResults: nil, + NextToken: nil, + } if cl.Backend != nil { value, err := cl.Backend.Get(ctx, tableName, cl.ID()) diff --git a/plugins/source/aws/resources/services/config/configuration_aggregators.go b/plugins/source/aws/resources/services/config/configuration_aggregators.go new file mode 100644 index 00000000000000..173b85347cc8a6 --- /dev/null +++ b/plugins/source/aws/resources/services/config/configuration_aggregators.go @@ -0,0 +1,53 @@ +package config + +import ( + "context" + + "github.com/aws/aws-sdk-go-v2/service/configservice" + "github.com/aws/aws-sdk-go-v2/service/configservice/types" + "github.com/cloudquery/cloudquery/plugins/source/aws/client" + "github.com/cloudquery/plugin-sdk/v2/schema" + "github.com/cloudquery/plugin-sdk/v2/transformers" +) + +func ConfigurationAggregators() *schema.Table { + tableName := "aws_config_configuration_aggregators" + return &schema.Table{ + Name: tableName, + Description: `https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeConfigurationAggregators.html`, + Resolver: fetchConfigurationAggregators, + Multiplex: client.ServiceAccountRegionMultiplexer(tableName, "config"), + Transform: transformers.TransformWithStruct(&types.ConfigurationAggregator{}), + Columns: []schema.Column{ + client.DefaultAccountIDColumn(false), + client.DefaultRegionColumn(false), + { + Name: "arn", + Type: schema.TypeString, + Resolver: schema.PathResolver("ConfigurationAggregatorArn"), + CreationOptions: schema.ColumnCreationOptions{ + PrimaryKey: true, + }, + }, + }, + Relations: []*schema.Table{}, + } +} + +func fetchConfigurationAggregators(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { + c := meta.(*client.Client) + svc := c.Services().Configservice + + input := &configservice.DescribeConfigurationAggregatorsInput{} + p := configservice.NewDescribeConfigurationAggregatorsPaginator(svc, input) + for p.HasMorePages() { + response, err := p.NextPage(ctx, func(options *configservice.Options) { + options.Region = c.Region + }) + if err != nil { + return err + } + res <- response.ConfigurationAggregators + } + return nil +} diff --git a/plugins/source/aws/resources/services/config/configuration_aggregators_mock_test.go b/plugins/source/aws/resources/services/config/configuration_aggregators_mock_test.go new file mode 100644 index 00000000000000..7d562d9a6f33bc --- /dev/null +++ b/plugins/source/aws/resources/services/config/configuration_aggregators_mock_test.go @@ -0,0 +1,31 @@ +package config + +import ( + "testing" + + "github.com/aws/aws-sdk-go-v2/service/configservice" + "github.com/aws/aws-sdk-go-v2/service/configservice/types" + "github.com/cloudquery/cloudquery/plugins/source/aws/client" + "github.com/cloudquery/cloudquery/plugins/source/aws/client/mocks" + "github.com/cloudquery/plugin-sdk/v2/faker" + "github.com/golang/mock/gomock" +) + +func buildConfigurationAggregators(t *testing.T, ctrl *gomock.Controller) client.Services { + m := mocks.NewMockConfigserviceClient(ctrl) + l := types.ConfigurationAggregator{} + if err := faker.FakeObject(&l); err != nil { + t.Fatal(err) + } + m.EXPECT().DescribeConfigurationAggregators(gomock.Any(), gomock.Any(), gomock.Any()).Return( + &configservice.DescribeConfigurationAggregatorsOutput{ + ConfigurationAggregators: []types.ConfigurationAggregator{l}, + }, nil) + return client.Services{ + Configservice: m, + } +} + +func TestConfigurationAggregators(t *testing.T) { + client.AwsMockTestHelper(t, ConfigurationAggregators(), buildConfigurationAggregators, client.TestOptions{}) +} diff --git a/plugins/source/aws/resources/services/config/remediation_configurations.go b/plugins/source/aws/resources/services/config/remediation_configurations.go new file mode 100644 index 00000000000000..5d90f1eb002f97 --- /dev/null +++ b/plugins/source/aws/resources/services/config/remediation_configurations.go @@ -0,0 +1,46 @@ +package config + +import ( + "context" + + "github.com/aws/aws-sdk-go-v2/service/configservice" + "github.com/aws/aws-sdk-go-v2/service/configservice/types" + "github.com/cloudquery/cloudquery/plugins/source/aws/client" + "github.com/cloudquery/plugin-sdk/v2/schema" + "github.com/cloudquery/plugin-sdk/v2/transformers" +) + +func RemediationConfigurations() *schema.Table { + tableName := "aws_config_remediation_configurations" + return &schema.Table{ + Name: tableName, + Description: `https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeRemediationConfigurations.html`, + Resolver: fetchRemediationConfigurations, + Multiplex: client.ServiceAccountRegionMultiplexer(tableName, "config"), + Transform: transformers.TransformWithStruct(&types.RemediationConfiguration{}, + transformers.WithPrimaryKeys("Arn")), + Columns: []schema.Column{ + client.DefaultAccountIDColumn(false), + client.DefaultRegionColumn(false), + }, + Relations: []*schema.Table{}, + } +} + +func fetchRemediationConfigurations(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { + c := meta.(*client.Client) + svc := c.Services().Configservice + + input := &configservice.DescribeRemediationConfigurationsInput{} + + // no pagination for this one + output, err := svc.DescribeRemediationConfigurations(ctx, input, func(options *configservice.Options) { + options.Region = c.Region + }) + if err != nil { + return err + } + res <- output.RemediationConfigurations + + return nil +} diff --git a/plugins/source/aws/resources/services/config/remediation_configurations_mock_test.go b/plugins/source/aws/resources/services/config/remediation_configurations_mock_test.go new file mode 100644 index 00000000000000..dc8f6b209b0df1 --- /dev/null +++ b/plugins/source/aws/resources/services/config/remediation_configurations_mock_test.go @@ -0,0 +1,31 @@ +package config + +import ( + "testing" + + "github.com/aws/aws-sdk-go-v2/service/configservice" + "github.com/aws/aws-sdk-go-v2/service/configservice/types" + "github.com/cloudquery/cloudquery/plugins/source/aws/client" + "github.com/cloudquery/cloudquery/plugins/source/aws/client/mocks" + "github.com/cloudquery/plugin-sdk/v2/faker" + "github.com/golang/mock/gomock" +) + +func buildRemediationConfigurations(t *testing.T, ctrl *gomock.Controller) client.Services { + m := mocks.NewMockConfigserviceClient(ctrl) + l := types.RemediationConfiguration{} + if err := faker.FakeObject(&l); err != nil { + t.Fatal(err) + } + m.EXPECT().DescribeRemediationConfigurations(gomock.Any(), gomock.Any(), gomock.Any()).Return( + &configservice.DescribeRemediationConfigurationsOutput{ + RemediationConfigurations: []types.RemediationConfiguration{l}, + }, nil) + return client.Services{ + Configservice: m, + } +} + +func TestRemediationConfigurations(t *testing.T) { + client.AwsMockTestHelper(t, RemediationConfigurations(), buildRemediationConfigurations, client.TestOptions{}) +} diff --git a/plugins/source/aws/resources/services/config/retention_configurations.go b/plugins/source/aws/resources/services/config/retention_configurations.go new file mode 100644 index 00000000000000..d674c9278057f3 --- /dev/null +++ b/plugins/source/aws/resources/services/config/retention_configurations.go @@ -0,0 +1,46 @@ +package config + +import ( + "context" + + "github.com/aws/aws-sdk-go-v2/service/configservice" + "github.com/aws/aws-sdk-go-v2/service/configservice/types" + "github.com/cloudquery/cloudquery/plugins/source/aws/client" + "github.com/cloudquery/plugin-sdk/v2/schema" + "github.com/cloudquery/plugin-sdk/v2/transformers" +) + +func RetentionConfigurations() *schema.Table { + tableName := "aws_config_retention_configurations" + return &schema.Table{ + Name: tableName, + Description: `https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeRetentionConfigurations.html`, + Resolver: fetchRetentionConfigurations, + Multiplex: client.ServiceAccountRegionMultiplexer(tableName, "config"), + Transform: transformers.TransformWithStruct(&types.RetentionConfiguration{}, + transformers.WithPrimaryKeys("Name")), + Columns: []schema.Column{ + client.DefaultAccountIDColumn(true), + client.DefaultRegionColumn(true), + }, + Relations: []*schema.Table{}, + } +} + +func fetchRetentionConfigurations(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { + c := meta.(*client.Client) + svc := c.Services().Configservice + + input := &configservice.DescribeRetentionConfigurationsInput{} + p := configservice.NewDescribeRetentionConfigurationsPaginator(svc, input) + for p.HasMorePages() { + response, err := p.NextPage(ctx, func(options *configservice.Options) { + options.Region = c.Region + }) + if err != nil { + return err + } + res <- response.RetentionConfigurations + } + return nil +} diff --git a/plugins/source/aws/resources/services/config/retention_configurations_mock_test.go b/plugins/source/aws/resources/services/config/retention_configurations_mock_test.go new file mode 100644 index 00000000000000..d820ff85e7e5ad --- /dev/null +++ b/plugins/source/aws/resources/services/config/retention_configurations_mock_test.go @@ -0,0 +1,31 @@ +package config + +import ( + "testing" + + "github.com/aws/aws-sdk-go-v2/service/configservice" + "github.com/aws/aws-sdk-go-v2/service/configservice/types" + "github.com/cloudquery/cloudquery/plugins/source/aws/client" + "github.com/cloudquery/cloudquery/plugins/source/aws/client/mocks" + "github.com/cloudquery/plugin-sdk/v2/faker" + "github.com/golang/mock/gomock" +) + +func buildRetentionConfigurations(t *testing.T, ctrl *gomock.Controller) client.Services { + m := mocks.NewMockConfigserviceClient(ctrl) + l := types.RetentionConfiguration{} + if err := faker.FakeObject(&l); err != nil { + t.Fatal(err) + } + m.EXPECT().DescribeRetentionConfigurations(gomock.Any(), gomock.Any(), gomock.Any()).Return( + &configservice.DescribeRetentionConfigurationsOutput{ + RetentionConfigurations: []types.RetentionConfiguration{l}, + }, nil) + return client.Services{ + Configservice: m, + } +} + +func TestRetentionConfigurations(t *testing.T) { + client.AwsMockTestHelper(t, RetentionConfigurations(), buildRetentionConfigurations, client.TestOptions{}) +} From 25ed82a3a5eae0bd894689e38e58b5134d789677 Mon Sep 17 00:00:00 2001 From: Herman Schaaf Date: Tue, 2 May 2023 12:31:55 +0100 Subject: [PATCH 02/10] AWS config --- plugins/source/aws/resources/plugin/tables.go | 1 - .../source/aws/resources/services/config/config_rules.go | 1 + .../resources/services/config/config_rules_mock_test.go | 1 + .../services/config/remediation_configurations.go | 7 +++++-- .../config/remediation_configurations_mock_test.go | 7 +------ 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/plugins/source/aws/resources/plugin/tables.go b/plugins/source/aws/resources/plugin/tables.go index 3df1d24897369e..23417b95c09dd9 100644 --- a/plugins/source/aws/resources/plugin/tables.go +++ b/plugins/source/aws/resources/plugin/tables.go @@ -180,7 +180,6 @@ func tables() []*schema.Table { config.ConfigurationRecorders(), config.ConformancePacks(), config.DeliveryChannels(), - config.RemediationConfigurations(), config.RetentionConfigurations(), costexplorer.ThirtyDayCost(), costexplorer.ThirtyDayCostForecast(), diff --git a/plugins/source/aws/resources/services/config/config_rules.go b/plugins/source/aws/resources/services/config/config_rules.go index 19f921d782e36c..b0cc4c359b49a0 100644 --- a/plugins/source/aws/resources/services/config/config_rules.go +++ b/plugins/source/aws/resources/services/config/config_rules.go @@ -33,6 +33,7 @@ func ConfigRules() *schema.Table { Relations: []*schema.Table{ configRuleCompliances(), + remediationConfigurations(), }, } } diff --git a/plugins/source/aws/resources/services/config/config_rules_mock_test.go b/plugins/source/aws/resources/services/config/config_rules_mock_test.go index d3660f40f31c69..f5da9d964af8c1 100644 --- a/plugins/source/aws/resources/services/config/config_rules_mock_test.go +++ b/plugins/source/aws/resources/services/config/config_rules_mock_test.go @@ -29,6 +29,7 @@ func buildConfigRules(t *testing.T, ctrl *gomock.Controller) client.Services { &configservice.DescribeComplianceByConfigRuleOutput{ ComplianceByConfigRules: []types.ComplianceByConfigRule{sl}, }, nil) + buildRemediationConfigurations(t, m) return client.Services{ Configservice: m, } diff --git a/plugins/source/aws/resources/services/config/remediation_configurations.go b/plugins/source/aws/resources/services/config/remediation_configurations.go index 5d90f1eb002f97..f445dd591db033 100644 --- a/plugins/source/aws/resources/services/config/remediation_configurations.go +++ b/plugins/source/aws/resources/services/config/remediation_configurations.go @@ -10,7 +10,7 @@ import ( "github.com/cloudquery/plugin-sdk/v2/transformers" ) -func RemediationConfigurations() *schema.Table { +func remediationConfigurations() *schema.Table { tableName := "aws_config_remediation_configurations" return &schema.Table{ Name: tableName, @@ -31,7 +31,10 @@ func fetchRemediationConfigurations(ctx context.Context, meta schema.ClientMeta, c := meta.(*client.Client) svc := c.Services().Configservice - input := &configservice.DescribeRemediationConfigurationsInput{} + configRule := parent.Item.(types.ConfigRule).ConfigRuleName + input := &configservice.DescribeRemediationConfigurationsInput{ + ConfigRuleNames: []string{*configRule}, + } // no pagination for this one output, err := svc.DescribeRemediationConfigurations(ctx, input, func(options *configservice.Options) { diff --git a/plugins/source/aws/resources/services/config/remediation_configurations_mock_test.go b/plugins/source/aws/resources/services/config/remediation_configurations_mock_test.go index dc8f6b209b0df1..fe6e070985ad4f 100644 --- a/plugins/source/aws/resources/services/config/remediation_configurations_mock_test.go +++ b/plugins/source/aws/resources/services/config/remediation_configurations_mock_test.go @@ -11,8 +11,7 @@ import ( "github.com/golang/mock/gomock" ) -func buildRemediationConfigurations(t *testing.T, ctrl *gomock.Controller) client.Services { - m := mocks.NewMockConfigserviceClient(ctrl) +func buildRemediationConfigurations(t *testing.T, m *mocks.MockConfigserviceClient) client.Services { l := types.RemediationConfiguration{} if err := faker.FakeObject(&l); err != nil { t.Fatal(err) @@ -25,7 +24,3 @@ func buildRemediationConfigurations(t *testing.T, ctrl *gomock.Controller) clien Configservice: m, } } - -func TestRemediationConfigurations(t *testing.T) { - client.AwsMockTestHelper(t, RemediationConfigurations(), buildRemediationConfigurations, client.TestOptions{}) -} From 250749b190820e978c251ff82da19c6c6c7fba23 Mon Sep 17 00:00:00 2001 From: Herman Schaaf Date: Tue, 2 May 2023 12:32:53 +0100 Subject: [PATCH 03/10] Undo --- .../source/aws/resources/services/cloudtrail/events.go | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/plugins/source/aws/resources/services/cloudtrail/events.go b/plugins/source/aws/resources/services/cloudtrail/events.go index 15a83b58d1198a..c1f7bd1d00de1d 100644 --- a/plugins/source/aws/resources/services/cloudtrail/events.go +++ b/plugins/source/aws/resources/services/cloudtrail/events.go @@ -46,14 +46,7 @@ func fetchCloudtrailEvents(ctx context.Context, meta schema.ClientMeta, parent * cl := meta.(*client.Client) svc := cl.Services().Cloudtrail - le := &cloudtrail.LookupEventsInput{ - StartTime: nil, - EndTime: nil, - EventCategory: "", - LookupAttributes: nil, - MaxResults: nil, - NextToken: nil, - } + le := &cloudtrail.LookupEventsInput{} if cl.Backend != nil { value, err := cl.Backend.Get(ctx, tableName, cl.ID()) From 1abbe52d07814dd526d0fdf6e672daeaa8e3287e Mon Sep 17 00:00:00 2001 From: Herman Schaaf Date: Tue, 2 May 2023 12:34:05 +0100 Subject: [PATCH 04/10] Update docs --- plugins/source/aws/docs/tables/README.md | 3 ++ .../pages/docs/plugins/sources/aws/tables.md | 3 ++ website/tables/aws/aws_config_config_rules.md | 1 + .../aws_config_configuration_aggregators.md | 26 ++++++++++++++ .../aws_config_remediation_configurations.md | 34 +++++++++++++++++++ .../aws_config_retention_configurations.md | 20 +++++++++++ 6 files changed, 87 insertions(+) create mode 100644 website/tables/aws/aws_config_configuration_aggregators.md create mode 100644 website/tables/aws/aws_config_remediation_configurations.md create mode 100644 website/tables/aws/aws_config_retention_configurations.md diff --git a/plugins/source/aws/docs/tables/README.md b/plugins/source/aws/docs/tables/README.md index 0bcd9e24793f95..b0fe543c787db1 100644 --- a/plugins/source/aws/docs/tables/README.md +++ b/plugins/source/aws/docs/tables/README.md @@ -123,11 +123,14 @@ - [aws_computeoptimizer_lambda_function_recommendations](../../../../../website/tables/aws/aws_computeoptimizer_lambda_function_recommendations.md) - [aws_config_config_rules](../../../../../website/tables/aws/aws_config_config_rules.md) - [aws_config_config_rule_compliances](../../../../../website/tables/aws/aws_config_config_rule_compliances.md) + - [aws_config_remediation_configurations](../../../../../website/tables/aws/aws_config_remediation_configurations.md) +- [aws_config_configuration_aggregators](../../../../../website/tables/aws/aws_config_configuration_aggregators.md) - [aws_config_configuration_recorders](../../../../../website/tables/aws/aws_config_configuration_recorders.md) - [aws_config_conformance_packs](../../../../../website/tables/aws/aws_config_conformance_packs.md) - [aws_config_conformance_pack_rule_compliances](../../../../../website/tables/aws/aws_config_conformance_pack_rule_compliances.md) - [aws_config_delivery_channels](../../../../../website/tables/aws/aws_config_delivery_channels.md) - [aws_config_delivery_channel_statuses](../../../../../website/tables/aws/aws_config_delivery_channel_statuses.md) +- [aws_config_retention_configurations](../../../../../website/tables/aws/aws_config_retention_configurations.md) - [aws_costexplorer_cost_30d](../../../../../website/tables/aws/aws_costexplorer_cost_30d.md) - [aws_costexplorer_cost_forecast_30d](../../../../../website/tables/aws/aws_costexplorer_cost_forecast_30d.md) - [aws_dax_clusters](../../../../../website/tables/aws/aws_dax_clusters.md) diff --git a/website/pages/docs/plugins/sources/aws/tables.md b/website/pages/docs/plugins/sources/aws/tables.md index 226ff47dcbc70f..78271d14ab80cb 100644 --- a/website/pages/docs/plugins/sources/aws/tables.md +++ b/website/pages/docs/plugins/sources/aws/tables.md @@ -123,11 +123,14 @@ - [aws_computeoptimizer_lambda_function_recommendations](tables/aws_computeoptimizer_lambda_function_recommendations) - [aws_config_config_rules](tables/aws_config_config_rules) - [aws_config_config_rule_compliances](tables/aws_config_config_rule_compliances) + - [aws_config_remediation_configurations](tables/aws_config_remediation_configurations) +- [aws_config_configuration_aggregators](tables/aws_config_configuration_aggregators) - [aws_config_configuration_recorders](tables/aws_config_configuration_recorders) - [aws_config_conformance_packs](tables/aws_config_conformance_packs) - [aws_config_conformance_pack_rule_compliances](tables/aws_config_conformance_pack_rule_compliances) - [aws_config_delivery_channels](tables/aws_config_delivery_channels) - [aws_config_delivery_channel_statuses](tables/aws_config_delivery_channel_statuses) +- [aws_config_retention_configurations](tables/aws_config_retention_configurations) - [aws_costexplorer_cost_30d](tables/aws_costexplorer_cost_30d) - [aws_costexplorer_cost_forecast_30d](tables/aws_costexplorer_cost_forecast_30d) - [aws_dax_clusters](tables/aws_dax_clusters) diff --git a/website/tables/aws/aws_config_config_rules.md b/website/tables/aws/aws_config_config_rules.md index 08f77241cc433a..39cd369598ca7f 100644 --- a/website/tables/aws/aws_config_config_rules.md +++ b/website/tables/aws/aws_config_config_rules.md @@ -10,6 +10,7 @@ The primary key for this table is **arn**. The following tables depend on aws_config_config_rules: - [aws_config_config_rule_compliances](aws_config_config_rule_compliances) + - [aws_config_remediation_configurations](aws_config_remediation_configurations) ## Columns diff --git a/website/tables/aws/aws_config_configuration_aggregators.md b/website/tables/aws/aws_config_configuration_aggregators.md new file mode 100644 index 00000000000000..ede82a52e298d5 --- /dev/null +++ b/website/tables/aws/aws_config_configuration_aggregators.md @@ -0,0 +1,26 @@ +# Table: aws_config_configuration_aggregators + +This table shows data for Config Configuration Aggregators. + +https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeConfigurationAggregators.html + +The primary key for this table is **arn**. + +## Columns + +| Name | Type | +| ------------- | ------------- | +|_cq_source_name|String| +|_cq_sync_time|Timestamp| +|_cq_id|UUID| +|_cq_parent_id|UUID| +|account_id|String| +|region|String| +|arn (PK)|String| +|account_aggregation_sources|JSON| +|configuration_aggregator_arn|String| +|configuration_aggregator_name|String| +|created_by|String| +|creation_time|Timestamp| +|last_updated_time|Timestamp| +|organization_aggregation_source|JSON| \ No newline at end of file diff --git a/website/tables/aws/aws_config_remediation_configurations.md b/website/tables/aws/aws_config_remediation_configurations.md new file mode 100644 index 00000000000000..7a140d00b73a83 --- /dev/null +++ b/website/tables/aws/aws_config_remediation_configurations.md @@ -0,0 +1,34 @@ +# Table: aws_config_remediation_configurations + +This table shows data for Config Remediation Configurations. + +https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeRemediationConfigurations.html + +The primary key for this table is **arn**. + +## Relations + +This table depends on [aws_config_config_rules](aws_config_config_rules). + +## Columns + +| Name | Type | +| ------------- | ------------- | +|_cq_source_name|String| +|_cq_sync_time|Timestamp| +|_cq_id|UUID| +|_cq_parent_id|UUID| +|account_id|String| +|region|String| +|config_rule_name|String| +|target_id|String| +|target_type|String| +|arn (PK)|String| +|automatic|Bool| +|created_by_service|String| +|execution_controls|JSON| +|maximum_automatic_attempts|Int| +|parameters|JSON| +|resource_type|String| +|retry_attempt_seconds|Int| +|target_version|String| \ No newline at end of file diff --git a/website/tables/aws/aws_config_retention_configurations.md b/website/tables/aws/aws_config_retention_configurations.md new file mode 100644 index 00000000000000..fb89b0c572ab2b --- /dev/null +++ b/website/tables/aws/aws_config_retention_configurations.md @@ -0,0 +1,20 @@ +# Table: aws_config_retention_configurations + +This table shows data for Config Retention Configurations. + +https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeRetentionConfigurations.html + +The composite primary key for this table is (**account_id**, **region**, **name**). + +## 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| +|name (PK)|String| +|retention_period_in_days|Int| \ No newline at end of file From 901abbbda91520e3dec16a6b7c6c33cde42dff24 Mon Sep 17 00:00:00 2001 From: Herman Schaaf Date: Tue, 2 May 2023 15:44:51 +0100 Subject: [PATCH 05/10] Add aws_config_config_rule_compliance_details --- .../config/config_rule_compliance_details.go | 65 +++++++++++++++++++ ...onfig_rule_compliance_details_mock_test.go | 26 ++++++++ .../resources/services/config/config_rules.go | 4 +- .../services/config/config_rules_mock_test.go | 1 + .../config/configuration_aggregators.go | 3 +- .../config/retention_configurations.go | 3 +- 6 files changed, 96 insertions(+), 6 deletions(-) create mode 100644 plugins/source/aws/resources/services/config/config_rule_compliance_details.go create mode 100644 plugins/source/aws/resources/services/config/config_rule_compliance_details_mock_test.go diff --git a/plugins/source/aws/resources/services/config/config_rule_compliance_details.go b/plugins/source/aws/resources/services/config/config_rule_compliance_details.go new file mode 100644 index 00000000000000..4f0caf8e7eb98c --- /dev/null +++ b/plugins/source/aws/resources/services/config/config_rule_compliance_details.go @@ -0,0 +1,65 @@ +package config + +import ( + "context" + + "github.com/aws/aws-sdk-go-v2/service/configservice" + "github.com/aws/aws-sdk-go-v2/service/configservice/types" + "github.com/cloudquery/cloudquery/plugins/source/aws/client" + "github.com/cloudquery/plugin-sdk/v2/schema" + "github.com/cloudquery/plugin-sdk/v2/transformers" +) + +func configRuleComplianceDetails() *schema.Table { + tableName := "aws_config_config_rule_compliance_details" + return &schema.Table{ + Name: tableName, + Description: `https://docs.aws.amazon.com/config/latest/APIReference/API_GetComplianceDetailsByConfigRule.html`, + Resolver: fetchConfigConfigRuleComplianceDetails, + Multiplex: client.ServiceAccountRegionMultiplexer(tableName, "config"), + // no primary key because all the relevant candidate fields can either be null or are not + // uniquely identifying of a resource. For example, ResourceEvaluationId can be null, + // and so can ResultToken. However, hashing the entire object can work because a combination of + // all fields must be unique. + Transform: transformers.TransformWithStruct(&types.EvaluationResult{}), + Columns: []schema.Column{ + client.DefaultAccountIDColumn(true), + client.DefaultRegionColumn(true), + { + Name: "config_rule_name", + Type: schema.TypeString, + Resolver: schema.ParentColumnResolver("config_rule_name"), + }, + { + Name: "_evaluation_hash", + Type: schema.TypeString, + Resolver: client.ResolveObjectHash, + CreationOptions: schema.ColumnCreationOptions{ + PrimaryKey: true, + }, + }, + }, + } +} + +func fetchConfigConfigRuleComplianceDetails(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { + ruleDetail := parent.Item.(types.ConfigRule) + c := meta.(*client.Client) + svc := c.Services().Configservice + + input := &configservice.GetComplianceDetailsByConfigRuleInput{ + ConfigRuleName: ruleDetail.ConfigRuleName, + Limit: 100, + } + p := configservice.NewGetComplianceDetailsByConfigRulePaginator(svc, input) + for p.HasMorePages() { + response, err := p.NextPage(ctx, func(options *configservice.Options) { + options.Region = c.Region + }) + if err != nil { + return err + } + res <- response.EvaluationResults + } + return nil +} diff --git a/plugins/source/aws/resources/services/config/config_rule_compliance_details_mock_test.go b/plugins/source/aws/resources/services/config/config_rule_compliance_details_mock_test.go new file mode 100644 index 00000000000000..f481d47f806c7b --- /dev/null +++ b/plugins/source/aws/resources/services/config/config_rule_compliance_details_mock_test.go @@ -0,0 +1,26 @@ +package config + +import ( + "testing" + + "github.com/aws/aws-sdk-go-v2/service/configservice" + "github.com/aws/aws-sdk-go-v2/service/configservice/types" + "github.com/cloudquery/cloudquery/plugins/source/aws/client" + "github.com/cloudquery/cloudquery/plugins/source/aws/client/mocks" + "github.com/cloudquery/plugin-sdk/v2/faker" + "github.com/golang/mock/gomock" +) + +func buildComplianceDetails(t *testing.T, m *mocks.MockConfigserviceClient) client.Services { + l := types.EvaluationResult{} + if err := faker.FakeObject(&l); err != nil { + t.Fatal(err) + } + m.EXPECT().GetComplianceDetailsByConfigRule(gomock.Any(), gomock.Any(), gomock.Any()).Return( + &configservice.GetComplianceDetailsByConfigRuleOutput{ + EvaluationResults: []types.EvaluationResult{l}, + }, nil) + return client.Services{ + Configservice: m, + } +} diff --git a/plugins/source/aws/resources/services/config/config_rules.go b/plugins/source/aws/resources/services/config/config_rules.go index b0cc4c359b49a0..9056c341fa38c8 100644 --- a/plugins/source/aws/resources/services/config/config_rules.go +++ b/plugins/source/aws/resources/services/config/config_rules.go @@ -34,6 +34,7 @@ func ConfigRules() *schema.Table { Relations: []*schema.Table{ configRuleCompliances(), remediationConfigurations(), + configRuleComplianceDetails(), }, } } @@ -42,8 +43,7 @@ func fetchConfigConfigRules(ctx context.Context, meta schema.ClientMeta, parent c := meta.(*client.Client) svc := c.Services().Configservice - input := &configservice.DescribeConfigRulesInput{} - p := configservice.NewDescribeConfigRulesPaginator(svc, input) + p := configservice.NewDescribeConfigRulesPaginator(svc, nil) for p.HasMorePages() { response, err := p.NextPage(ctx, func(options *configservice.Options) { options.Region = c.Region diff --git a/plugins/source/aws/resources/services/config/config_rules_mock_test.go b/plugins/source/aws/resources/services/config/config_rules_mock_test.go index f5da9d964af8c1..787fd308833a5a 100644 --- a/plugins/source/aws/resources/services/config/config_rules_mock_test.go +++ b/plugins/source/aws/resources/services/config/config_rules_mock_test.go @@ -30,6 +30,7 @@ func buildConfigRules(t *testing.T, ctrl *gomock.Controller) client.Services { ComplianceByConfigRules: []types.ComplianceByConfigRule{sl}, }, nil) buildRemediationConfigurations(t, m) + buildComplianceDetails(t, m) return client.Services{ Configservice: m, } diff --git a/plugins/source/aws/resources/services/config/configuration_aggregators.go b/plugins/source/aws/resources/services/config/configuration_aggregators.go index 173b85347cc8a6..6ffd61892b8435 100644 --- a/plugins/source/aws/resources/services/config/configuration_aggregators.go +++ b/plugins/source/aws/resources/services/config/configuration_aggregators.go @@ -38,8 +38,7 @@ func fetchConfigurationAggregators(ctx context.Context, meta schema.ClientMeta, c := meta.(*client.Client) svc := c.Services().Configservice - input := &configservice.DescribeConfigurationAggregatorsInput{} - p := configservice.NewDescribeConfigurationAggregatorsPaginator(svc, input) + p := configservice.NewDescribeConfigurationAggregatorsPaginator(svc, nil) for p.HasMorePages() { response, err := p.NextPage(ctx, func(options *configservice.Options) { options.Region = c.Region diff --git a/plugins/source/aws/resources/services/config/retention_configurations.go b/plugins/source/aws/resources/services/config/retention_configurations.go index d674c9278057f3..52ed96a346f335 100644 --- a/plugins/source/aws/resources/services/config/retention_configurations.go +++ b/plugins/source/aws/resources/services/config/retention_configurations.go @@ -31,8 +31,7 @@ func fetchRetentionConfigurations(ctx context.Context, meta schema.ClientMeta, p c := meta.(*client.Client) svc := c.Services().Configservice - input := &configservice.DescribeRetentionConfigurationsInput{} - p := configservice.NewDescribeRetentionConfigurationsPaginator(svc, input) + p := configservice.NewDescribeRetentionConfigurationsPaginator(svc, nil) for p.HasMorePages() { response, err := p.NextPage(ctx, func(options *configservice.Options) { options.Region = c.Region From 30422cc7f37fe3ea9bad3024cd0ad29e54c3b9a4 Mon Sep 17 00:00:00 2001 From: Herman Schaaf Date: Tue, 2 May 2023 15:49:22 +0100 Subject: [PATCH 06/10] Add docs --- plugins/source/aws/docs/tables/README.md | 1 + .../pages/docs/plugins/sources/aws/tables.md | 1 + ...s_config_config_rule_compliance_details.md | 30 +++++++++++++++++++ website/tables/aws/aws_config_config_rules.md | 1 + 4 files changed, 33 insertions(+) create mode 100644 website/tables/aws/aws_config_config_rule_compliance_details.md diff --git a/plugins/source/aws/docs/tables/README.md b/plugins/source/aws/docs/tables/README.md index b0fe543c787db1..f4325b8ea11c16 100644 --- a/plugins/source/aws/docs/tables/README.md +++ b/plugins/source/aws/docs/tables/README.md @@ -122,6 +122,7 @@ - [aws_computeoptimizer_enrollment_statuses](../../../../../website/tables/aws/aws_computeoptimizer_enrollment_statuses.md) - [aws_computeoptimizer_lambda_function_recommendations](../../../../../website/tables/aws/aws_computeoptimizer_lambda_function_recommendations.md) - [aws_config_config_rules](../../../../../website/tables/aws/aws_config_config_rules.md) + - [aws_config_config_rule_compliance_details](../../../../../website/tables/aws/aws_config_config_rule_compliance_details.md) - [aws_config_config_rule_compliances](../../../../../website/tables/aws/aws_config_config_rule_compliances.md) - [aws_config_remediation_configurations](../../../../../website/tables/aws/aws_config_remediation_configurations.md) - [aws_config_configuration_aggregators](../../../../../website/tables/aws/aws_config_configuration_aggregators.md) diff --git a/website/pages/docs/plugins/sources/aws/tables.md b/website/pages/docs/plugins/sources/aws/tables.md index 78271d14ab80cb..86022891bdea03 100644 --- a/website/pages/docs/plugins/sources/aws/tables.md +++ b/website/pages/docs/plugins/sources/aws/tables.md @@ -122,6 +122,7 @@ - [aws_computeoptimizer_enrollment_statuses](tables/aws_computeoptimizer_enrollment_statuses) - [aws_computeoptimizer_lambda_function_recommendations](tables/aws_computeoptimizer_lambda_function_recommendations) - [aws_config_config_rules](tables/aws_config_config_rules) + - [aws_config_config_rule_compliance_details](tables/aws_config_config_rule_compliance_details) - [aws_config_config_rule_compliances](tables/aws_config_config_rule_compliances) - [aws_config_remediation_configurations](tables/aws_config_remediation_configurations) - [aws_config_configuration_aggregators](tables/aws_config_configuration_aggregators) diff --git a/website/tables/aws/aws_config_config_rule_compliance_details.md b/website/tables/aws/aws_config_config_rule_compliance_details.md new file mode 100644 index 00000000000000..ce1fea2ce81a51 --- /dev/null +++ b/website/tables/aws/aws_config_config_rule_compliance_details.md @@ -0,0 +1,30 @@ +# Table: aws_config_config_rule_compliance_details + +This table shows data for Config Config Rule Compliance Details. + +https://docs.aws.amazon.com/config/latest/APIReference/API_GetComplianceDetailsByConfigRule.html + +The composite primary key for this table is (**account_id**, **region**, **_evaluation_hash**). + +## Relations + +This table depends on [aws_config_config_rules](aws_config_config_rules). + +## 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| +|config_rule_name|String| +|_evaluation_hash (PK)|String| +|annotation|String| +|compliance_type|String| +|config_rule_invoked_time|Timestamp| +|evaluation_result_identifier|JSON| +|result_recorded_time|Timestamp| +|result_token|String| \ No newline at end of file diff --git a/website/tables/aws/aws_config_config_rules.md b/website/tables/aws/aws_config_config_rules.md index 39cd369598ca7f..1b7c3f6fcea455 100644 --- a/website/tables/aws/aws_config_config_rules.md +++ b/website/tables/aws/aws_config_config_rules.md @@ -9,6 +9,7 @@ The primary key for this table is **arn**. ## Relations The following tables depend on aws_config_config_rules: + - [aws_config_config_rule_compliance_details](aws_config_config_rule_compliance_details) - [aws_config_config_rule_compliances](aws_config_config_rule_compliances) - [aws_config_remediation_configurations](aws_config_remediation_configurations) From 0e5a3d36b7a87bb77fa454f063e2707f7743e4a7 Mon Sep 17 00:00:00 2001 From: Herman Schaaf Date: Wed, 3 May 2023 09:37:27 +0100 Subject: [PATCH 07/10] Update plugins/source/aws/resources/services/config/config_rule_compliance_details.go Co-authored-by: Kemal <223029+disq@users.noreply.github.com> --- .../resources/services/config/config_rule_compliance_details.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/source/aws/resources/services/config/config_rule_compliance_details.go b/plugins/source/aws/resources/services/config/config_rule_compliance_details.go index 4f0caf8e7eb98c..76214138642c5a 100644 --- a/plugins/source/aws/resources/services/config/config_rule_compliance_details.go +++ b/plugins/source/aws/resources/services/config/config_rule_compliance_details.go @@ -14,7 +14,7 @@ func configRuleComplianceDetails() *schema.Table { tableName := "aws_config_config_rule_compliance_details" return &schema.Table{ Name: tableName, - Description: `https://docs.aws.amazon.com/config/latest/APIReference/API_GetComplianceDetailsByConfigRule.html`, + Description: `https://docs.aws.amazon.com/config/latest/APIReference/API_EvaluationResult.html`, Resolver: fetchConfigConfigRuleComplianceDetails, Multiplex: client.ServiceAccountRegionMultiplexer(tableName, "config"), // no primary key because all the relevant candidate fields can either be null or are not From eeb9368348f05c026a89d2ce405bb8944302a720 Mon Sep 17 00:00:00 2001 From: cq-bot Date: Wed, 3 May 2023 08:45:30 +0000 Subject: [PATCH 08/10] chore: Update code and docs --- website/tables/aws/aws_config_config_rule_compliance_details.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/tables/aws/aws_config_config_rule_compliance_details.md b/website/tables/aws/aws_config_config_rule_compliance_details.md index ce1fea2ce81a51..a292f3c2b9fab4 100644 --- a/website/tables/aws/aws_config_config_rule_compliance_details.md +++ b/website/tables/aws/aws_config_config_rule_compliance_details.md @@ -2,7 +2,7 @@ This table shows data for Config Config Rule Compliance Details. -https://docs.aws.amazon.com/config/latest/APIReference/API_GetComplianceDetailsByConfigRule.html +https://docs.aws.amazon.com/config/latest/APIReference/API_EvaluationResult.html The composite primary key for this table is (**account_id**, **region**, **_evaluation_hash**). From 127b174b425b8b1cd3a7b1c39f601b43133a300d Mon Sep 17 00:00:00 2001 From: Herman Schaaf Date: Wed, 3 May 2023 10:28:35 +0100 Subject: [PATCH 09/10] Update docs --- .../services/config/config_rule_compliance_details.go | 10 +--------- .../aws/resources/services/config/config_rules.go | 2 +- .../services/config/configuration_aggregators.go | 2 +- .../aws/resources/services/config/delivery_channels.go | 2 +- .../services/config/remediation_configurations.go | 2 +- .../services/config/retention_configurations.go | 2 +- .../aws/aws_config_config_rule_compliance_details.md | 5 ++--- website/tables/aws/aws_config_config_rules.md | 2 +- .../tables/aws/aws_config_configuration_aggregators.md | 2 +- website/tables/aws/aws_config_delivery_channels.md | 2 +- .../aws/aws_config_remediation_configurations.md | 2 +- .../tables/aws/aws_config_retention_configurations.md | 2 +- 12 files changed, 13 insertions(+), 22 deletions(-) diff --git a/plugins/source/aws/resources/services/config/config_rule_compliance_details.go b/plugins/source/aws/resources/services/config/config_rule_compliance_details.go index 4f0caf8e7eb98c..2efe884fe852dd 100644 --- a/plugins/source/aws/resources/services/config/config_rule_compliance_details.go +++ b/plugins/source/aws/resources/services/config/config_rule_compliance_details.go @@ -14,7 +14,7 @@ func configRuleComplianceDetails() *schema.Table { tableName := "aws_config_config_rule_compliance_details" return &schema.Table{ Name: tableName, - Description: `https://docs.aws.amazon.com/config/latest/APIReference/API_GetComplianceDetailsByConfigRule.html`, + Description: `https://docs.aws.amazon.com/config/latest/APIReference/API_EvaluationResult.html`, Resolver: fetchConfigConfigRuleComplianceDetails, Multiplex: client.ServiceAccountRegionMultiplexer(tableName, "config"), // no primary key because all the relevant candidate fields can either be null or are not @@ -30,14 +30,6 @@ func configRuleComplianceDetails() *schema.Table { Type: schema.TypeString, Resolver: schema.ParentColumnResolver("config_rule_name"), }, - { - Name: "_evaluation_hash", - Type: schema.TypeString, - Resolver: client.ResolveObjectHash, - CreationOptions: schema.ColumnCreationOptions{ - PrimaryKey: true, - }, - }, }, } } diff --git a/plugins/source/aws/resources/services/config/config_rules.go b/plugins/source/aws/resources/services/config/config_rules.go index 899a87f1827e0b..f17a958a60ac28 100644 --- a/plugins/source/aws/resources/services/config/config_rules.go +++ b/plugins/source/aws/resources/services/config/config_rules.go @@ -14,7 +14,7 @@ func ConfigRules() *schema.Table { tableName := "aws_config_config_rules" return &schema.Table{ Name: tableName, - Description: `https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeConfigRules.html`, + Description: `https://docs.aws.amazon.com/config/latest/APIReference/API_ConfigRule.html`, Resolver: fetchConfigConfigRules, Multiplex: client.ServiceAccountRegionMultiplexer(tableName, "config"), Transform: transformers.TransformWithStruct(&types.ConfigRule{}), diff --git a/plugins/source/aws/resources/services/config/configuration_aggregators.go b/plugins/source/aws/resources/services/config/configuration_aggregators.go index 6ffd61892b8435..a6095d5c987628 100644 --- a/plugins/source/aws/resources/services/config/configuration_aggregators.go +++ b/plugins/source/aws/resources/services/config/configuration_aggregators.go @@ -14,7 +14,7 @@ func ConfigurationAggregators() *schema.Table { tableName := "aws_config_configuration_aggregators" return &schema.Table{ Name: tableName, - Description: `https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeConfigurationAggregators.html`, + Description: `https://docs.aws.amazon.com/config/latest/APIReference/API_ConfigurationAggregator.html`, Resolver: fetchConfigurationAggregators, Multiplex: client.ServiceAccountRegionMultiplexer(tableName, "config"), Transform: transformers.TransformWithStruct(&types.ConfigurationAggregator{}), diff --git a/plugins/source/aws/resources/services/config/delivery_channels.go b/plugins/source/aws/resources/services/config/delivery_channels.go index 67e21d153f313b..64f81842683e21 100644 --- a/plugins/source/aws/resources/services/config/delivery_channels.go +++ b/plugins/source/aws/resources/services/config/delivery_channels.go @@ -14,7 +14,7 @@ func DeliveryChannels() *schema.Table { tableName := "aws_config_delivery_channels" return &schema.Table{ Name: tableName, - Description: `https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeDeliveryChannels.html`, + Description: `https://docs.aws.amazon.com/config/latest/APIReference/API_DeliveryChannel.html`, Resolver: fetchDeliveryChannels, Multiplex: client.ServiceAccountRegionMultiplexer(tableName, "config"), Transform: transformers.TransformWithStruct(&types.DeliveryChannel{}, transformers.WithPrimaryKeys("Name")), diff --git a/plugins/source/aws/resources/services/config/remediation_configurations.go b/plugins/source/aws/resources/services/config/remediation_configurations.go index f445dd591db033..5d14d87159ca28 100644 --- a/plugins/source/aws/resources/services/config/remediation_configurations.go +++ b/plugins/source/aws/resources/services/config/remediation_configurations.go @@ -14,7 +14,7 @@ func remediationConfigurations() *schema.Table { tableName := "aws_config_remediation_configurations" return &schema.Table{ Name: tableName, - Description: `https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeRemediationConfigurations.html`, + Description: `https://docs.aws.amazon.com/config/latest/APIReference/API_RemediationConfiguration.html`, Resolver: fetchRemediationConfigurations, Multiplex: client.ServiceAccountRegionMultiplexer(tableName, "config"), Transform: transformers.TransformWithStruct(&types.RemediationConfiguration{}, diff --git a/plugins/source/aws/resources/services/config/retention_configurations.go b/plugins/source/aws/resources/services/config/retention_configurations.go index 52ed96a346f335..aa66a7becac6a4 100644 --- a/plugins/source/aws/resources/services/config/retention_configurations.go +++ b/plugins/source/aws/resources/services/config/retention_configurations.go @@ -14,7 +14,7 @@ func RetentionConfigurations() *schema.Table { tableName := "aws_config_retention_configurations" return &schema.Table{ Name: tableName, - Description: `https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeRetentionConfigurations.html`, + Description: `https://docs.aws.amazon.com/config/latest/APIReference/API_RetentionConfiguration.html`, Resolver: fetchRetentionConfigurations, Multiplex: client.ServiceAccountRegionMultiplexer(tableName, "config"), Transform: transformers.TransformWithStruct(&types.RetentionConfiguration{}, diff --git a/website/tables/aws/aws_config_config_rule_compliance_details.md b/website/tables/aws/aws_config_config_rule_compliance_details.md index ce1fea2ce81a51..439a8f69e2da42 100644 --- a/website/tables/aws/aws_config_config_rule_compliance_details.md +++ b/website/tables/aws/aws_config_config_rule_compliance_details.md @@ -2,9 +2,9 @@ This table shows data for Config Config Rule Compliance Details. -https://docs.aws.amazon.com/config/latest/APIReference/API_GetComplianceDetailsByConfigRule.html +https://docs.aws.amazon.com/config/latest/APIReference/API_EvaluationResult.html -The composite primary key for this table is (**account_id**, **region**, **_evaluation_hash**). +The composite primary key for this table is (**account_id**, **region**). ## Relations @@ -21,7 +21,6 @@ This table depends on [aws_config_config_rules](aws_config_config_rules). |account_id (PK)|String| |region (PK)|String| |config_rule_name|String| -|_evaluation_hash (PK)|String| |annotation|String| |compliance_type|String| |config_rule_invoked_time|Timestamp| diff --git a/website/tables/aws/aws_config_config_rules.md b/website/tables/aws/aws_config_config_rules.md index 1b7c3f6fcea455..2e9fd6a452b0a7 100644 --- a/website/tables/aws/aws_config_config_rules.md +++ b/website/tables/aws/aws_config_config_rules.md @@ -2,7 +2,7 @@ This table shows data for Config Config Rules. -https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeConfigRules.html +https://docs.aws.amazon.com/config/latest/APIReference/API_ConfigRule.html The primary key for this table is **arn**. diff --git a/website/tables/aws/aws_config_configuration_aggregators.md b/website/tables/aws/aws_config_configuration_aggregators.md index ede82a52e298d5..eb6b99c1727844 100644 --- a/website/tables/aws/aws_config_configuration_aggregators.md +++ b/website/tables/aws/aws_config_configuration_aggregators.md @@ -2,7 +2,7 @@ This table shows data for Config Configuration Aggregators. -https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeConfigurationAggregators.html +https://docs.aws.amazon.com/config/latest/APIReference/API_ConfigurationAggregator.html The primary key for this table is **arn**. diff --git a/website/tables/aws/aws_config_delivery_channels.md b/website/tables/aws/aws_config_delivery_channels.md index 0444b9c2b1cc26..8cb44f857210af 100644 --- a/website/tables/aws/aws_config_delivery_channels.md +++ b/website/tables/aws/aws_config_delivery_channels.md @@ -2,7 +2,7 @@ This table shows data for Config Delivery Channels. -https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeDeliveryChannels.html +https://docs.aws.amazon.com/config/latest/APIReference/API_DeliveryChannel.html The composite primary key for this table is (**account_id**, **region**, **name**). diff --git a/website/tables/aws/aws_config_remediation_configurations.md b/website/tables/aws/aws_config_remediation_configurations.md index 7a140d00b73a83..0ffc5ba57553e5 100644 --- a/website/tables/aws/aws_config_remediation_configurations.md +++ b/website/tables/aws/aws_config_remediation_configurations.md @@ -2,7 +2,7 @@ This table shows data for Config Remediation Configurations. -https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeRemediationConfigurations.html +https://docs.aws.amazon.com/config/latest/APIReference/API_RemediationConfiguration.html The primary key for this table is **arn**. diff --git a/website/tables/aws/aws_config_retention_configurations.md b/website/tables/aws/aws_config_retention_configurations.md index fb89b0c572ab2b..5ad96776c4df41 100644 --- a/website/tables/aws/aws_config_retention_configurations.md +++ b/website/tables/aws/aws_config_retention_configurations.md @@ -2,7 +2,7 @@ This table shows data for Config Retention Configurations. -https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeRetentionConfigurations.html +https://docs.aws.amazon.com/config/latest/APIReference/API_RetentionConfiguration.html The composite primary key for this table is (**account_id**, **region**, **name**). From 28f0d1c4eb651216bbc7cd50a6c976fb174a5ac7 Mon Sep 17 00:00:00 2001 From: Herman Schaaf Date: Wed, 3 May 2023 11:00:00 +0100 Subject: [PATCH 10/10] Fix PK --- .../services/config/config_rule_compliance_details.go | 4 ++-- .../aws/aws_config_config_rule_compliance_details.md | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/source/aws/resources/services/config/config_rule_compliance_details.go b/plugins/source/aws/resources/services/config/config_rule_compliance_details.go index 2efe884fe852dd..182e913be95c51 100644 --- a/plugins/source/aws/resources/services/config/config_rule_compliance_details.go +++ b/plugins/source/aws/resources/services/config/config_rule_compliance_details.go @@ -23,8 +23,8 @@ func configRuleComplianceDetails() *schema.Table { // all fields must be unique. Transform: transformers.TransformWithStruct(&types.EvaluationResult{}), Columns: []schema.Column{ - client.DefaultAccountIDColumn(true), - client.DefaultRegionColumn(true), + client.DefaultAccountIDColumn(false), + client.DefaultRegionColumn(false), { Name: "config_rule_name", Type: schema.TypeString, diff --git a/website/tables/aws/aws_config_config_rule_compliance_details.md b/website/tables/aws/aws_config_config_rule_compliance_details.md index 439a8f69e2da42..c729d0fdf2be56 100644 --- a/website/tables/aws/aws_config_config_rule_compliance_details.md +++ b/website/tables/aws/aws_config_config_rule_compliance_details.md @@ -4,7 +4,7 @@ This table shows data for Config Config Rule Compliance Details. https://docs.aws.amazon.com/config/latest/APIReference/API_EvaluationResult.html -The composite primary key for this table is (**account_id**, **region**). +The primary key for this table is **_cq_id**. ## Relations @@ -16,10 +16,10 @@ This table depends on [aws_config_config_rules](aws_config_config_rules). | ------------- | ------------- | |_cq_source_name|String| |_cq_sync_time|Timestamp| -|_cq_id|UUID| +|_cq_id (PK)|UUID| |_cq_parent_id|UUID| -|account_id (PK)|String| -|region (PK)|String| +|account_id|String| +|region|String| |config_rule_name|String| |annotation|String| |compliance_type|String|