Skip to content

Commit 124d7f1

Browse files
authored
feat(resources): Add Role Management Policy Assignments (#12557)
#### Summary Fixes #7889 I'm getting a `The tenant has not onboarded to PIM` when trying to sync this table. The API is quite straightforward so seems like a setup/permissions issue. <!--
1 parent f1938f3 commit 124d7f1

File tree

6 files changed

+101
-0
lines changed

6 files changed

+101
-0
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,7 @@
254254
- [azure_resources_links](../../../../../website/tables/azure/azure_resources_links.md)
255255
- [azure_resources_resource_groups](../../../../../website/tables/azure/azure_resources_resource_groups.md)
256256
- [azure_resources_resources](../../../../../website/tables/azure/azure_resources_resources.md)
257+
- [azure_role_management_policy_assignments](../../../../../website/tables/azure/azure_role_management_policy_assignments.md)
257258
- [azure_saas_resources](../../../../../website/tables/azure/azure_saas_resources.md)
258259
- [azure_search_services](../../../../../website/tables/azure/azure_search_services.md)
259260
- [azure_security_alerts](../../../../../website/tables/azure/azure_security_alerts.md)

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ func getTables() schema.Tables {
123123
authorization.ProviderOperationsMetadata(),
124124
authorization.RoleAssignments(),
125125
authorization.RoleDefinitions(),
126+
authorization.RoleManagementPolicyAssignments(),
126127
automation.Account(),
127128
azurearcdata.PostgresInstances(),
128129
azurearcdata.SqlManagedInstances(),
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package authorization
2+
3+
import (
4+
"context"
5+
6+
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2"
7+
"github.com/cloudquery/cloudquery/plugins/source/azure/client"
8+
"github.com/cloudquery/plugin-sdk/v4/schema"
9+
"github.com/cloudquery/plugin-sdk/v4/transformers"
10+
)
11+
12+
func RoleManagementPolicyAssignments() *schema.Table {
13+
return &schema.Table{
14+
Name: "azure_role_management_policy_assignments",
15+
Resolver: fetchRoleManagementPolicyAssignments,
16+
PostResourceResolver: client.LowercaseIDResolver,
17+
Description: "https://learn.microsoft.com/en-us/rest/api/authorization/role-management-policy-assignments/list-for-scope?tabs=HTTP#rolemanagementpolicyassignment",
18+
Multiplex: client.SubscriptionMultiplexRegisteredNamespace("azure_role_management_policy_assignments", client.Namespacemicrosoft_authorization),
19+
Transform: transformers.TransformWithStruct(&armauthorization.RoleManagementPolicyAssignment{}, transformers.WithPrimaryKeys("ID")),
20+
Columns: schema.ColumnList{client.SubscriptionID},
21+
}
22+
}
23+
24+
func fetchRoleManagementPolicyAssignments(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error {
25+
cl := meta.(*client.Client)
26+
svc, err := armauthorization.NewRoleManagementPolicyAssignmentsClient(cl.Creds, cl.Options)
27+
if err != nil {
28+
return err
29+
}
30+
scope := "/subscriptions/" + cl.SubscriptionId
31+
pager := svc.NewListForScopePager(scope, nil)
32+
for pager.More() {
33+
p, err := pager.NextPage(ctx)
34+
if err != nil {
35+
return err
36+
}
37+
res <- p.Value
38+
}
39+
return nil
40+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package authorization
2+
3+
import (
4+
"encoding/json"
5+
"net/http"
6+
"testing"
7+
8+
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2"
9+
"github.com/cloudquery/cloudquery/plugins/source/azure/client"
10+
11+
"github.com/cloudquery/plugin-sdk/v4/faker"
12+
"github.com/gorilla/mux"
13+
)
14+
15+
func createRoleManagementPolicyAssignments(router *mux.Router) error {
16+
var item armauthorization.RoleManagementPolicyAssignmentsClientListForScopeResponse
17+
if err := faker.FakeObject(&item); err != nil {
18+
return err
19+
}
20+
21+
emptyStr := ""
22+
item.NextLink = &emptyStr
23+
router.HandleFunc("/subscriptions/"+client.TestSubscription+"/providers/Microsoft.Authorization/roleManagementPolicyAssignments", func(w http.ResponseWriter, r *http.Request) {
24+
b, err := json.Marshal(&item)
25+
if err != nil {
26+
http.Error(w, "unable to marshal request: "+err.Error(), http.StatusBadRequest)
27+
return
28+
}
29+
if _, err := w.Write(b); err != nil {
30+
http.Error(w, "failed to write", http.StatusBadRequest)
31+
return
32+
}
33+
})
34+
return nil
35+
}
36+
37+
func TestRoleManagementPolicyAssignments(t *testing.T) {
38+
client.MockTestHelper(t, RoleManagementPolicyAssignments(), createRoleManagementPolicyAssignments)
39+
}

website/pages/docs/plugins/sources/azure/tables.md

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Table: azure_role_management_policy_assignments
2+
3+
This table shows data for Azure Role Management Policy Assignments.
4+
5+
https://learn.microsoft.com/en-us/rest/api/authorization/role-management-policy-assignments/list-for-scope?tabs=HTTP#rolemanagementpolicyassignment
6+
7+
The primary key for this table is **id**.
8+
9+
## Columns
10+
11+
| Name | Type |
12+
| ------------- | ------------- |
13+
|_cq_id|`uuid`|
14+
|_cq_parent_id|`uuid`|
15+
|subscription_id|`utf8`|
16+
|properties|`json`|
17+
|id (PK)|`utf8`|
18+
|name|`utf8`|
19+
|type|`utf8`|

0 commit comments

Comments
 (0)