Dela via


Använd skript för att automatisera Azure Resource Manager med anslutningar till arbetsbelastningsidentitetstjänster

Azure DevOps-tjänster

Lär dig hur du använder skript för att skapa Azure Resource Manager-tjänstanslutningar med arbetsbelastningsidentitet i Azure Pipelines. Skript säkerställer konsekvens, effektivitet och repeterbarhet när du konfigurerar tjänstanslutningar, vilket minskar risken för mänskliga fel. De sparar tid, särskilt när du skapar flera anslutningar eller distribuerar till olika miljöer. Dessa skript kan också integreras i en automatiseringsprocess för att skala och bättre hantera stora distributioner.

Genom att använda skript som en del av en automatiseringsprocess kan du framtvinga säkerhetsprinciper och efterlevnadskrav genom att se till att tjänstanslutningar använder rätt behörigheter och konfigurationer. Det fungerar också som dokumentation för installationsprocessen.

Förutsättningar

Produkt Krav
Azure DevOps – En Azure DevOps-organisation och ett projekt. Skapa en organisation eller ett projekt om du inte redan har gjort det.
Blått En prenumeration för Azure.
Behörigheter:
     – Om du vill skapa en rolltilldelning i Azure måste du ha behörighet som administratör för användaråtkomst eller rollbaserad åtkomstkontroll , eller högre. Med de här rollerna kan du hantera åtkomst och tilldela roller som krävs för att skapa identiteter. Mer information finns i Inbyggda roller i Azure.
Gå in Behörigheter:
     – Om du vill skapa en appregistrering i Microsoft Entra: Appregistreringsdelegeringen ska vara aktiverad eller så bör du ha rollen Programutvecklare . Mer information finns i Inbyggda roller i Microsoft Entra.
I stället för att skapa en appregistrering i Entra kan du också skapa en hanterad identitet i Azure.

Processen

Begränsningar

  • Inom automation bör "creationMode": "Manual" användas när du skapar tjänsteanslutningar som behöver en Microsoft Entra-identitet. Betydande Microsoft Entra-privilegier skulle krävas för att Azure DevOps ska skapa alla objekt för anroparens räkning. Därför stöder Inte Azure DevOps användning av "creationMode": "Automatic" för huvudnamn som inte är användare. I stället bör automatisering från slutpunkt till slutpunkt skapa varje objekt (identitet, tjänstanslutning, autentiseringsuppgifter, rolltilldelning) individuellt.
  • Federation för arbetsbelastningsidentifiering definierar en dubbelriktad relation mellan identitets- och tjänsteanslutning. Därför måste objekt skapas i en viss ordning och federerade autentiseringsuppgifter kan bara skapas när tjänstanslutningen har skapats.

Kommandokörningsordning

Den här tabellen innehåller en översikt över de nyckelegenskaper som utbyts mellan skapandekommandona för varje objekt. Beroenden av utdata bestämmer utförandeordningen.

Steg Inmatning Utgång
Skapa identitet i Microsoft Entra eller Azure tenantId appId, principalId
Skapa tjänstanslutning i Azure DevOps appId workloadIdentityFederationIssuer, workloadIdentityFederationSubject
Skapa federerade autentiseringsuppgifter i Microsoft Entra eller Azure appId workloadIdentityFederationIssuer workloadIdentityFederationSubject
Skapa rolltilldelning i Azure principalId

1. Logga in med Azure CLI

Följande kommandon använder Azure CLI. Logga in på den avsedda hyresgästen:

az login --tenant TENANT_ID

Läs mer i Autentisera till Azure med hjälp av Azure CLI.

2. Skapa identitet

Skapa en identitet med hjälp av en hanterad identitet eller en appregistrering.

Skapa en hanterad identitet med az identity create.

az identity create --name MyIdentity --resource-group MyResourceGroup --query '{clientId:clientId,principalId:principalId}'

Exempel på utdata:

{
  "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
  "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
}

En hanterad identitet skapar ett huvudnamn för tjänsten i Microsoft Entra. Objekt-ID för tjänstens huvudkonto kallas också principalId. Använd tjänstens huvudnamn senare för att tilldela RBAC-roller. appId Används för att skapa tjänstanslutningen i Azure DevOps.

Läs mer i az identity create.

3. Skapa en tjänstanslutning

I det här exemplet används Azure DevOps Azure CLI-tillägget och en konfigurationsfil för att skapa tjänstanslutningen. Detta konfigurerar identiteten som skapats i en ny Azure-tjänstanslutning. Auktoriseringsparametern servicePrincipalId fylls i med appId identitetens.

Du behöver en appId för att använda som inmatning.

Det första kodfragmentet är en konfigurationsfil, ServiceConnectionGeneric.json.

{
  "data": {
    "subscriptionId": "SUBSCRIPTION_ID",
    "subscriptionName": "My Azure Subscription",
    "environment": "AzureCloud",
    "scopeLevel": "Subscription",
    "creationMode": "Manual"
  },
  "name": "MyNewServiceEndpoint",
  "type": "AzureRM",
  "url": "https://management.azure.com/",
  "authorization": {
    "parameters": {
      "tenantid": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
      "serviceprincipalid": "00001111-aaaa-2222-bbbb-3333cccc4444"
    },
    "scheme": "WorkloadIdentityFederation"
  },
  "isShared": false,
  "isReady": true,
  "serviceEndpointProjectReferences": [
    {
      "projectReference": {
        "id": "c7e5f0b3-71fa-4429-9fb3-3321963a7c06",
        "name": "TestProject"
      },
      "name": "MyNewServiceEndpoint"
    }
  ]
}
az devops service-endpoint create -service-endpoint-configuration ./ServiceConnectionGeneric.json --query authorization.parameters

az devops service-endpoint createautomatiserar skapandet av en tjänstanslutning i Azure DevOps med .ServiceConnectionGeneric.json Utdata innehåller auktoriseringsparametrar som du ska använda i framtida steg.

Exempel på utdata:

{
  "serviceprincipalid": "00001111-aaaa-2222-bbbb-3333cccc4444",
  "tenantid": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "workloadIdentityFederationIssuer": "https://login.microsoftonline.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0",
  "workloadIdentityFederationIssuerType": "EntraID",
  "workloadIdentityFederationSubject": "<federation-subject>"
}

Mer information om det här kommandot finns i Azure DevOps CLI-tjänstslutpunkten.

4. Skapa en federerad identitetsautentiseringsuppgift

Skapa en federerad autentiseringsuppgift med hjälp av workloadIdentityFederationIssuer och workloadIdentityFederationSubject utdata från steget Skapa en tjänstanslutning .

az identity federated-credential create --name fic-for-sc 
                                        --identity-name MyIdentity  
                                        --resource-group MyResourceGroup 
                                        --issuer "https://login.microsoftonline.com/TENANT_ID/v2.0" 
                                        --subject "<federation-subject>" 
                                        --subscription MSI_SUBSCRIPTION_ID

az identity federated-credential create länkar en federerad identitetsautentiseringsuppgift till en hanterad identitet, vilket gör det möjligt för den hanterade identiteten att autentisera med Microsoft Entra-ID med hjälp av det angivna ämnesanspråket.

Tips/Råd

Lägg till ett radfortsättningstecken (Bash: backslash, PowerShell: backquote) i slutet av alla rader som inte slutför kommandot.

Den hanterade identiteten behöver inte skapas i samma prenumeration som den beviljas åtkomst till i steget Skapa rolltilldelning.

Mer information om det här kommandot finns i az identity federated-credential create.

5. Skapa rolltilldelning

Lägg till en rolltilldelning till din hanterade identitet eller appregistrering med az role assignment create. För tillgängliga roller, se Inbyggda Roller i Azure. Rollens tilldelare är tjänstens huvudnamn som är associerat med appregistreringen eller den hanterade identiteten. En tjänstehuvudprincip identifieras med sitt ID, även kallat principalId. principalId finns i utdata från kommandot Skapa identitet.

az role assignment create --role Contributor --scope /subscriptions/SUBSCRIPTION_ID --assignee-object-id PRINCIPAL_ID --assignee-principal-type ServicePrincipal

az role assignment create --role Contributor kommandot tilldelar rollen Deltagare till ett huvudnamn för tjänsten på prenumerationsnivå. På så sätt kan tjänstens huvudnamn hantera resurser i den angivna prenumerationen.

Mer information om det här kommandot finns i az role assignment create.