Uso de Azure RBAC para la autorización de Kubernetes (versión preliminar)Use Azure RBAC for Kubernetes Authorization (preview)

En la actualidad, ya puede aprovechar la autenticación integrada entre Azure Active Directory (Azure AD) y AKS.Today you can already leverage integrated authentication between Azure Active Directory (Azure AD) and AKS. Cuando está habilitada, esta integración permite a los clientes usar usuarios, grupos o entidades de servicio de Azure AD como asuntos en RBAC de Kubernetes, más información aquí.When enabled, this integration allows customers to use Azure AD users, groups, or service principals as subjects in Kubernetes RBAC, see more here. Esta característica evita tener que administrar por separado las identidades de usuario y las credenciales de Kubernetes.This feature frees you from having to separately manage user identities and credentials for Kubernetes. Sin embargo, todavía tiene que configurar y administrar Azure RBAC y Kubernetes por separado.However, you still have to set up and manage Azure RBAC and Kubernetes RBAC separately. Para más información sobre la autenticación y la autorización con RBAC en AKS, haga clic aquí.For more details on authentication and authorization with RBAC on AKS, see here.

En este documento se describe un nuevo enfoque que permite la administración unificada y el control de acceso en los recursos de Azure, AKS y Kubernetes.This document covers a new approach that allows for the unified management and access control across Azure Resources, AKS, and Kubernetes resources.

Antes de empezarBefore you begin

La capacidad de administrar RBAC para los recursos de Kubernetes de Azure le ofrece la opción de administrar RBAC para los recursos del clúster mediante mecanismos de Kubernetes nativos o de Azure.The ability to manage RBAC for Kubernetes resources from Azure gives you the choice to manage RBAC for the cluster resources either using Azure or native Kubernetes mechanisms. Cuando está habilitada, las entidades de seguridad de Azure AD se validarán exclusivamente con Azure RBAC, mientras que las cuentas de servicio y los usuarios de Kubernetes normales se validan exclusivamente mediante el RBAC de Kubernetes.When enabled, Azure AD principals will be validated exclusively by Azure RBAC while regular Kubernetes users and service accounts are exclusively validated by Kubernetes RBAC. Para más información sobre la autenticación y autorización con RBAC en AKS, haga clic aquí.For more details on authentication and authorization with RBAC on AKS, see here.

Importante

Las características en versión preliminar de AKS están disponibles como opción de participación y autoservicio.AKS preview features are available on a self-service, opt-in basis. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y la garantía limitada.Previews are provided "as is" and "as available," and they're excluded from the service-level agreements and limited warranty. Las versiones preliminares de AKS reciben cobertura parcial del soporte al cliente en la medida de lo posible.AKS previews are partially covered by customer support on a best-effort basis. Por lo tanto, estas características no están diseñadas para su uso en producción.As such, these features aren't meant for production use. Las características en versión preliminar de AKS no están disponibles en nubes de Azure Government ni Azure China 21Vianet.AKS preview features aren't available in Azure Government or Azure China 21Vianet clouds. Para más información, consulte los siguientes artículos de soporte:For more information, see the following support articles:

Requisitos previosPrerequisites

  • Asegúrese de que tiene la versión 2.9.0 de la CLI de Azure o una posterior.Ensure you have the Azure CLI version 2.9.0 or later
  • Asegúrese de que tiene habilitada la EnableAzureRBACPreview marca de características.Ensure you have the EnableAzureRBACPreview feature flag enabled.
  • Asegúrese de que tiene instalada la extensión de la CLI aks-preview v 0.4.55 o superior.Ensure you have the aks-preview CLI extension v0.4.55 or higher installed
  • Asegúrese de que ha instalado kubectl v 1.18.3 +.Ensure you have installed kubectl v1.18.3+.

Registro de la característica en vista previa (GB) de EnableAzureRBACPreviewRegister EnableAzureRBACPreview preview feature

A fin de crear un clúster de AKS que use Azure RBAC para la autorización de Kubernetes, debe habilitar la marca de característica EnableAzureRBACPreview en su suscripción.To create an AKS cluster that uses Azure RBAC for Kubernetes Authorization, you must enable the EnableAzureRBACPreview feature flag on your subscription.

Registro de EnableAzureRBACPreview la marca de característica con el comando de característica de registro az, tal como se muestra en el siguiente ejemplo:Register the EnableAzureRBACPreview feature flag using the az feature register command as shown in the following example:

az feature register --namespace "Microsoft.ContainerService" --name "EnableAzureRBACPreview"

Puede comprobar el estado de registro con el comando az feature list:You can check on the registration status using the az feature list command:

az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/EnableAzureRBACPreview')].{Name:name,State:properties.state}"

Cuando todo esté listo, actualice el registro del proveedor de recursos Microsoft.ContainerService con el comando az provider register:When ready, refresh the registration of the Microsoft.ContainerService resource provider using the az provider register command:

az provider register --namespace Microsoft.ContainerService

Instalación de la extensión aks-preview de la CLIInstall aks-preview CLI extension

Para crear un clúster de AKS que use un Azure RBAC, necesita la versión 0.4.55 o superior de la extensión de la CLI aks-preview.To create an AKS cluster that uses Azure RBAC, you need the aks-preview CLI extension version 0.4.55 or higher. Instale la extensión de la CLI de Azure aks-preview con el comando az extension add o instale las actualizaciones disponibles con el comando az extension update:Install the aks-preview Azure CLI extension using the az extension add command, or install any available updates using the az extension update command:

# Install the aks-preview extension
az extension add --name aks-preview

# Update the extension to make sure you have the latest version installed
az extension update --name aks-preview

LimitacionesLimitations

  • Requiere integración administrada de Azure AD.Requires Managed Azure AD integration.
  • No se puede integrar Azure RBAC para la autorización de Kubernetes en clústeres existentes durante la versión preliminar, pero podrá usar la disponibilidad general (GA).You can't integrate Azure RBAC for Kubernetes authorization into existing clusters during preview, but you will be able to at General Availability (GA).
  • Use kubectl v1.18.3+.Use kubectl v1.18.3+.
  • Si tiene CRDs y está realizando definiciones de roles personalizados, la única manera de abarcar CRDs hoy es proporcionar Microsoft.ContainerService/managedClusters/*/read.If you have CRDs and are making custom role definitions, the only way to cover CRDs today is to provide Microsoft.ContainerService/managedClusters/*/read. AKS trabaja para proporcionar permisos más granulares para CRDs.AKS is working on providing more granular permissions for CRDs. Para el resto de objetos, puede usar los grupos de API específicos, por ejemplo: Microsoft.ContainerService/apps/deployments/read.For the remaining objects you can use the specific API Groups, for example: Microsoft.ContainerService/apps/deployments/read.
  • Las nuevas asignaciones de roles pueden tardar hasta 5 minutos en propagarse y actualizarse mediante el servidor de autorización.New role assignments can take up to 5min to propagate and be updated by the authorization server.
  • Es necesario que el inquilino de Azure AD configurado para la autenticación sea el mismo que el de la suscripción que contiene el clúster de AKS.Requires the Azure AD tenant configured for authentication to be the same as the tenant for the subscription that holds the AKS cluster.

Crear un nuevo clúster con Azure RBAC y la integración administrada de Azure ADCreate a new cluster using Azure RBAC and managed Azure AD integration

Crear un clúster de AKS con los siguientes comandos de la CLI.Create an AKS cluster by using the following CLI commands.

Crear un grupo de recursos de Azure:Create an Azure resource group:

# Create an Azure resource group
az group create --name myResourceGroup --location westus2

Cree el clúster de AKS con la integración administrada de Azure AD y Azure RBAC para la autorización de Kubernetes.Create the AKS cluster with managed Azure AD integration and Azure RBAC for Kubernetes Authorization.

# Create an AKS-managed Azure AD cluster
az aks create -g MyResourceGroup -n MyManagedCluster --enable-aad --enable-azure-rbac

Una creación correcta de un clúster con la integración de Azure AD y Azure RBAC para la autorización de Kubernetes tiene la siguiente sección en el cuerpo de respuesta:A successful creation of a cluster with Azure AD integration and Azure RBAC for Kubernetes Authorization has the following section in the response body:

"AADProfile": {
    "adminGroupObjectIds": null,
    "clientAppId": null,
    "enableAzureRbac": true,
    "managed": true,
    "serverAppId": null,
    "serverAppSecret": null,
    "tenantId": "****-****-****-****-****"
  }

Crear asignaciones de roles para que los usuarios accedan al clúster.Create role assignments for users to access cluster

AKS proporciona los siguientes cuatro roles integrados:AKS provides the following four built-in roles:

RoleRole DescripciónDescription
Lector de RBAC de Azure Kubernetes ServiceAzure Kubernetes Service RBAC Reader Permite el acceso de solo lectura para ver la mayoría de los objetos en un espacio de nombres.Allows read-only access to see most objects in a namespace. No permite la visualización de roles o enlaces de roles.It doesn't allow viewing roles or role bindings. Este rol no permite visualización Secrets, ya que leer el contenido de los secretos permite el acceso a las credenciales de ServiceAccount en el espacio de nombres, que permitiría el acceso a la API como cualquier ServiceAccount en el espacio de nombres (una forma de elevación de privilegios).This role doesn't allow viewing Secrets, since reading the contents of Secrets enables access to ServiceAccount credentials in the namespace, which would allow API access as any ServiceAccount in the namespace (a form of privilege escalation)
Escritura de Azure Kubernetes Service RBACAzure Kubernetes Service RBAC Writer Permite el acceso de lectura y escritura para ver la mayoría de los objetos en un espacio de nombres.Allows read/write access to most objects in a namespace. Este rol no permite la visualización o modificación de roles o enlaces de roles.This role doesn't allow viewing or modifying roles or role bindings. Sin embargo, este rol permite acceder a Secrets y ejecutar pods como cualquier ServiceAccount en el espacio de nombres, por lo que se puede usar para obtener los niveles de acceso de la API de cualquier ServiceAccount en el espacio de nombres.However, this role allows accessing Secrets and running Pods as any ServiceAccount in the namespace, so it can be used to gain the API access levels of any ServiceAccount in the namespace.
Administrador de Azure Kubernetes Service RBACAzure Kubernetes Service RBAC Admin Permite el acceso de administrador, diseñado para su concesión dentro de un espacio de nombres.Allows admin access, intended to be granted within a namespace. Permite el acceso de lectura y escritura a la mayoría de los recursos de un espacio de nombres (o ámbito de clúster), incluida la capacidad de crear roles y enlaces de roles dentro del espacio de nombres.Allows read/write access to most resources in a namespace (or cluster scope), including the ability to create roles and role bindings within the namespace. Este rol no permite el acceso de escritura a la cuota de recursos o al espacio de nombres en sí.This role doesn't allow write access to resource quota or to the namespace itself.
Administrador de clúster de Azure Kubernetes Service RBACAzure Kubernetes Service RBAC Cluster Admin Permite el acceso de superusuario para realizar cualquier acción en cualquier recurso.Allows super-user access to perform any action on any resource. Proporciona control total sobre todos los recursos del clúster y en todos los espacios de nombres.It gives full control over every resource in the cluster and in all namespaces.

Las asignaciones de roles que tienen como ámbito el clúster de AKS completo se pueden realizar en la hoja Access Control (IAM) del recurso de clúster en Azure Portal o mediante comandos de CLI de Azure, como se muestra a continuación:Roles assignments scoped to the entire AKS cluster can be done either on the Access Control (IAM) blade of the cluster resource on Azure portal or by using Azure CLI commands as shown below:

# Get your AKS Resource ID
AKS_ID=$(az aks show -g MyResourceGroup -n MyManagedCluster --query id -o tsv)
az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID

donde <AAD-ENTITY-ID> podría ser un nombre de usuario (por ejemplo, user@contoso.com) o incluso el ClientID de una entidad de servicio.where <AAD-ENTITY-ID> could be a username (for example, user@contoso.com) or even the ClientID of a service principal.

También puede crear asignaciones de roles en el ámbito de un espacio de nombres específico dentro del clúster:You can also create role assignments scoped to a specific namespace within the cluster:

az role assignment create --role "Azure Kubernetes Service RBAC Viewer" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>

En la actualidad, las asignaciones de roles cuyo ámbito son los espacios de nombres deben configurarse mediante CLI de Azure.Today, role assignments scoped to namespaces need to be configured via Azure CLI.

Creación de definición de roles personalizadosCreate custom roles definitions

Opcionalmente, puede optar por crear su propia definición de rol y, a continuación, asignarla como se indicó anteriormente.Optionally you may choose to create your own role definition and then assign as above.

A continuación se muestra un ejemplo de una definición de roles que permite a un usuario leer solo las implementaciones y nada más.Below is an example of a role definition that allows a user to only read deployments and nothing else. Puede consultar la lista completa de acciones posibles aquí.You can check the full list of possible actions here.

Copie el siguiente JSON en un archivo denominado deploy-view.json.Copy the below json into a file called deploy-view.json.

{
    "Name": "AKS Deployment Viewer",
    "Description": "Lets you view all deployments in cluster/namespace.",
    "Actions": [],
    "NotActions": [],
    "DataActions": [
        "Microsoft.ContainerService/managedClusters/apps/deployments/read"
    ],
    "NotDataActions": [],
    "assignableScopes": [
        "/subscriptions/<YOUR SUBSCRIPTION ID>"
    ]
}

Reemplace <YOUR SUBSCRIPTION ID> por el id. de la suscripción, que puede obtener al ejecutar:Replace <YOUR SUBSCRIPTION ID> by the ID from your subscription, which you can get by running:

az account show --query id -o tsv

Ahora se puede crear la definición de roles al ejecutar el comando siguiente desde la carpeta donde se guardó deploy-view.json:Now we can create the role definition by running the below command from the folder where you saved deploy-view.json:

az role definition create --role-definition @deploy-view.json 

Ahora que tiene la definición de rol, puede asignarla a un usuario u otra identidad mediante la ejecución de:Now that you have your role definition, you can assign it to a user or other identity by running:

az role assignment create --role "AKS Deployment Viewer" --assignee <AAD-ENTITY-ID> --scope $AKS_ID

Uso de Azure RBAC para la autorización de Kubernetes con kubectl.Use Azure RBAC for Kubernetes Authorization with kubectl

Nota

Asegúrese de que dispone de la versión más reciente de kubectl al ejecutar el comando siguiente:Ensure you have the latest kubectl by running the below command:

az aks install-cli

Es posible que tenga que ejecutarlo con los privilegios de sudo.You might need to run it with sudo privileges.

Ahora que ha asignado el rol y los permisos deseados.Now that you have assigned your desired role and permissions. Puede empezar a llamar a la API de Kubernetes, por ejemplo, desde kubectl.You can start calling the Kubernetes API, for example, from kubectl.

Para este propósito, primero vamos a obtener el kubeconfig del clúster con el siguiente comando:For this purpose, let's first get the cluster's kubeconfig using the below command:

az aks get-credentials -g MyResourceGroup -n MyManagedCluster

Importante

Necesitará el rol integrado del usuario del clúster de Azure Kubernetes Service para realizar el paso anterior.You'll need the Azure Kubernetes Service Cluster User built-in role to perform the step above.

Ahora puede usar kubectl para, por ejemplo, enumerar los nodos del clúster.Now, you can use kubectl to, for example, list the nodes in the cluster. La primera vez que la ejecute, deberá iniciar sesión y los comandos subsiguientes usarán el token de acceso correspondiente.The first time you run it you'll need to sign in, and subsequent commands will use the respective access token.

kubectl get nodes
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.

NAME                                STATUS   ROLES   AGE    VERSION
aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11

Uso de Azure RBAC para la autorización de Kubernetes con kubelogin.Use Azure RBAC for Kubernetes Authorization with kubelogin

Para desbloquear escenarios adicionales, como los inicios de sesión no interactivos, las versiones de kubectl anteriores o el uso de SSO en varios clústeres sin necesidad de iniciar sesión en el nuevo clúster, admitiendo que el token siga siendo válido, AKS creó un complemento exec denominado kubelogin.To unblock additional scenarios like non-interactive logins, older kubectl versions or leveraging SSO across multiple clusters without the need to sign in to new cluster, granted that your token is still valid, AKS created an exec plugin called kubelogin.

Puede usarlo mediante la ejecución de:You can use it by running:

export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig

La primera vez, tendrá que iniciar sesión de forma interactiva como con el kubectl regular, pero después ya no tendrá que hacerlo, incluso para los nuevos clústeres de Azure AD (siempre que el token siga siendo válido).The first time, you'll have to sign in interactively like with regular kubectl, but afterwards you'll no longer need to, even for new Azure AD clusters (as long as your token is still valid).

kubectl get nodes
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.

NAME                                STATUS   ROLES   AGE    VERSION
aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11

LimpiezaClean up

Limpieza de asignación de rolesClean Role assignment

az role assignment list --scope $AKS_ID --query [].id -o tsv

Copie el identificador o los identificadores de todas las asignaciones que ha realizado y, a continuación,.Copy the ID or IDs from all the assignments you did and then.

az role assignment delete --ids <LIST OF ASSIGNMENT IDS>

Limpieza de la definición de roles.Clean up role definition

az role definition delete -n "AKS Deployment Viewer"

Eliminar clúster y grupo de recursos.Delete cluster and resource group

az group delete -n MyResourceGroup

Pasos siguientesNext steps

  • Obtenga más información aquí sobre la autenticación de AKS, la autorización, RBAC de Kubernetes y Azure RBAC.Read more about AKS Authentication, Authorization, Kubernetes RBAC, and Azure RBAC here.
  • Obtenga más información sobre Azure RBAC aquí.Read more about Azure RBAC here.
  • Obtenga más información sobre todas las acciones que puede usar para definir de un modo pormenorizado roles de Azure personalizados para la autorización de Kubernetes aquí.Read more about the all the actions you can use to granularly define custom Azure roles for Kubernetes authorization here.