Skip to content

Commit 84cb081

Browse files
authored
feat(aws): Add Support for Cloudwatch Logs Resource Policy (#4883)
#### Summary <!-- Explain what problem this PR addresses --> <!--
1 parent 9619722 commit 84cb081

File tree

7 files changed

+148
-0
lines changed

7 files changed

+148
-0
lines changed

plugins/source/aws/codegen/recipes/cloudwatchlogs.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,20 @@ import (
88

99
func CloudWatchLogsResources() []*Resource {
1010
resources := []*Resource{
11+
{
12+
SubService: "resource_policies",
13+
Struct: &types.ResourcePolicy{},
14+
Description: "https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_ResourcePolicy.html",
15+
PKColumns: []string{"account_id", "region", "policy_name"},
16+
SkipFields: []string{"PolicyDocument"},
17+
ExtraColumns: append(defaultRegionalColumns, []codegen.ColumnDefinition{
18+
{
19+
Name: "policy_document",
20+
Type: schema.TypeJSON,
21+
Resolver: `schema.PathResolver("PolicyDocument")`,
22+
},
23+
}...),
24+
},
1125
{
1226
SubService: "metric_filters",
1327
Struct: &types.MetricFilter{},

plugins/source/aws/docs/tables/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
| [aws_cloudhsmv2_backups](aws_cloudhsmv2_backups.md) |
8383
| [aws_cloudtrail_trails](aws_cloudtrail_trails.md) |
8484
|[aws_cloudtrail_trail_event_selectors](aws_cloudtrail_trail_event_selectors.md) |
85+
| [aws_cloudwatchlogs_resource_policies](aws_cloudwatchlogs_resource_policies.md) |
8586
| [aws_cloudwatchlogs_metric_filters](aws_cloudwatchlogs_metric_filters.md) |
8687
| [aws_cloudwatchlogs_log_groups](aws_cloudwatchlogs_log_groups.md) |
8788
| [aws_cloudwatch_alarms](aws_cloudwatch_alarms.md) |
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Table: aws_cloudwatchlogs_resource_policies
2+
3+
https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_ResourcePolicy.html
4+
5+
The composite primary key for this table is (**account_id**, **region**, **policy_name**).
6+
7+
8+
## Columns
9+
| Name | Type |
10+
| ------------- | ------------- |
11+
|_cq_source_name|String|
12+
|_cq_sync_time|Timestamp|
13+
|_cq_id|UUID|
14+
|_cq_parent_id|UUID|
15+
|account_id (PK)|String|
16+
|region (PK)|String|
17+
|policy_document|JSON|
18+
|last_updated_time|Int|
19+
|policy_name (PK)|String|

plugins/source/aws/resources/plugin/tables.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/source/aws/resources/services/cloudwatchlogs/resource_policies.go

Lines changed: 53 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package cloudwatchlogs
2+
3+
import (
4+
"context"
5+
6+
"github.com/aws/aws-sdk-go-v2/aws"
7+
"github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs"
8+
"github.com/cloudquery/cloudquery/plugins/source/aws/client"
9+
"github.com/cloudquery/plugin-sdk/schema"
10+
)
11+
12+
func fetchCloudwatchlogsResourcePolicies(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- interface{}) error {
13+
var config cloudwatchlogs.DescribeResourcePoliciesInput
14+
c := meta.(*client.Client)
15+
svc := c.Services().Cloudwatchlogs
16+
for {
17+
response, err := svc.DescribeResourcePolicies(ctx, &config)
18+
if err != nil {
19+
return err
20+
}
21+
res <- response.ResourcePolicies
22+
if aws.ToString(response.NextToken) == "" {
23+
break
24+
}
25+
config.NextToken = response.NextToken
26+
}
27+
return nil
28+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package cloudwatchlogs
2+
3+
import (
4+
"testing"
5+
6+
"github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs"
7+
"github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs/types"
8+
"github.com/cloudquery/cloudquery/plugins/source/aws/client"
9+
"github.com/cloudquery/cloudquery/plugins/source/aws/client/mocks"
10+
"github.com/cloudquery/plugin-sdk/faker"
11+
"github.com/golang/mock/gomock"
12+
)
13+
14+
func buildResourcePolicies(t *testing.T, ctrl *gomock.Controller) client.Services {
15+
m := mocks.NewMockCloudwatchlogsClient(ctrl)
16+
rp := types.ResourcePolicy{}
17+
err := faker.FakeObject(&rp)
18+
if err != nil {
19+
t.Fatal(err)
20+
}
21+
m.EXPECT().DescribeResourcePolicies(gomock.Any(), gomock.Any(), gomock.Any()).Return(
22+
&cloudwatchlogs.DescribeResourcePoliciesOutput{
23+
ResourcePolicies: []types.ResourcePolicy{rp},
24+
}, nil)
25+
return client.Services{
26+
Cloudwatchlogs: m,
27+
}
28+
}
29+
30+
func TestResourcePolicies(t *testing.T) {
31+
client.AwsMockTestHelper(t, ResourcePolicies(), buildResourcePolicies, client.TestOptions{})
32+
}

0 commit comments

Comments
 (0)