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 explica cómo habilitar una identidad administrada asignada por el usuario en un clúster nuevo o existente de AKS, obtener su ID principal y agregarle una asignación de roles.
Prerrequisitos
Lea la Información general de identidades administradas en Azure Kubernetes Service (AKS) para comprender los distintos tipos de identidades administradas disponibles en AKS y cómo puede usarlos para acceder de forma segura a los recursos de Azure.
Establezca la suscripción como la suscripción activa actual mediante el comando
az account set.az account set --subscription <subscription-id>
Un grupo de recursos de Azure existente. Si no tiene una, puede crearla mediante el
az group createcomando .az group create \ --name <resource-group-name> \ --location <location>
- CLI de Azure versión 2.23.0 o posterior instalada. Ejecute
az --versionpara encontrar la versión. Si necesita instalar o actualizar, consulte Install CLI de Azure. - Para actualizar un clúster existente para usar una identidad administrada asignada por el usuario , necesita CLI de Azure versión 2.49.0 o posterior instalada.
- Terraform instalado localmente. Para obtener instrucciones de instalación, consulte Instalación de Terraform.
Limitaciones
- Una vez que crea un clúster con una identidad administrada, no puede volver a usar un principal de servicio.
- No se admite el traslado o migración de un clúster habilitado para identidad administrada a otro inquilino.
- Si el clúster tiene habilitada la identidad administrada por pods de Microsoft Entra (
aad-pod-identity), los pods de Identidad administrada del nodo (NMI) modifican las tablas de IP de los nodos para interceptar las llamadas que se realizan en el punto de conexión de Azure Instance Metadata (IMDS). Esta configuración significa que NMI intercepta cualquier solicitud realizada al punto de conexión IMDS, incluso si un pod determinado no usaaad-pod-identity.- Puede configurar la definición de recursos personalizados (CRD) de AzurePodIdentityException para especificar que las solicitudes al punto de conexión IMDS que se originan en pods con etiquetas que coincidan con las definidas en el CRD deben redirigirse sin ningún procesamiento en NMI. Excluye los pods del sistema con la etiqueta
kubernetes.azure.com/managedby: aksen el espacio de nombres kube-system enaad-pod-identityconfigurando la CRD de AzurePodIdentityException. Para obtener más información, consulte Uso de identidades administradas por pods de Microsoft Entra en Azure Kubernetes Service (AKS). - Para configurar una excepción, instale el mic-exception YAML.
- Puede configurar la definición de recursos personalizados (CRD) de AzurePodIdentityException para especificar que las solicitudes al punto de conexión IMDS que se originan en pods con etiquetas que coincidan con las definidas en el CRD deben redirigirse sin ningún procesamiento en NMI. Excluye los pods del sistema con la etiqueta
- Las regiones Centro de USDOD, Este de USDOD y USGov Iowa en Azure US Government nube no admiten la creación de un clúster con una identidad administrada asignada por el usuario.
Consideraciones sobre la actualización del clúster
Al actualizar un clúster, tenga en cuenta la siguiente información:
- Una actualización solo funciona si hay una actualización de VHD para consumir. Si ya ejecuta el VHD más reciente, deberá esperar hasta que la siguiente actualización del VHD esté disponible.
- El CLI de Azure garantiza que el permiso del complemento esté configurado correctamente después de la migración. Si no usa el CLI de Azure para realizar la operación de migración, debe controlar el permiso de la identidad del complemento por su cuenta. Para obtener un ejemplo con una plantilla de Azure Resource Manager (ARM), consulte Assign Azure roles mediante plantillas de ARM.
- Si el clúster usaba
--attach-acrpara extraer de imágenes de Azure Container Registry (ACR), debe ejecutar el comandoaz aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id>después de actualizar el clúster para permitir que el kubelet recién creado usado para la identidad administrada obtenga el permiso para extraer de ACR. De lo contrario, no podrá extraer datos desde ACR después de la actualización.
Creación de una identidad administrada asignada por el usuario
Si aún no tienes un recurso de identidad administrada asignada por el usuario, crea uno mediante el comando az identity create.
az identity create \
--name <identity-name> \
--resource-group <resource-group-name>
La salida debería ser similar a la salida de ejemplo siguiente:
{
"clientId": "<client-id>",
"clientSecretUrl": "<clientSecretUrl>",
"id": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>",
"location": "<location>",
"name": "<identity-name>",
"principalId": "<principal-id>",
"resourceGroup": "<resource-group-name>",
"tags": {},
"tenantId": "<tenant-id>",
"type": "Microsoft.ManagedIdentity/userAssignedIdentities"
}
Obtención del id. de cliente de la identidad administrada asignada por el usuario
Obtenga el ID principal de la identidad administrada asignada por el usuario mediante el comando az identity show.
CLIENT_ID=$(az identity show \
--name <identity-name> \
--resource-group <resource-group-name> \
--query principalId \
--output tsv)
Obtención del id. de recurso de la identidad administrada asignada por el usuario
Obtenga el identificador de recurso de la identidad administrada asignada por el usuario mediante el az identity show comando .
RESOURCE_ID=$(az identity show \
--name <identity-name> \
--resource-group <resource-group-name> \
--query id \
--output tsv)
Habilitación de una identidad administrada asignada por el usuario en un nuevo clúster de AKS
Cree un clúster de AKS con una identidad gestionada asignada por el usuario mediante el az aks create comando y el --assign-identity parámetro configurado con el ID del recurso de la identidad gestionada asignada por el usuario.
az aks create \
--resource-group <resource-group-name> \
--name <cluster-name> \
--network-plugin azure \
--vnet-subnet-id <vnet-subnet-id> \
--dns-service-ip 10.2.0.10 \
--service-cidr 10.2.0.0/24 \
--assign-identity $RESOURCE_ID \
--generate-ssh-keys
Actualización de un clúster existente para usar una identidad administrada asignada por el usuario
Actualice un clúster existente para usar una identidad administrada asignada por el usuario mediante el az aks update comando y el --assign-identity parámetro establecido en el identificador de recurso de la identidad administrada asignada por el usuario.
az aks update \
--resource-group <resource-group-name> \
--name <cluster-name> \
--enable-managed-identity \
--assign-identity $RESOURCE_ID
La salida de una actualización correcta del clúster para usar una identidad administrada asignada por el usuario debe ser similar a la del ejemplo siguiente:
...
"identity": {
"principalId": null,
"tenantId": null,
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": {
"clientId": "<client-id>",
"principalId": "<principal-id>"
}
}
},
...
Después de actualizar el clúster para usar una identidad administrada asignada por el usuario en lugar de una entidad de servicio, el plano de control y los pods usan la identidad administrada asignada por el usuario para la autorización al acceder a otros servicios en Azure. Kubelet continuará usando una entidad de servicio hasta que también actualice el grupo de nodos. Una actualización del grupo de nodos provoca un tiempo de inactividad para el clúster de AKS, ya que los nodos de los grupos de nodos se acordonan o purgan y se restablece la imagen inicial. Puede usar el comando en los nodos para actualizar a una identidad administrada asignada por el usuario.
az aks nodepool upgrade \
--resource-group <resource-group-name> \
--cluster-name <aks-cluster-name> \
--name <node-pool-name> \
--node-image-only
Nota:
Migrar la identidad administrada para el plano de control de "asignada por el sistema" a "asignada por el usuario" no provoca ningún tiempo de inactividad para el plano de control ni los grupos de agentes. Los componentes del plano de control continúan utilizando la identidad anterior asignada por el sistema durante un máximo de varias horas, hasta la siguiente actualización del token.
Asignación de un rol de RBAC de Azure a la identidad administrada asignada por el usuario
Agregue una asignación de roles para la identidad administrada asignada por el usuario mediante el az role assignment create comando . En el ejemplo siguiente, se asigna el rol Key Vault Secrets User a la identidad administrada asignada por el usuario para otorgarle permisos para acceder a los secretos en una bóveda de claves. La asignación de roles se limita al recurso del almacén de claves.
az role assignment create \
--assignee <client-id> \
--role "Key Vault Secrets User" \
--scope "<key-vault-resource-id>"
Nota:
Los permisos concedidos a la identidad administrada del clúster pueden tardar hasta 60 minutos en propagarse.
Creación del archivo de configuración de Terraform
Los archivos de configuración de Terraform definen la infraestructura que Terraform crea y administra.
Cree un archivo denominado
main.tfy agregue el código siguiente para definir la versión de Terraform y especifique el proveedor de Azure:terraform { required_version = ">= 1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} }Agregue el código siguiente a
main.tfpara crear un grupo de recursos de Azure. No dude en cambiar el nombre y la ubicación del grupo de recursos según sea necesario.resource "azurerm_resource_group" "example" { name = "aks-rg" location = "East US" }
Creación de un clúster de AKS con una identidad administrada asignada por el usuario mediante Terraform
Agregue el siguiente código en main.tf para crear una identidad administrada asignada por el usuario y un clúster de AKS que use la identidad.
resource "azurerm_user_assigned_identity" "uai" {
name = "aks-user-identity"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
}
resource "azurerm_kubernetes_cluster" "user_assigned" {
name = "aks-user"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
dns_prefix = "aksuser"
identity {
type = "UserAssigned"
identity_ids = [azurerm_user_assigned_identity.uai.id]
}
default_node_pool {
name = "system"
node_count = 1
vm_size = "Standard_DS2_v2"
}
}
Adición de una asignación de roles para una identidad administrada asignada por el usuario mediante Terraform
Agregue el código siguiente a main.tf para crear una asignación de rol para la identidad administrada asignada al usuario. En este ejemplo, se asigna el rol Key Vault Secrets User a la identidad administrada asignada por el usuario para concederle permisos para acceder a secretos en el almacén de claves. La asignación de roles se limita al recurso del almacén de claves.
resource "azurerm_role_assignment" "user_assigned_key_vault_secrets_user" {
scope = azurerm_resource_group.example.id
role_definition_name = "Key Vault Secrets User"
principal_id = azurerm_user_assigned_identity.uai.principal_id
}
Inicialización de Terraform
Inicialice Terraform en el directorio que contiene el archivo main.tf usando el comando terraform init. Este comando descarga el proveedor de Azure necesario para administrar Azure recursos con Terraform.
terraform init
Creación de un plan de ejecución de Terraform
Cree un plan de ejecución de Terraform mediante el comando terraform plan. Este comando muestra los recursos que Terraform creará o modificará en la suscripción de Azure.
terraform plan
Aplica la configuración de Terraform
Después de revisar y confirmar el plan de ejecución, aplique la configuración de Terraform mediante el terraform apply comando . Este comando crea o modifica los recursos definidos en tu archivo main.tf en tu suscripción de Azure.
terraform apply
Comprobación de la implementación de Terraform
Después de aplicar la configuración de Terraform, puede comprobar la implementación mediante el comando [az aks show][az-aks-show] con el --query parámetro para filtrar la salida y mostrar la información de identidad. Por ejemplo:
az aks show \
--name <cluster-name> \
--resource-group <resource-group> \
--query identity.type \
--output tsv
Contenido relacionado
Para más información sobre las identidades administradas en AKS, consulte los artículos siguientes: