Workloadidentiteit configureren op een AKS Edge Essentials-cluster (preview)
Azure Kubernetes Service (AKS) Edge Essentials is een on-premises Kubernetes-implementatie van Azure Kubernetes Service (AKS) die het uitvoeren van containertoepassingen op schaal automatiseert. In dit artikel wordt beschreven hoe u de volgende taken uitvoert:
- Maak een Kubernetes-serviceaccount en bind dit aan azure Managed Identity.
- Maak een federatieve referentie voor de beheerde identiteit om de OIDC-verlener te vertrouwen.
- Implementeer uw toepassing.
- Voorbeeld: Een pod in het cluster toegang verlenen tot geheimen in een Azure-sleutelkluis.
Zie Workload-identiteitsfederatie in Kubernetes met Azure Arc (preview) voor een conceptueel overzicht van workloadidentiteitsfederatie.
Belangrijk
Deze preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals is' en 'als beschikbaar' en ze worden uitgesloten van de serviceovereenkomsten en beperkte garantie. Previews van Azure Kubernetes Service Edge Essentials worden gedeeltelijk gedekt door klantondersteuning op basis van best effort.
Notitie
In deze openbare preview kunt u met AKS Edge Essentials de workloadidentiteit inschakelen tijdens de eerste implementatie van het quickstartscript voor Azure IoT Operations. Deze functie is niet beschikbaar voor andere AKS Edge Essentials-scenario's.
Vereisten
Voordat u workloadidentiteitsfederatie gebruikt voor een AKS Edge Essentials-cluster, moet u het quickstartscript voor De Azure IoT-bewerking implementeren, zoals beschreven in Een AKS Edge Essentials-cluster maken en configureren waarmee Azure IoT Operations kan worden uitgevoerd. Met het script wordt automatisch de functie voor federatie van workloadidentiteiten ingeschakeld op het AKS Edge Essentials-cluster.
Nadat u het AKS Edge Essentials-cluster hebt geïmplementeerd, kunt u de volgende opdracht gebruiken om de status van de workloadidentiteitsextensie te controleren:
az connectedk8s show -n $aks_cluster_name -g $resource_group_name
# agentState = "Succeeded"
"agentPublicKeyCertificate": "",
"agentVersion": "1.21.10",
"arcAgentProfile": {
"agentAutoUpgrade": "Enabled",
"agentErrors": [],
"agentState": "Succeeded",
"desiredAgentVersion": "",
"systemComponents": null
# oidcIssuerProfile "enabled": true and "issuerUrl" present
"oidcIssuerProfile": {
"enabled": true,
"issuerUrl": "https://oidcdiscovery-{location}-endpoint-1111111111111111.000.azurefd.net/00000000-0000-0000-0000-000000000000/11111111-1111-1111-1111-111111111111/",
# workloadIdentity "enabled": true
"securityProfile": {
"workloadIdentity": {
"enabled": true
In Azure Portal kunt u de wiextension
extensie bekijken in de sectie Eigenschappen van uw Kubernetes-cluster.
Omgevingsvariabelen exporteren
Om de stappen voor het configureren van de vereiste identiteiten te vereenvoudigen, definiëren de volgende stappen omgevingsvariabelen waarnaar wordt verwezen in de voorbeelden in dit artikel. Vergeet niet om de waarden te vervangen die worden weergegeven door uw eigen waarden:
$AZSubscriptionID = "00000000-0000-0000-0000-000000000000"
$Location = "westeurope"
$resource_group_name = "myResourceGroup"
$aks_cluster_name = "myAKSCluster"
$SERVICE_ACCOUNT_NAMESPACE = "default"
$SERVICE_ACCOUNT_NAME = "workload-identity-sa"
$FedIdCredentialName = "myFedIdentity"
$MSIName = "myIdentity"
# Include these variables to access key vault secrets from a pod in the cluster.
$KVName = "KV-workload-id"
$KVSecretName= "KV-secret"
De URL van de OIDC-verlener opslaan in een omgevingsvariabele
Voer de volgende opdracht uit om de URL van de OIDC-verlener op te halen en op te slaan in een omgevingsvariabele:
$SERVICE_ACCOUNT_ISSUER =$(az connectedk8s show --n $aks_cluster_name --resource-group $resource_group_name --query "oidcIssuerProfile.issuerUrl" --output tsv)
Stap 1: Maak een Kubernetes-serviceaccount en bind dit aan de Beheerde identiteit van Azure
Roep eerst de opdracht az identity create aan om een beheerde identiteit te maken:
az identity create --name $MSIName --resource-group $resource_group_name --location $Location --subscription $AZSubscriptionID
Maak vervolgens variabelen voor de client-id van de beheerde identiteit:
$MSIId=$(az identity show --resource-group $resource_group_name --name $MSIName --query 'clientId' --output tsv)
$MSIPrincipalId=$(az identity show --resource-group $resource_group_name --name $MSIName --query 'principalId' --output tsv)
Een Kubernetes-serviceaccount maken
Maak een Kubernetes-serviceaccount en annotaeer dit met de client-id van de beheerde identiteit die u in de vorige stap hebt gemaakt. Kopieer en plak de volgende Azure CLI-opdrachten:
$yaml = @"
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
azure.workload.identity/client-id: $MSIId
name: $SERVICE_ACCOUNT_NAME
namespace: $SERVICE_ACCOUNT_NAMESPACE
"@
# Replace variables within the YAML content
$yaml = $yaml -replace '\$MSIId', $MSIId `
-replace '\$SERVICE_ACCOUNT_NAME', $SERVICE_ACCOUNT_NAME `
-replace '\$SERVICE_ACCOUNT_NAMESPACE', $SERVICE_ACCOUNT_NAMESPACE
# Apply the YAML content to Kubernetes
$yaml | kubectl apply -f -
In de volgende uitvoer ziet u de workloadidentiteit die is gemaakt:
serviceaccount/workload-identity-sa created
Stap 2: Maak een federatieve referentie voor de beheerde identiteit om de OIDC-verlener te vertrouwen
Als u de federatieve identiteitsreferentie tussen de beheerde identiteit, de verlener van het serviceaccount en het onderwerp wilt maken, roept u de opdracht az identity federated-credential create aan . Zie Overzicht van federatieve identiteitsreferenties in Microsoft Entra voor meer informatie over federatieve identiteitsreferenties in Microsoft Entra-id.
# Create a federated credential
az identity federated-credential create --name $FedIdCredentialName --identity-name $MSIName --resource-group $resource_group_name --issuer $SERVICE_ACCOUNT_ISSUER --subject "system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}"
# Show the federated credential
az identity federated-credential show --name $FedIdCredentialName --resource-group $resource_group_name --identity-name $MSIName
Notitie
Nadat u een federatieve identiteitsreferentie hebt toegevoegd, duurt het enkele seconden voordat deze is doorgegeven. Tokenaanvragen die onmiddellijk daarna zijn gedaan, kunnen mislukken totdat de cache wordt vernieuwd. U kunt dit probleem voorkomen door een korte vertraging toe te voegen nadat u de federatieve identiteitsreferentie hebt gemaakt.
Stap 3: Uw toepassing implementeren
Wanneer u uw toepassingspods implementeert, moet het manifest verwijzen naar het serviceaccount dat is gemaakt in de stap Kubernetes-serviceaccount maken. In het volgende manifest ziet u hoe u naar het account verwijst, met name naar de metadata\namespace
en spec\serviceAccountName
eigenschappen. Zorg ervoor dat u een installatiekopieën voor en een containernaam opgeeft image
voor containerName
:
$image = "<image>" # Replace <image> with the actual image name
$containerName = "<containerName>" # Replace <containerName> with the actual container name
$yaml = @"
apiVersion: v1
kind: Pod
metadata:
name: sample-quick-start
namespace: $SERVICE_ACCOUNT_NAMESPACE
labels:
azure.workload.identity/use: "true" # Required. Only pods with this label can use workload identity.
spec:
serviceAccountName: $SERVICE_ACCOUNT_NAME
containers:
- image: $image
name: $containerName
"@
# Replace variables within the YAML content
$yaml = $yaml -replace '\$SERVICE_ACCOUNT_NAMESPACE', $SERVICE_ACCOUNT_NAMESPACE `
-replace '\$SERVICE_ACCOUNT_NAME', $SERVICE_ACCOUNT_NAME
# Apply the YAML configuration
$yaml | kubectl apply -f -
Belangrijk
Zorg ervoor dat de toepassingspods die gebruikmaken van de workloadidentiteit het label azure.workload.identity/use: "true"
in de podspecificatie bevatten. Anders mislukken de pods nadat ze opnieuw zijn opgestart.
Voorbeeld: Machtigingen verlenen voor toegang tot Azure Key Vault
In de instructies in deze stap wordt beschreven hoe u toegang krijgt tot geheimen, sleutels of certificaten in een Azure-sleutelkluis vanuit de pod. In de voorbeelden in deze sectie wordt de toegang tot geheimen in de sleutelkluis voor de workloadidentiteit geconfigureerd, maar u kunt vergelijkbare stappen uitvoeren om toegang tot sleutels of certificaten te configureren.
In het volgende voorbeeld ziet u hoe u het machtigingsmodel voor op rollen gebaseerd toegangsbeheer (Azure RBAC) van Azure gebruikt om de pod toegang te verlenen tot de sleutelkluis. Zie Machtiging verlenen aan toepassingen voor toegang tot een Azure-sleutelkluis met behulp van Azure RBAC voor meer informatie over het Azure RBAC-machtigingsmodel voor Azure Key Vault.
Maak een sleutelkluis met beveiliging tegen opschonen en RBAC-autorisatie ingeschakeld. U kunt ook een bestaande sleutelkluis gebruiken als deze is geconfigureerd voor zowel beveiliging tegen opschonen als RBAC-autorisatie:
az keyvault create --name $KVName --resource-group $resource_group_name --location $Location --enable-purge-protection --enable-rbac-authorization # retrieve the key vault ID for role assignment $KVId=$(az keyvault show --resource-group $resource_group_name --name $KVName --query id --output tsv)
Wijs de rol RBAC Key Vault Secrets Officer toe aan uzelf, zodat u een geheim kunt maken in de nieuwe sleutelkluis. Het kan vijf minuten duren voordat nieuwe roltoewijzingen zijn doorgegeven en bijgewerkt door de autorisatieserver.
az role assignment create --assignee-object-id $MSIPrincipalId --role "Key Vault Secrets Officer" --scope $KVId --assignee-principal-type ServicePrincipal
Maak een geheim in de sleutelkluis:
az keyvault secret set --vault-name $KVName --name $KVSecretName --value "Hello!"
Wijs de rol Key Vault Secrets User toe aan de door de gebruiker toegewezen beheerde identiteit die u eerder hebt gemaakt. Deze stap geeft de beheerde identiteit toestemming om geheimen uit de sleutelkluis te lezen:
az role assignment create --assignee-object-id $MSIPrincipalId --role "Key Vault Secrets User" --scope $KVId --assignee-principal-type ServicePrincipal
Maak een omgevingsvariabele voor de URL van de sleutelkluis:
$KVUrl=$(az keyvault show --resource-group $resource_group_name --name $KVName --query properties.vaultUri --output tsv)
Implementeer een pod die verwijst naar de URL van het serviceaccount en de sleutelkluis:
$yaml = @" apiVersion: v1 kind: Pod metadata: name: sample-quick-start namespace: $SERVICE_ACCOUNT_NAMESPACE labels: azure.workload.identity/use: "true" spec: serviceAccountName: $SERVICE_ACCOUNT_NAME containers: - image: ghcr.io/azure/azure-workload-identity/msal-go name: oidc env: - name: KEYVAULT_URL value: $KVUrl - name: SECRET_NAME value: $KVSecretName nodeSelector: kubernetes.io/os: linux "@ # Replace variables within the YAML content $yaml = $yaml -replace '\$SERVICE_ACCOUNT_NAMESPACE', $SERVICE_ACCOUNT_NAMESPACE ` -replace '\$SERVICE_ACCOUNT_NAME', $SERVICE_ACCOUNT_NAME ` -replace '\$KVUrl', $KVUrl ` -replace '\$KVSecretName', $KVSecretName # Apply the YAML configuration $yaml | kubectl --kubeconfig $aks_cluster_name apply -f -
Volgende stappen
In dit artikel hebt u deze geconfigureerd voor het gebruik van een workloadidentiteit ter voorbereiding op toepassingsworkloads voor verificatie met die referentie. U bent nu klaar om uw toepassing te implementeren en deze te configureren voor het gebruik van de workloadidentiteit met de nieuwste versie van de Azure Identity-clientbibliotheek.