Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se muestra cómo crear la cuenta de servicio necesaria y, opcionalmente, configurar la identidad de carga de trabajo para la CLI agente para Azure Kubernetes Service (AKS). La creación de la cuenta de servicio es obligatoria para la implementación del modo de clúster, mientras que la configuración de la identidad de carga de trabajo es opcional, pero se recomienda para mejorar la seguridad al acceder a los recursos de Azure.
Prerrequisitos
Requisitos previos de creación de cuentas de servicio:
Cli de Azure versión 2.76 o posterior. Compruebe la versión con el comando
az version. Para instalar o actualizar, consulte Instalación de la CLI de Azure.Establezca la suscripción de Azure activa mediante el
az account setcomando .az account set --subscription "your-subscription-id-or-name"Necesita permisos suficientes para crear y administrar cuentas de servicio, roles y enlaces de rol de Kubernetes.
Requisitos previos de configuración de identidad de carga de trabajo:
- Identidad de trabajo habilitada para su clúster de AKS.
- Necesita permisos suficientes para crear y administrar identidades administradas de Azure y crear credenciales de identidad federada.
Definición de variables
En primer lugar, configure las variables necesarias para el entorno. Reemplace los valores de marcador de posición con tu clúster real y tus detalles de Azure.
Variables necesarias para la creación de cuentas de servicio:
# Cluster information
export RESOURCE_GROUP="<YOUR_RESOURCE_GROUP>"
export CLUSTER_NAME="<YOUR_CLUSTER_NAME>"
# Service account configuration
export SERVICE_ACCOUNT_NAME="aks-mcp"
export SERVICE_ACCOUNT_NAMESPACE="<YOUR_NAMESPACE>" # e.g., "kube-system" or custom namespace
Variables adicionales (solo si configura la identidad de carga de trabajo):
# Azure information for workload identity
export LOCATION="<YOUR_LOCATION>"
export SUBSCRIPTION="$(az account show --query id --output tsv)"
# Workload identity configuration
export USER_ASSIGNED_IDENTITY_NAME="aks-mcp-identity"
export FEDERATED_IDENTITY_CREDENTIAL_NAME="aks-mcp-fed-identity"
# Generate unique suffix for resource naming
export RANDOM_ID="$(openssl rand -hex 3)"
Creación de una cuenta de servicio de Kubernetes y asignación de permisos (obligatorios)
Importante
La cuenta de servicio es necesaria para que la CLI agente se autentique con el clúster de AKS en modo de clúster.
Creación de la cuenta de servicio
Cree la cuenta de servicio en el espacio de nombres de destino mediante el comando siguiente:
kubectl create serviceaccount "${SERVICE_ACCOUNT_NAME}" --namespace "${SERVICE_ACCOUNT_NAMESPACE}"
Creación de permisos de RBAC
Cree el Role y RoleBinding necesarios para la cuenta de servicio con acceso de lectura para la resolución de problemas de aks-mcp. Estos son dos ejemplos en función de los requisitos de acceso:
Acceso de lectura para todo el clúster (recomendado para administradores de clústeres)
Use este ClusterRoleBinding para conceder acceso de solo lectura a todos los recursos de Kubernetes, excepto a los secretos, en todos los espacios de nombres. Esta opción se recomienda para administradores de nivel de clúster o ingenieros de DevOps que necesiten investigar y solucionar problemas en todo el clúster.
cat <<EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: aks-mcp-view-rolebinding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: view subjects: - kind: ServiceAccount name: ${SERVICE_ACCOUNT_NAME} namespace: ${SERVICE_ACCOUNT_NAMESPACE} EOFCompruebe que los recursos se crearon correctamente mediante los siguientes comandos:
kubectl get serviceaccount "${SERVICE_ACCOUNT_NAME}" --namespace "${SERVICE_ACCOUNT_NAMESPACE}" kubectl get clusterrolebinding aks-mcp-view-rolebinding
Acceso de lectura con ámbito de espacio de nombres (para escenarios de acceso limitado)
Use RoleBindings para conceder acceso de solo lectura a todos los recursos de Kubernetes, excepto a los secretos, únicamente en espacios de nombres específicos. Esta opción es adecuada para equipos o usuarios que deben tener acceso limitado a espacios de nombres específicos en lugar de a todo el clúster. Repita este RoleBinding para cada espacio de nombres que requiera acceso.
cat <<EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: aks-mcp-view-rolebinding namespace: ${SERVICE_ACCOUNT_NAMESPACE} roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: view subjects: - kind: ServiceAccount name: ${SERVICE_ACCOUNT_NAME} namespace: ${SERVICE_ACCOUNT_NAMESPACE} EOFCompruebe que los recursos se crearon correctamente mediante los siguientes comandos:
kubectl get serviceaccount "${SERVICE_ACCOUNT_NAME}" --namespace "${SERVICE_ACCOUNT_NAMESPACE}" kubectl get rolebinding aks-mcp-view-rolebinding --namespace "${SERVICE_ACCOUNT_NAMESPACE}"
Configuración de la identidad de carga de trabajo para el acceso a recursos de Azure (opcional)
Los pasos siguientes son opcionales , pero se recomiendan si desea habilitar la CLI agente para acceder a los recursos de Azure de forma segura mediante la identidad de carga de trabajo.
Comprobación del estado actual de la identidad de carga de trabajo
Compruebe si la identidad de carga de trabajo ya está habilitada en el clúster de AKS mediante el az aks show comando .
az aks show --resource-group "${RESOURCE_GROUP}" --name "${CLUSTER_NAME}" --query "securityProfile.workloadIdentity.enabled"
Si la salida es true, la identidad de carga de trabajo está habilitada. Si null o false, debe habilitarlo.
Habilitación de la identidad de la carga de trabajo
Habilite la identidad de carga de trabajo en el clúster de AKS mediante el comando az aks update con las banderas --enable-workload-identity y --enable-oidc-issuer.
az aks update \
--resource-group "${RESOURCE_GROUP}" \
--name "${CLUSTER_NAME}" \
--enable-oidc-issuer \
--enable-workload-identity
Recuperación de la dirección URL del emisor de OIDC
Obtenga la dirección URL del emisor de OIDC mediante el az aks show comando y guárdela en una variable de entorno.
export AKS_OIDC_ISSUER="$(az aks show --name "${CLUSTER_NAME}" \
--resource-group "${RESOURCE_GROUP}" \
--query "oidcIssuerProfile.issuerUrl" \
--output tsv)"
La variable de entorno debe contener una dirección URL del emisor similar al ejemplo siguiente:
https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/11111111-1111-1111-1111-111111111111/
Creación de una identidad administrada asignada por el usuario
Cree una identidad administrada asignada por el usuario para el acceso a recursos de Azure mediante el az identity create comando .
az identity create \
--name "${USER_ASSIGNED_IDENTITY_NAME}" \
--resource-group "${RESOURCE_GROUP}" \
--location "${LOCATION}" \
--subscription "${SUBSCRIPTION}"
En el ejemplo de salida siguiente se muestra la creación correcta de una identidad administrada:
{
"clientId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroupxxxxxx/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentityxxxxxx",
"location": "eastus",
"name": "myIdentityxxxxxx",
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"resourceGroup": "myResourceGroupxxxxxx",
"tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "Microsoft.ManagedIdentity/userAssignedIdentities"
}
Obtener el identificador de cliente de identidad administrada
Obtenga el identificador de cliente de la identidad administrada mediante az identity show y guárdelo en una variable de entorno.
export USER_ASSIGNED_CLIENT_ID="$(az identity show \
--resource-group "${RESOURCE_GROUP}" \
--name "${USER_ASSIGNED_IDENTITY_NAME}" \
--query 'clientId' \
--output tsv)"
Asignar el rol necesario a la identidad administrada
Asigne los roles necesarios a la identidad administrada mediante el az role assignment create comando .
En el ejemplo siguiente se asigna el rol "Lector" en el ámbito de la suscripción, lo que permite a la CLI agente leer información de recursos de Azure. Ajuste el rol y el ámbito según sea necesario para el caso de uso.
az role assignment create --role "Reader" \
--assignee $USER_ASSIGNED_CLIENT_ID \
--scope /subscriptions/${SUBSCRIPTION}
Si usa Azure OpenAI con el identificador de Microsoft Entra (autenticación sin clave), también debe asignar el rol "Usuario de Cognitive Services" o "Usuario de Azure AI" en el recurso de Azure OpenAI:
# Option 1: Assign Cognitive Services User role
az role assignment create \
--role "Cognitive Services User" \
--assignee $USER_ASSIGNED_CLIENT_ID \
--scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<openai-resource-name>
# Option 2: Assign Azure AI User role
az role assignment create \
--role "Azure AI User" \
--assignee $USER_ASSIGNED_CLIENT_ID \
--scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<openai-resource-name>
Reemplace <subscription-id>, <resource-group> y <openai-resource-name> con sus valores reales.
Anotar la cuenta de servicio con la identidad de carga de trabajo (opcional)
Actualice la cuenta de servicio para incluir la anotación para la identidad de carga de trabajo mediante el siguiente comando:
kubectl annotate serviceaccount "${SERVICE_ACCOUNT_NAME}" \ --namespace "${SERVICE_ACCOUNT_NAMESPACE}" \ azure.workload.identity/client-id="${USER_ASSIGNED_CLIENT_ID}" \ --overwriteCompruebe que la cuenta de servicio tiene la anotación de identidad de carga de trabajo correcta mediante el siguiente comando:
kubectl describe serviceaccount "${SERVICE_ACCOUNT_NAME}" --namespace "${SERVICE_ACCOUNT_NAMESPACE}"
Creación de una credencial de identidad federada (opcional)
Cree una credencial de identidad federada entre la identidad administrada, el emisor de cuentas de servicio y el asunto mediante el comando
az identity federated-credential create.az identity federated-credential create \ --name "${FEDERATED_IDENTITY_CREDENTIAL_NAME}" \ --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" \ --resource-group "${RESOURCE_GROUP}" \ --issuer "${AKS_OIDC_ISSUER}" \ --subject "system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}" \ --audience api://AzureADTokenExchangeNota:
La credencial de identidad federada tarda unos segundos en propagarse después de agregarla. Si se realiza una solicitud de token inmediatamente después de agregar la credencial de identidad federada, es posible que se produzca un error en la solicitud hasta que se actualice la memoria caché. Para evitar este problema, puede agregar un ligero retraso después de agregar la credencial de identidad federada.
Enumere las credenciales de identidad federada para confirmar la creación mediante el
az identity federated-credential listcomando .az identity federated-credential list \ --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" \ --resource-group "${RESOURCE_GROUP}"