Why do I need to specify a Service Principal in Azure Resource Manager service connection in Azure DevOps? - azure

I want to use the "ARM template deployment" task in Azure pipelines, and for this, I need to set up a service connection of type "Azure Resource Manager connection". So I head over to the Service connections pane. And it turns out that in order to configure this service connection, one of the authentication methods is using a service principal.
So I'v tried learning a little bit about service principals, and what I've understood so far is as such:
App registration is the process of registering applications which I want to delegate identity and access management to Azure AD for. A service principal is a concrete instantiation of the Application object that I create in my Azure AD tenant.
I didn't yet get my head around all these concepts well enough, but what I don't even start to understand is what does all that have to do with an authentication method for a Azure Resource Manager service connection in Azure DevOps??
Can someone please clear up the fog for me?

Azure Devops is not integrated with Azure portal by any means. Also, Azure Devops is not a trusted service even by Microsoft itself.
The Service Connection will help you to establish a connection between Azure portal and Azure Devops. Here, the service principal acts like a user account to establish the connection.

First of all, for using the task "ARM template deployment" in Azure DevOps pipeline, this task is used to deploy Azure Resource Manager templates at resource group deployment scope, subscription deployment scope and management group deployment scopes. The task is also used to create or update a resource group in Azure.
And you should select your Azure Resource and specified subscription which are the prerequisites of the task usage, then for connecting to a subscription which is associated with an Azure Active Directory tenant when building pipeline, it is needed to create a Service connection to help work between pipeline and connect to Azure Subscription. For more info, you can refer to doc:
Azure DevOps Connection Services. And you should also login authenticate via service principle instead of user, it is just like Azure log in.
Besides, you can also manage your Azure subscriptions at scale with management groups via this doc: Organize subscriptions into management groups and assign roles to users for Microsoft Defender for Cloud | Microsoft Learn .

Related

Azure CI/CD pipeline and Azure portal subscription problem

I have one problem with my Azure. I created build pipeline, and now i want to set up relase pipeline. I choosen Deploy App service, where is located my app service with subsription and resource group..
In Azure subsription dropdown I choose my subsription, it is listed.. but I need to authorize myself. I click then on Authorize and I get this error..
Error(s):
Service connection creation operation failed
Error: Service connection with name Microsoft Partner Network (subscription number) already exists. Only a user having Administrator/User role permissions on service connection Microsoft Partner Network (subsription number ) can see it.
I guess it is problem with authorisation, but I cant figure what is problem. I have privileges for my resource group.
The error indicates that within Azure DevOps a service connection with the name 'Microsoft Partner Network' already exists and that you do not have permissions to update/edit it. The permissions are actually needed within the Azure DevOps Project or Organization and are separate from Azure Resource Manager RBAC permissions such as are assigned to resource groups.
See Service Connection security roles for the requires role and references to managing project roles in Azure DevOps

Unable to connect Azure DevOps and Azure ML

I have created an automated Service Principal from the service requests on Azure Devops with sufficient permissions. Now, when I am trying to create an artifact which is an ML model (registered) it is not auto populating the registered models and resulting in an error.
I am using a free trial Azure account and attempting to implement CI CD for ML. I turned my firewall off and attempted as well but still the issue persists.
It appears that the Service Principal is not assigned the role in the appropriate subscription.
You need to grant the service principal Azure subscription access permission:
Login Azure portal->All service->Subscriptions->click your subscription->Access control(IAM)->Add role assignment->assign the correct role to your service principal
Refer to Use the portal to create an Azure AD application and service principal that can access resources and Assign Azure roles using the Azure portal for details.

I Dont see AKS from DevOps - Service Connection

Im not seeing AKS from DevOps. Im trying to create a pipeline but AKS is not showing.
First of all, I created a service connection --> Azure Resource Manager --> Service Principal (Manual)
I have been working this way and I see all my AKS. I have a problem with this new one.
error
I dont know where is the problem. In DevOps I can see all my AKS except this new one
Any ideas to check?
In your Azure DevOps project navigate to Project Settings > Service Connections and select your Service Connection to Azure which will look something like this:
Depending on how your Service Principal was set up you may be able to browse to it directly in the Azure Portal by clicking the Manage Service Principal link. There are other ways to set up a Service Connection and the method to find the Service Principal in the Azure Portal will differ, checkout the documentation here. Make a note of the Display Name for your Service Principal.
In the Azure Portal navigate to your AKS resource then navigate to the Access Control (IAM) blade and click Role Assignments. Check what Roles the Azure AD Service Principal for your Azure DevOps Service Connection has been assigned, it will need at least Contributor to make changes to your AKS cluster.
You can use the verify connection link on the Edit service connection page to verify your connection information and check whether the Grant access permission to all pipelines option is checked.
In addition,here is a document on Troubleshoot Azure Resource Manager service connections you can refer to.

Deploying Azure Function with Personal Access Token

I have created a release pipeline for an azure function that I developed. But to publish the artifact to the azure resource, is there a way I can deploy it through PAT (like how we publish VSS extensions to the marketplace). Because the subscription belongs to another person but I want to be able to deploy. If not PAT is there an alternate way to deploy when I don't have the subscription? Thanks
Don't know if it makes sense because I am new to this :)
You can use Service Connection to Azure Resource Manager with Service Principal in "Manual mode".
Manual subscription pipeline. In this mode, you must specify the
service principal you want to use to connect to Azure. The service
principal specifies the resources and the access levels that will be
available over the connection. Use this approach when you need to
connect to an Azure account using different credentials from those you
are currently logged on with in Azure Pipelines or TFS. This is also a
useful way to maximize security and limit access.
First ask an owner of the subscription to create a Service Principal (app registration) with access to subscription, then it will be just a matter of creating service connection in DevOps (project settings -> pipelines -> service connections) with proper service principal id, key, subscription id, name etc.
You can find really good tutorial for that here

Is it possible to use an Azure Classic Service Connection in my Release pipeline to deploy App Service?

This is a follow up to this question (Is it possible to use DevOps to deploy to an Azure App Service if I don't have access to Azure Active Directory?) where I can't create a service connection if I don't have access to Azure AD for my tenant.
The standard Service Connection creates a service principal which can't be done if there is no access to Azure AD. So I'm trying to see if I can create an Azure Classic Service Connection instead.
I seem to be able to create the service connection and I've verified and saved it okay.
However, it doesn't appear in the dropdown list in the Deploy Azure App Services task.
Am I doing something wrong? I'm trying this on a free trial tenant where I do definitely have access to Azure AD. I can't find any documentation to say Service Connections can't be Azure Classic.
If this is a restrictions for Pipelines, is it possible to deploy to an App Service in Azure without Azure AD access?
No, the Azure App Service Deploy task doesn't support classic service connections.
From the docs:
The task does not work with the Azure Classic service connection, and it will not list these connections in the settings of the task.

Resources