Skip to content

Commit

Permalink
feat(aws): Support AWS Account Contacts (#4734)
Browse files Browse the repository at this point in the history

#### Summary

<!--
Explain what problem this PR addresses
-->

<!--
  • Loading branch information
bbernays committed Nov 17, 2022
1 parent 7507bae commit bdf3867
Show file tree
Hide file tree
Showing 18 changed files with 455 additions and 0 deletions.
76 changes: 76 additions & 0 deletions plugins/source/aws/client/mocks/account.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions plugins/source/aws/client/services.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions plugins/source/aws/client/services/account.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions plugins/source/aws/codegen/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
func generateResources() ([]*recipes.Resource, error) {
var resources []*recipes.Resource
resources = append(resources, recipes.AccessAnalyzerResources()...)
resources = append(resources, recipes.AccountResources()...)
resources = append(resources, recipes.ACMResources()...)
resources = append(resources, recipes.APIGatewayResources()...)
resources = append(resources, recipes.APIGatewayV2Resources()...)
Expand Down
46 changes: 46 additions & 0 deletions plugins/source/aws/codegen/recipes/account.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package recipes

import (
"github.com/aws/aws-sdk-go-v2/service/account/types"
"github.com/cloudquery/plugin-sdk/codegen"
"github.com/cloudquery/plugin-sdk/schema"
)

func AccountResources() []*Resource {
resources := []*Resource{
{
SubService: "alternate_contacts",
Struct: &types.AlternateContact{},
Description: "https://docs.aws.amazon.com/accounts/latest/reference/API_AlternateContact.html",
PKColumns: []string{"alternate_contact_type"},
ExtraColumns: []codegen.ColumnDefinition{
{
Name: "account_id",
Type: schema.TypeString,
Resolver: "client.ResolveAWSAccount",
Options: schema.ColumnCreationOptions{PrimaryKey: true},
},
},
},
{
SubService: "contacts",
Struct: &types.ContactInformation{},
Description: "https://docs.aws.amazon.com/accounts/latest/reference/API_ContactInformation.html",
ExtraColumns: []codegen.ColumnDefinition{
{
Name: "account_id",
Type: schema.TypeString,
Resolver: "client.ResolveAWSAccount",
Options: schema.ColumnCreationOptions{PrimaryKey: true},
},
},
},
}

for _, r := range resources {
r.Service = "account"
r.Multiplex = `client.AccountMultiplex`

}
return resources
}
2 changes: 2 additions & 0 deletions plugins/source/aws/codegen/services/clients.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package services

import (
"github.com/aws/aws-sdk-go-v2/service/accessanalyzer"
"github.com/aws/aws-sdk-go-v2/service/account"
"github.com/aws/aws-sdk-go-v2/service/acm"
"github.com/aws/aws-sdk-go-v2/service/apigateway"
"github.com/aws/aws-sdk-go-v2/service/apigatewayv2"
Expand Down Expand Up @@ -94,6 +95,7 @@ import (

var clients = []interface{}{
&accessanalyzer.Client{},
&account.Client{},
&acm.Client{},
&apigateway.Client{},
&apigatewayv2.Client{},
Expand Down
2 changes: 2 additions & 0 deletions plugins/source/aws/docs/tables/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
| [aws_accessanalyzer_analyzers](aws_accessanalyzer_analyzers.md) |
|[aws_accessanalyzer_analyzer_findings](aws_accessanalyzer_analyzer_findings.md) |
|[aws_accessanalyzer_analyzer_archive_rules](aws_accessanalyzer_analyzer_archive_rules.md) |
| [aws_account_alternate_contacts](aws_account_alternate_contacts.md) |
| [aws_account_contacts](aws_account_contacts.md) |
| [aws_acm_certificates](aws_acm_certificates.md) |
| [aws_apigateway_api_keys](aws_apigateway_api_keys.md) |
| [aws_apigateway_client_certificates](aws_apigateway_client_certificates.md) |
Expand Down
20 changes: 20 additions & 0 deletions plugins/source/aws/docs/tables/aws_account_alternate_contacts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Table: aws_account_alternate_contacts

https://docs.aws.amazon.com/accounts/latest/reference/API_AlternateContact.html

The composite primary key for this table is (**account_id**, **alternate_contact_type**).


## Columns
| Name | Type |
| ------------- | ------------- |
|_cq_source_name|String|
|_cq_sync_time|Timestamp|
|_cq_id|UUID|
|_cq_parent_id|UUID|
|account_id (PK)|String|
|alternate_contact_type (PK)|String|
|email_address|String|
|name|String|
|phone_number|String|
|title|String|
27 changes: 27 additions & 0 deletions plugins/source/aws/docs/tables/aws_account_contacts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Table: aws_account_contacts

https://docs.aws.amazon.com/accounts/latest/reference/API_ContactInformation.html

The primary key for this table is **account_id**.


## Columns
| Name | Type |
| ------------- | ------------- |
|_cq_source_name|String|
|_cq_sync_time|Timestamp|
|_cq_id|UUID|
|_cq_parent_id|UUID|
|account_id (PK)|String|
|address_line1|String|
|city|String|
|country_code|String|
|full_name|String|
|phone_number|String|
|postal_code|String|
|address_line2|String|
|address_line3|String|
|company_name|String|
|district_or_county|String|
|state_or_region|String|
|website_url|String|
1 change: 1 addition & 0 deletions plugins/source/aws/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ require (
github.com/aws/aws-sdk-go-v2/credentials v1.13.1
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.40
github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.17.2
github.com/aws/aws-sdk-go-v2/service/account v1.7.11
github.com/aws/aws-sdk-go-v2/service/acm v1.16.2
github.com/aws/aws-sdk-go-v2/service/apigateway v1.15.24
github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.12.22
Expand Down
2 changes: 2 additions & 0 deletions plugins/source/aws/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.16 h1:2EXB7dtGwRYIN3XQ9qwIW504DVb
github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.16/go.mod h1:XH+3h395e3WVdd6T2Z3mPxuI+x/HVtdqVOREkTiyubs=
github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.17.2 h1:G0p51FKC4VvN76vX3fIGZIcbhW9svxFmZRi99RLWAM4=
github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.17.2/go.mod h1:O769hLd/n0YUcFAfCi4g3lnpSntWCKkIFXzgi7H493s=
github.com/aws/aws-sdk-go-v2/service/account v1.7.11 h1:a/mDtQr8ALZc8g+ZLgykkuN8/7GynTEb+nIsR67bwyQ=
github.com/aws/aws-sdk-go-v2/service/account v1.7.11/go.mod h1:ubDDEHqWWWFcDG0JtdHj/qDstFF/CHa3HRyI+RLOUwU=
github.com/aws/aws-sdk-go-v2/service/acm v1.16.2 h1:iY6P2fwGJj+Z6bMxIx99fgXvH7mKDhzDf/ISNsa0Nb0=
github.com/aws/aws-sdk-go-v2/service/acm v1.16.2/go.mod h1:LR3qi788mHzUYfv2MNs+xwbvig6QlrPYVOhKv/Ae5M0=
github.com/aws/aws-sdk-go-v2/service/apigateway v1.15.24 h1:eWwaF3m67oAJGBhfzVC9dLXPYhLHB238N1LhgFa8INk=
Expand Down
3 changes: 3 additions & 0 deletions plugins/source/aws/resources/plugin/tables.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package account

import (
"context"

"github.com/aws/aws-sdk-go-v2/service/account"
"github.com/aws/aws-sdk-go-v2/service/account/types"
"github.com/cloudquery/cloudquery/plugins/source/aws/client"
"github.com/cloudquery/plugin-sdk/schema"
)

func fetchAccountAlternateContacts(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- interface{}) error {
cl := meta.(*client.Client)
svc := cl.Services().Account
var contactTypes types.AlternateContactType
for _, acType := range contactTypes.Values() {
var input account.GetAlternateContactInput
input.AlternateContactType = acType
output, err := svc.GetAlternateContact(ctx, &input)
if err != nil {
return err
}
res <- output.AlternateContact
}
return nil
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package account

import (
"testing"

"github.com/aws/aws-sdk-go-v2/service/account"
"github.com/aws/aws-sdk-go-v2/service/account/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 buildAlternateContacts(t *testing.T, ctrl *gomock.Controller) client.Services {
mock := mocks.NewMockAccountClient(ctrl)

var ac types.AlternateContact
if err := faker.FakeObject(&ac); err != nil {
t.Fatal(err)
}
mock.EXPECT().GetAlternateContact(
gomock.Any(),
gomock.Any(),
gomock.Any(),
).Return(
&account.GetAlternateContactOutput{AlternateContact: &ac},
nil,
).MinTimes(1)

return client.Services{Account: mock}
}

func TestAlternateContacts(t *testing.T) {
client.AwsMockTestHelper(t, AlternateContacts(), buildAlternateContacts, client.TestOptions{})
}

0 comments on commit bdf3867

Please sign in to comment.