Configurar Azure Workload Identity a AKS
Aquesta pàgina resumeix els elements que cal configurar perquè els descobriments Kubernetes mitjançant kubeconfig d’una instància de Cyberwatch desplegada en un clúster AKS s’autentiquin a l’API de Kubernetes del clúster amb Azure Workload Identity.
Azure Workload Identity es basa en la federació OIDC entre el clúster AKS i Microsoft Entra ID. Així, els pods de Cyberwatch obtenen un testimoni sense cap secret emmagatzemat al clúster. Un webhook de mutació injecta, en crear els pods, les variables d’entorn d’Azure que l’aplicació utilitza després per consultar l’API de Kubernetes.
Configuració a Azure
Clúster AKS
El clúster ha de disposar de les funcionalitats següents:
- l’emissor OIDC activat (
oidcIssuerProfile.enabledatrue) - Workload Identity activat (opció
--enable-workload-identityen crear o actualitzar el clúster). Aleshores, el webhook de mutacióazure-wi-webhookés present al clúster - l’autorització de Kubernetes amb Azure RBAC activada (
aadProfile.enableAzureRbacatrue). Aleshores, els drets d’accés a l’API de Kubernetes es gestionen amb assignacions de rols d’Azure, i no ambClusterRoleBinding
Per als passos següents, cal l’URL de l’emissor OIDC del clúster:
az aks show --resource-group <resource-group> --name <cluster-name> --query oidcIssuerProfile.issuerUrl
Identitat administrada
Creeu una identitat administrada dedicada, de tipus user-assigned, que tindrà els drets d’accés del descobriment.
Credencial federada
Creeu una credencial federada (federated identity credential) a la identitat administrada, amb els paràmetres següents:
- issuer: l’URL de l’emissor OIDC del clúster
- subject: la identitat del compte de servei dedicat que es descriu més avall
- audience:
api://AzureADTokenExchange
El subject té el format següent, on <namespace> és l’espai de noms on està desplegat Cyberwatch i <service-account> és el nom del ServiceAccount:
system:serviceaccount:<namespace>:<service-account>
Assignacions de rols
Assigneu a la identitat administrada el rol Azure Kubernetes Service RBAC Reader a cada clúster AKS que calgui escanejar. Aquest rol autoritza les crides a l’API de Kubernetes del clúster, com ara llistar els pods, els espais de noms i les càrregues de treball.
La credencial federada només s’ha de configurar una vegada, per al clúster que allotja Cyberwatch. Els altres clústers que calgui escanejar només necessiten aquest rol i han de pertànyer al mateix inquilí de Microsoft Entra que la identitat administrada.
Sense aquest rol al clúster, les crides a l’API de Kubernetes fallen amb l’error User does not have access to the resource in Azure.
Configuració al clúster Kubernetes
La configuració s’aplica a l’espai de noms on està desplegat Cyberwatch, cyberwatch als exemples següents.
Compte de servei dedicat
Creeu un ServiceAccount anotat amb el client ID de la identitat administrada:
apiVersion: v1
kind: ServiceAccount
metadata:
name: workload-identity-sa
namespace: cyberwatch
annotations:
azure.workload.identity/client-id: <client-id>
Desplegaments de Cyberwatch
El chart de Helm de Cyberwatch exposa els dos paràmetres necessaris per al desplegament: extraLabels aplica l’etiqueta a la plantilla de pod i serviceAccountName indica el ServiceAccount del pod. El chart no crea el ServiceAccount, que ja ha d’existir a l’espai de noms.
web:
serviceAccountName: workload-identity-sa
extraLabels:
azure.workload.identity/use: "true"
sidekiq:
serviceAccountName: workload-identity-sa
extraLabels:
azure.workload.identity/use: "true"
sidekiqMaster:
serviceAccountName: workload-identity-sa
extraLabels:
azure.workload.identity/use: "true"
sidekiqNode:
serviceAccountName: workload-identity-sa
extraLabels:
azure.workload.identity/use: "true"
Per aplicar el mateix ServiceAccount a tots els components, es pot indicar una sola vegada amb global.serviceAccountName.
Apliqueu els canvis del chart de Helm amb un helm upgrade.
Comprovar el funcionament
Un cop reiniciats els pods, cada pod afectat ha de contenir les variables d’entorn AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_FEDERATED_TOKEN_FILE i AZURE_AUTHORITY_HOST, i també un testimoni projectat a /var/run/secrets/azure/tokens/azure-identity-token:
kubectl -n cyberwatch exec deploy/web -- env | grep AZURE_
A continuació, podeu crear el descobriment Kubernetes mitjançant kubeconfig des de l’aplicació seguint la documentació dels descobriments Kubernetes mitjançant kubeconfig.