Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
677 changes: 654 additions & 23 deletions scripts/check-azure-role-parity.sh

Large diffs are not rendered by default.

590 changes: 552 additions & 38 deletions scripts/test-azure-role-parity.sh

Large diffs are not rendered by default.

89 changes: 89 additions & 0 deletions scripts/testdata/role-parity/absent-principal-arm.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"servicePrincipalObjectId": {
"type": "string",
"metadata": {}
},
"roleAssignmentGuidPrefix": {
"type": "string",
"defaultValue": "[newGuid()]",
"metadata": {}
}
},
"variables": {
"roles": {
"reader": "/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7",
"costManagementReader": "/providers/Microsoft.Authorization/roleDefinitions/72fafb9e-0641-4937-9268-a91bfd8191a3"
},
"customRoleName": "[guid(subscription().subscriptionId, 'cudly-reservation-purchaser')]",
"customRoleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', guid(subscription().subscriptionId, 'cudly-reservation-purchaser'))]"
},
"resources": [
{
"type": "Microsoft.Authorization/roleDefinitions",
"apiVersion": "2022-04-01",
"name": "[variables('customRoleName')]",
"properties": {
"roleName": "CUDly Reservation Purchaser (custom)",
"type": "CustomRole",
"permissions": [
{
"actions": [
"Microsoft.Capacity/register/action",
"Microsoft.Capacity/calculatePrice/action",
"Microsoft.Capacity/catalogs/read",
"Microsoft.Capacity/reservationOrders/read",
"Microsoft.Capacity/reservationOrders/write",
"Microsoft.Capacity/reservationOrders/reservations/read",
"Microsoft.BillingBenefits/register/action",
"Microsoft.BillingBenefits/savingsPlanOrderAliases/write",
"Microsoft.BillingBenefits/savingsPlanOrders/read",
"Microsoft.BillingBenefits/savingsPlanOrders/savingsPlans/read",
"Microsoft.BillingBenefits/savingsPlanOrders/action"
],
"notActions": [],
"dataActions": [],
"notDataActions": []
}
],
"assignableScopes": [
"[concat('/subscriptions/', subscription().subscriptionId)]"
]
}
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[guid(parameters('servicePrincipalObjectId'), 'cudlyCustomRole', subscription().subscriptionId)]",
"dependsOn": [
"[variables('customRoleDefinitionId')]"
],
"properties": {
"roleDefinitionId": "[variables('customRoleDefinitionId')]",
"principalType": "ServicePrincipal"
}
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[guid(parameters('servicePrincipalObjectId'), 'reader', subscription().subscriptionId)]",
"properties": {
"roleDefinitionId": "[variables('roles').reader]",
"principalId": "[parameters('servicePrincipalObjectId')]",
"principalType": "ServicePrincipal"
}
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[guid(parameters('servicePrincipalObjectId'), 'costManagementReader', subscription().subscriptionId)]",
"properties": {
"roleDefinitionId": "[variables('roles').costManagementReader]",
"principalId": "[parameters('servicePrincipalObjectId')]",
"principalType": "ServicePrincipal"
}
}
]
}
91 changes: 91 additions & 0 deletions scripts/testdata/role-parity/actions-element-not-string-arm.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"servicePrincipalObjectId": {
"type": "string",
"metadata": {}
},
"roleAssignmentGuidPrefix": {
"type": "string",
"defaultValue": "[newGuid()]",
"metadata": {}
}
},
"variables": {
"roles": {
"reader": "/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7",
"costManagementReader": "/providers/Microsoft.Authorization/roleDefinitions/72fafb9e-0641-4937-9268-a91bfd8191a3"
},
"customRoleName": "[guid(subscription().subscriptionId, 'cudly-reservation-purchaser')]",
"customRoleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', guid(subscription().subscriptionId, 'cudly-reservation-purchaser'))]"
},
"resources": [
{
"type": "Microsoft.Authorization/roleDefinitions",
"apiVersion": "2022-04-01",
"name": "[variables('customRoleName')]",
"properties": {
"roleName": "CUDly Reservation Purchaser (custom)",
"type": "CustomRole",
"permissions": [
{
"actions": [
"Microsoft.Capacity/register/action",
"Microsoft.Capacity/calculatePrice/action",
"Microsoft.Capacity/catalogs/read",
"Microsoft.Capacity/reservationOrders/read",
"Microsoft.Capacity/reservationOrders/write",
"Microsoft.Capacity/reservationOrders/reservations/read",
"Microsoft.BillingBenefits/register/action",
"Microsoft.BillingBenefits/savingsPlanOrderAliases/write",
"Microsoft.BillingBenefits/savingsPlanOrders/read",
"Microsoft.BillingBenefits/savingsPlanOrders/savingsPlans/read",
"Microsoft.BillingBenefits/savingsPlanOrders/action",
123
],
"notActions": [],
"dataActions": [],
"notDataActions": []
}
],
"assignableScopes": [
"[concat('/subscriptions/', subscription().subscriptionId)]"
]
}
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[guid(parameters('servicePrincipalObjectId'), 'cudlyCustomRole', subscription().subscriptionId)]",
"dependsOn": [
"[variables('customRoleDefinitionId')]"
],
"properties": {
"roleDefinitionId": "[variables('customRoleDefinitionId')]",
"principalId": "[parameters('servicePrincipalObjectId')]",
"principalType": "ServicePrincipal"
}
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[guid(parameters('servicePrincipalObjectId'), 'reader', subscription().subscriptionId)]",
"properties": {
"roleDefinitionId": "[variables('roles').reader]",
"principalId": "[parameters('servicePrincipalObjectId')]",
"principalType": "ServicePrincipal"
}
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[guid(parameters('servicePrincipalObjectId'), 'costManagementReader', subscription().subscriptionId)]",
"properties": {
"roleDefinitionId": "[variables('roles').costManagementReader]",
"principalId": "[parameters('servicePrincipalObjectId')]",
"principalType": "ServicePrincipal"
}
}
]
}
78 changes: 78 additions & 0 deletions scripts/testdata/role-parity/actions-not-array-arm.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"servicePrincipalObjectId": {
"type": "string",
"metadata": {}
},
"roleAssignmentGuidPrefix": {
"type": "string",
"defaultValue": "[newGuid()]",
"metadata": {}
}
},
"variables": {
"roles": {
"reader": "/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7",
"costManagementReader": "/providers/Microsoft.Authorization/roleDefinitions/72fafb9e-0641-4937-9268-a91bfd8191a3"
},
"customRoleName": "[guid(subscription().subscriptionId, 'cudly-reservation-purchaser')]",
"customRoleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', guid(subscription().subscriptionId, 'cudly-reservation-purchaser'))]"
},
"resources": [
{
"type": "Microsoft.Authorization/roleDefinitions",
"apiVersion": "2022-04-01",
"name": "[variables('customRoleName')]",
"properties": {
"roleName": "CUDly Reservation Purchaser (custom)",
"type": "CustomRole",
"permissions": [
{
"actions": "Microsoft.Capacity/register/action",
"notActions": [],
"dataActions": [],
"notDataActions": []
}
],
"assignableScopes": [
"[concat('/subscriptions/', subscription().subscriptionId)]"
]
}
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[guid(parameters('servicePrincipalObjectId'), 'cudlyCustomRole', subscription().subscriptionId)]",
"dependsOn": [
"[variables('customRoleDefinitionId')]"
],
"properties": {
"roleDefinitionId": "[variables('customRoleDefinitionId')]",
"principalId": "[parameters('servicePrincipalObjectId')]",
"principalType": "ServicePrincipal"
}
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[guid(parameters('servicePrincipalObjectId'), 'reader', subscription().subscriptionId)]",
"properties": {
"roleDefinitionId": "[variables('roles').reader]",
"principalId": "[parameters('servicePrincipalObjectId')]",
"principalType": "ServicePrincipal"
}
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[guid(parameters('servicePrincipalObjectId'), 'costManagementReader', subscription().subscriptionId)]",
"properties": {
"roleDefinitionId": "[variables('roles').costManagementReader]",
"principalId": "[parameters('servicePrincipalObjectId')]",
"principalType": "ServicePrincipal"
}
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"servicePrincipalObjectId": {
"type": "string",
"metadata": {}
},
"roleAssignmentGuidPrefix": {
"type": "string",
"defaultValue": "[newGuid()]",
"metadata": {}
}
},
"variables": {
"roles": {
"reader": "/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7",
"costManagementReader": "/providers/Microsoft.Authorization/roleDefinitions/72fafb9e-0641-4937-9268-a91bfd8191a3"
},
"customRoleName": "[guid(subscription().subscriptionId, 'cudly-reservation-purchaser')]",
"customRoleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', guid(subscription().subscriptionId, 'cudly-reservation-purchaser'))]"
},
"resources": [
{
"type": "Microsoft.Authorization/roleDefinitions",
"apiVersion": "2022-04-01",
"name": "[variables('customRoleName')]",
"properties": {
"roleName": "CUDly Reservation Purchaser (custom)",
"type": "CustomRole",
"permissions": [
{
"actions": [
"Microsoft.Capacity/register/action",
"Microsoft.Capacity/calculatePrice/action",
"Microsoft.Capacity/catalogs/read",
"Microsoft.Capacity/reservationOrders/read",
"Microsoft.Capacity/reservationOrders/write",
"Microsoft.Capacity/reservationOrders/reservations/read",
"Microsoft.BillingBenefits/register/action",
"Microsoft.BillingBenefits/savingsPlanOrderAliases/write",
"Microsoft.BillingBenefits/savingsPlanOrders/read",
"Microsoft.BillingBenefits/savingsPlanOrders/savingsPlans/read",
"Microsoft.BillingBenefits/savingsPlanOrders/action"
],
"notActions": [],
"dataActions": [],
"notDataActions": []
}
],
"assignableScopes": [
"[concat('/subscriptions/', subscription().subscriptionId)]",
{
"scope": "x"
}
]
}
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[guid(parameters('servicePrincipalObjectId'), 'cudlyCustomRole', subscription().subscriptionId)]",
"dependsOn": [
"[variables('customRoleDefinitionId')]"
],
"properties": {
"roleDefinitionId": "[variables('customRoleDefinitionId')]",
"principalId": "[parameters('servicePrincipalObjectId')]",
"principalType": "ServicePrincipal"
}
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[guid(parameters('servicePrincipalObjectId'), 'reader', subscription().subscriptionId)]",
"properties": {
"roleDefinitionId": "[variables('roles').reader]",
"principalId": "[parameters('servicePrincipalObjectId')]",
"principalType": "ServicePrincipal"
}
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[guid(parameters('servicePrincipalObjectId'), 'costManagementReader', subscription().subscriptionId)]",
"properties": {
"roleDefinitionId": "[variables('roles').costManagementReader]",
"principalId": "[parameters('servicePrincipalObjectId')]",
"principalType": "ServicePrincipal"
}
}
]
}
Loading
Loading