Skip to content

Commit 4ae00ca

Browse files
authored
feat(aws): Add ssoadmin permission_sets, account_assignments (#4817)
#### Summary Add support for SSOAdmin permission sets Add support for SSOAdmin account assignments <!--
1 parent 465c9b7 commit 4ae00ca

File tree

11 files changed

+284
-7
lines changed

11 files changed

+284
-7
lines changed

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

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,26 @@ import (
77
func SSOAdminResources() []*Resource {
88
resources := []*Resource{
99
{
10-
SubService: "instances",
11-
Struct: &types.InstanceMetadata{},
10+
SubService: "instances",
11+
Struct: &types.InstanceMetadata{},
12+
Description: "https://docs.aws.amazon.com/singlesignon/latest/APIReference/API_InstanceMetadata.html",
13+
Relations: []string{
14+
"PermissionSets()",
15+
},
16+
},
17+
{
18+
SubService: "permission_sets",
19+
Struct: &types.PermissionSet{},
20+
Description: "https://docs.aws.amazon.com/singlesignon/latest/APIReference/API_PermissionSet.html",
21+
PreResourceResolver: "getSsoadminPermissionSet",
22+
Relations: []string{
23+
"AccountAssignments()",
24+
},
25+
},
26+
{
27+
SubService: "account_assignments",
28+
Struct: &types.AccountAssignment{},
29+
Description: "https://docs.aws.amazon.com/singlesignon/latest/APIReference/API_AccountAssignment.html",
1230
},
1331
}
1432

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,7 @@
426426
| [aws_ssm_inventory_schemas](aws_ssm_inventory_schemas.md) |
427427
| [aws_ssm_patch_baselines](aws_ssm_patch_baselines.md) |
428428
| [aws_ssoadmin_instances](aws_ssoadmin_instances.md) |
429+
|[aws_ssoadmin_permission_sets](aws_ssoadmin_permission_sets.md) |
429430
| [aws_stepfunctions_state_machines](aws_stepfunctions_state_machines.md) |
430431
| [aws_timestream_databases](aws_timestream_databases.md) |
431432
|[aws_timestream_tables](aws_timestream_tables.md) |
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Table: aws_ssoadmin_account_assignments
2+
3+
https://docs.aws.amazon.com/singlesignon/latest/APIReference/API_AccountAssignment.html
4+
5+
The primary key for this table is **_cq_id**.
6+
7+
## Relations
8+
This table depends on [aws_ssoadmin_permission_sets](aws_ssoadmin_permission_sets.md).
9+
10+
## Columns
11+
| Name | Type |
12+
| ------------- | ------------- |
13+
|_cq_source_name|String|
14+
|_cq_sync_time|Timestamp|
15+
|_cq_id (PK)|UUID|
16+
|_cq_parent_id|UUID|
17+
|account_id|String|
18+
|permission_set_arn|String|
19+
|principal_id|String|
20+
|principal_type|String|

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
# Table: aws_ssoadmin_instances
22

3-
3+
https://docs.aws.amazon.com/singlesignon/latest/APIReference/API_InstanceMetadata.html
44

55
The primary key for this table is **_cq_id**.
66

7+
## Relations
8+
The following tables depend on aws_ssoadmin_instances:
9+
- [aws_ssoadmin_permission_sets](aws_ssoadmin_permission_sets.md)
710

811
## Columns
912
| Name | Type |
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Table: aws_ssoadmin_permission_sets
2+
3+
https://docs.aws.amazon.com/singlesignon/latest/APIReference/API_PermissionSet.html
4+
5+
The primary key for this table is **_cq_id**.
6+
7+
## Relations
8+
This table depends on [aws_ssoadmin_instances](aws_ssoadmin_instances.md).
9+
The following tables depend on aws_ssoadmin_permission_sets:
10+
- [aws_ssoadmin_account_assignments](aws_ssoadmin_account_assignments.md)
11+
12+
## Columns
13+
| Name | Type |
14+
| ------------- | ------------- |
15+
|_cq_source_name|String|
16+
|_cq_sync_time|Timestamp|
17+
|_cq_id (PK)|UUID|
18+
|_cq_parent_id|UUID|
19+
|created_date|Timestamp|
20+
|description|String|
21+
|name|String|
22+
|permission_set_arn|String|
23+
|relay_state|String|
24+
|session_duration|String|

plugins/source/aws/resources/services/ssoadmin/account_assignments.go

Lines changed: 39 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package ssoadmin
2+
3+
import (
4+
"context"
5+
6+
"github.com/aws/aws-sdk-go-v2/aws"
7+
"github.com/aws/aws-sdk-go-v2/service/ssoadmin"
8+
"github.com/aws/aws-sdk-go-v2/service/ssoadmin/types"
9+
"github.com/cloudquery/cloudquery/plugins/source/aws/client"
10+
"github.com/cloudquery/plugin-sdk/schema"
11+
)
12+
13+
func fetchSsoadminAccountAssignments(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- interface{}) error {
14+
cl := meta.(*client.Client)
15+
svc := cl.Services().Ssoadmin
16+
permission_set_arn := parent.Item.(*types.PermissionSet).PermissionSetArn
17+
instance_arn := parent.Parent.Item.(types.InstanceMetadata).InstanceArn
18+
config := ssoadmin.ListAccountAssignmentsInput{
19+
AccountId: &cl.AccountID,
20+
InstanceArn: instance_arn,
21+
PermissionSetArn: permission_set_arn,
22+
}
23+
24+
for {
25+
response, err := svc.ListAccountAssignments(ctx, &config)
26+
if err != nil {
27+
return err
28+
}
29+
res <- response.AccountAssignments
30+
if aws.ToString(response.NextToken) == "" {
31+
break
32+
}
33+
config.NextToken = response.NextToken
34+
}
35+
36+
return nil
37+
}

plugins/source/aws/resources/services/ssoadmin/instances.go

Lines changed: 8 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/source/aws/resources/services/ssoadmin/instances_mock_test.go

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,17 @@ import (
1414
func buildInstances(t *testing.T, ctrl *gomock.Controller) client.Services {
1515
mSSOAdmin := mocks.NewMockSsoadminClient(ctrl)
1616
im := types.InstanceMetadata{}
17-
err := faker.FakeObject(&im)
17+
ps := types.PermissionSet{}
18+
as := types.AccountAssignment{}
19+
err := faker.FakeObject(&ps)
20+
if err != nil {
21+
t.Fatal(err)
22+
}
23+
err = faker.FakeObject(&as)
24+
if err != nil {
25+
t.Fatal(err)
26+
}
27+
err = faker.FakeObject(&im)
1828
if err != nil {
1929
t.Fatal(err)
2030
}
@@ -24,6 +34,21 @@ func buildInstances(t *testing.T, ctrl *gomock.Controller) client.Services {
2434
Instances: []types.InstanceMetadata{im},
2535
}, nil)
2636

37+
mSSOAdmin.EXPECT().ListPermissionSets(gomock.Any(), gomock.Any(), gomock.Any()).Return(
38+
&ssoadmin.ListPermissionSetsOutput{
39+
PermissionSets: []string{*ps.Name},
40+
}, nil)
41+
42+
mSSOAdmin.EXPECT().DescribePermissionSet(gomock.Any(), gomock.Any(), gomock.Any()).Return(
43+
&ssoadmin.DescribePermissionSetOutput{
44+
PermissionSet: &ps,
45+
}, nil)
46+
47+
mSSOAdmin.EXPECT().ListAccountAssignments(gomock.Any(), gomock.Any(), gomock.Any()).Return(
48+
&ssoadmin.ListAccountAssignmentsOutput{
49+
AccountAssignments: []types.AccountAssignment{as},
50+
}, nil)
51+
2752
return client.Services{
2853
Ssoadmin: mSSOAdmin,
2954
}

plugins/source/aws/resources/services/ssoadmin/permission_sets.go

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

0 commit comments

Comments
 (0)