func()

in pkg/providers/az-client.go [130:163]


func (az *AzClient) AssignSpRole(ctx context.Context, subscriptionId, resourceGroup, servicePrincipalObjectID, roleId string) error {
	log.Debug("Assigning contributor role to service principal...")
	if az.RoleAssignClient == nil {
		c, err := armauthorization.NewRoleAssignmentsClient(subscriptionId, az.Credential, nil)
		if err != nil {
			return fmt.Errorf("failed to create role assignment client: %w", err)
		}
		az.RoleAssignClient = c
	}

	scope := fmt.Sprintf("/subscriptions/%s/resourceGroups/%s", subscriptionId, resourceGroup)
	objectID := servicePrincipalObjectID
	raUid := uuid.New().String()

	fullAssignmentId := fmt.Sprintf("/%s/providers/Microsoft.Authorization/roleAssignments/%s", scope, raUid)
	fullDefinitionId := fmt.Sprintf("/providers/Microsoft.Authorization/roleDefinitions/%s", roleId)

	principalType := armauthorization.PrincipalTypeServicePrincipal
	parameters := armauthorization.RoleAssignmentCreateParameters{
		Properties: &armauthorization.RoleAssignmentProperties{
			PrincipalID:      &objectID,
			RoleDefinitionID: &fullDefinitionId,
			PrincipalType:    &principalType,
		},
	}

	_, err := az.RoleAssignClient.CreateByID(ctx, fullAssignmentId, parameters, nil)
	if err != nil {
		return fmt.Errorf("creating role assignment: %w", err)
	}

	log.Debug("Role assigned successfully!")
	return nil
}