I have a rather (hopefully) theoretical question regarding the secure usage of Service Pricipals in Azure (Enterprise Applications)
Introduction
we currently deploy our DevOps Code via Azure Service Principals.
- AppRegistration/Enterprise App is created
- Secret is generated
- Permission (i.e. Contributor) to the Ressource Group is granted in Azure
- Service Connection is made in Devops
everything works fine.
Assumption
By default the Service Principal (Enterprise Application) is not restricted to a specific user/group (Assignment Required => "no").
My assumption is now, that every user in the AAD-Tenant is able to login to the Enterprise Application as well.
I i.e. do this by using the "Graph Powershell API"-EnterpriseApp.
I can either use a Secret or use my User Credentials to access the Service Principal and its permissions
Security issue?
coming back to our DevOps configuration:
- The Service Principal has Contributor Permission on the dedicated Resource Group
- Assignment Required is set to no (default configuration)
if I (as a malicious user) have the Application ID, i could simply logon to the Service Principal and receive the Token.
Question:
With this token and my login to the App, do i also have the Contributor Permissions of the App and could now manipulate the whole Resource Group?
Since i’m not an Azure Developer – but only an Azure AD Admin – my knowledge regarding this is limited,
so i’m not able to test it.
Can someone maybe either provide code or prove that my assumptions are wrong or correct?!
Thanks
2
Answers
Yes, the SPN can manage the resources within the resource group if it has Contributor – it is no different than a normal (human) identity.
Consider if the SPN actually needs Contributor or if you can limit it with another role or even make a custom role.
Furthermore, monitor the sign-ins using the Azure AD sign-in logs:
You can also use
CanNotDelete
resource lock, which means that the service principal cannot delete resource as it is only Contributor:https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/lock-resources?tabs=json
You might want to look into the Conditional Access to strengthen your environment:
Take a look here:
No. They would need the client secret or the rights to generate a new one. Which requires that they are owners of the App Registration. In the App Registration on the Owners tab it says: