Acerca de control de acceso y Container Engine for Kubernetes

Obtenga información sobre los permisos necesarios para acceder a los clusters que ha creado mediante Container Engine for Kubernetes (OKE).

Para realizar operaciones en un cluster de Kubernetes, debe tener los permisos adecuados para acceder al cluster.

Para la mayoría de las operaciones en clusters de Kubernetes creados y gestionados por Container Engine for Kubernetes, Oracle Cloud Infrastructure Identity and Access Management (IAM) proporciona control de acceso. Los permisos del usuario para acceder a los clusters proceden de los grupos de IAM (incluidos los grupos dinámicos) a los que pertenecen. Los permisos para un grupo se definen mediante políticas. Las políticas definen las acciones que pueden realizar los miembros de un grupo y en qué compartimentos. Los usuarios pueden acceder a los clusters y realizar operaciones basadas en las políticas establecidas para los grupos de los que son miembros.

IAM proporciona control sobre:

  • si un usuario puede crear o suprimir clusters
  • si un usuario puede agregar, eliminar o modificar pools de nodos
  • qué operaciones de creación/supresión/visualización de objetos de Kubernetes puede realizar un usuario en todos los clusters de un compartimento o arrendamiento

Consulte Configuración de políticas para despliegue y creación de clusters.

Además de IAM, el responsable de autorización de Kubernetes RBAC puede aplicar control de acceso detallado adicional para usuarios en clusters específicos mediante ClusterRoles y Roles de Kubernetes RBAC. Un Role de Kubernetes RBAC es una recopilación de permisos. Por ejemplo, un Role puede incluir permisos de lectura en pods y permisos de lista para pods. Un ClusterRole de Kubernetes RBAC es como un Role, pero se puede utilizar en cualquier lugar del cluster. Un enlace de roles RBAC de Kubernetes asigna un rol a un usuario o grupo, otorgando los permisos de ese rol al usuario o grupo para los recursos de ese espacio de nombres. Del mismo modo, un enlace de cluster RBAC de Kubernetes asigna un rol de cluster a un usuario o grupo, otorgando los permisos de ese rol de cluster al usuario o grupo en todo el cluster.

IAM y el responsable de autorización de Kubernetes RBAC trabajan conjuntamente para permitir a los usuarios que han sido autorizados correctamente por al menos uno de ellos que completen la operación de Kubernetes solicitada. Puede utilizar los OCID para asignar enlaces de roles y enlaces de roles de RBAC de Kubernetes a usuarios y grupos de IAM (incluidos los grupos dinámicos).

Cuando un usuario intenta realizar cualquier operación en un cluster (excepto las operaciones de creación de un clusterle), IAM determina si un grupo (o grupo dinámico) al que pertenece el usuario tiene los permisos adecuados y suficientes. Si es así, la operación se realiza correctamente. Si la operación que se intentó realizar también requiere permisos adicionales otorgados mediante un rol o clusterrole de Kubernetes RBAC, el responsable de autorización de Kubernetes RBAC determina si se ha otorgado al usuario o grupo el rol o clusterrole de Kubernetes adecuado.

Normalmente, deseará definir sus propios ClusterRoles y Roles de Kubernetes RBAC al desplegar un cluster de Kubernetes para proporcionar un control detallado adicional. Cuando intenta realizar una operación de creación de Role o creación de ClusterRole, el responsable de autorización de Kubernetes RBAC determina primero si tiene suficientes privilegios de Kubernetes. Para crear un rol o un rol de cluster, debe haber asignado un rol (o rol de cluster) de Kubernetes RBAC existente que tenga al menos los mismos privilegios o privilegios superiores que el nuevo role (o rol de cluster) que está intentando crear.

Por defecto, a los usuarios no se les asigna ningún Role (o ClusterRole) de Kubernetes RBAC. Por lo tanto, antes de intentar crear un nuevo Role (o ClusterRole), debe tener asignado un Role (o ClusterRole) con privilegios adecuados. Por defecto, siempre se crean una serie de Roles y ClusterRoles, incluido el ClusterRole cluster-admin (para obtener una lista completa, consulte Roles y RoleBindings por defecto en la documentación de Kubernetes). El ClusterRole cluster-admin básicamente concede privilegios de superusuario. Un usuario al que se ha otorgado el ClusterRole cluster-admin puede realizar cualquier operación en todos los espacios de nombre de un cluster determinado.

Tenga en cuenta que los administradores de arrendamiento de Oracle Cloud Infrastructure ya tienen suficientes privilegios y no necesitan el ClusterRole cluster-admin.

Ejemplo 1: otorgamiento del rol de cluster de Kubernetes RBAC
Nota

Las siguientes instrucciones asumen que:

  • Tiene el acceso necesario para crear ClusterRoles y Roles de Kubernetes RBAC, ya sea porque está en el grupo Administradores del arrendamiento o porque tiene el ClusterRole cluster-admin de Kubernetes RBAC.
  • El usuario al que desea otorgar el ClusterRole cluster-admin de RBAC no es un administrador de arrendamiento de OCI. Si se trata de un administrador de arrendamiento de OCI, no necesitan el ClusterRole admin-cluster de Kubernetes RBAC.

Siga estos pasos para otorgar a un usuario que no sea administrador de arrendamiento el ClusterRole cluster-admin de Kubernetes RBAC en un cluster desplegado en Oracle Cloud Infrastructure:

  1. Si todavía no lo ha hecho, siga los pasos para configurar el archivo de configuración kubeconfig del cluster y (si es necesario) defina la variable de entorno KUBECONFIG para que apunte al archivo. Tenga en cuenta que debe configurar su propio archivo kubeconfig. No puede acceder a un cluster utilizando un archivo kubeconfig que haya configurado un usuario diferente. Consulte Configuración del acceso a los clusters.
  2. En una ventana de terminal, otorgue el ClusterRole cluster-admin de Kubernetes RBAC al usuario introduciendo:

    
    kubectl create clusterrolebinding <my-cluster-admin-binding> --clusterrole=cluster-admin --user=<user_OCID>

    donde:

    • <my-cluster-admin-binding> es la cadena que desea utilizar como nombre para el enlace entre el usuario y el ClusterRole cluster-admin de Kubernetes RBAC. Por ejemplo, jdoe_clst_adm
    • <user_OCID> es el OCID del usuario (obtenido de la Consola ). Por ejemplo, ocid1.user.oc1..aaaaa...zutq (abreviado para leerse mejor).

    Por ejemplo:

    
    kubectl create clusterrolebinding jdoe_clst_adm --clusterrole=cluster-admin --user=ocid1.user.oc1..aaaaa...zutq
Ejemplo 2: creación de un rol y un enlace de roles de Kubernetes para permitir a un usuario que no sea administrador leer pods en un cluster

Siga estos pasos para proporcionar a un usuario que no sea administrador los permisos necesarios de Oracle Cloud Infrastructure y Kubernetes RBAC para ver pods en ejecución en un cluster de Kubernetes. En este ejemplo, a un usuario que no es administrador se le otorga acceso explícito al cluster (en lugar de como miembro de un grupo).

Como administrador del arrendamiento:

Nota

En las siguientes instrucciones se asume que está en el grupo Administradores del arrendamiento y, por lo tanto, tiene los permisos necesarios para crear usuarios, grupos y políticas de IAM.
  1. Cree una nueva cuenta de usuario de IAM de Oracle Cloud Infrastructure para el usuario que no sea administrador (por ejemplo, jdoe@acme.com). Consulte Para crear un usuario.
  2. Anote el OCID de la nueva cuenta de usuario de IAM (por ejemplo, ocid1.user.oc1..aa______tx5a, abreviado para facilitar la lectura).
  3. Cree un nuevo grupo de IAM de Oracle Cloud Infrastructure (por ejemplo, denominado acme-developer-group) y agregue la nueva cuenta de usuario de IAM al grupo. Consulte Para crear un grupo.
  4. Cree una nueva política de Oracle Cloud Infrastructure que otorgue al nuevo grupo el permiso CLUSTER_USE en clusters, con una sentencia de política como:
    Allow group acme-developer-group to use clusters in <location>

    En la sentencia de política anterior, sustituya <location> por tenancy (si está creando la política en el compartimento raíz del arrendamiento) o compartment <compartment-name> (si está creando la política en un compartimento individual). Consulte Para crear una política.

    Tenga en cuenta que si un grupo no está en el dominio de identidad por defecto, agregue un prefijo al nombre de grupo con el nombre de dominio de identidad, con el formato group '<identity-domain-name>'/'group-name'. También puede especificar un grupo mediante su OCID, con el formato group id <group-ocid>.

Como administrador del cluster:

Nota

En las siguientes instrucciones se asume que tiene los permisos necesarios para crear y gestionar clusters, así como el acceso necesario para crear roles y roles de cluster de RBAC de Kubernetes.
  1. En un editor de texto, cree el siguiente manifiesto (por ejemplo, denominado pod-reader-user.yaml) para definir un enlace de rol y rol de RBAC de Kubernetes para permitir que la nueva cuenta de usuario de IAM muestre los pods en el espacio de nombres kube-system:
    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: pod-reader-ks
      namespace: kube-system
    rules:
    - apiGroups: [""]
      resources: ["pods"]
      verbs: ["get", "watch", "list"]
    ---
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: pod-reader-ks-role-binding
      namespace: kube-system
    subjects:
    - kind: User
      name: <user-ocid>
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: pod-reader-ks
      apiGroup: rbac.authorization.k8s.io
    

    donde name: <user-ocid> especifica el OCID de la nueva cuenta de usuario de IAM que ha creado anteriormente. Por ejemplo, name: ocid1.user.oc1..aa______tx5a

  2. Cree el nuevo rol y el enlace de roles introduciendo:
    kubectl apply -f pod-reader-user.yml

Como usuario no administrador:

Nota

En las siguientes instrucciones se asume que tiene las credenciales de la nueva cuenta de usuario de IAM creada anteriormente. Como tal, tiene los permisos necesarios para utilizar clusters de Kubernetes en el arrendamiento o compartimento.
  1. Conéctese a la consola con las credenciales de la nueva cuenta de usuario de IAM.
  2. Configure el acceso al cluster siguiendo las instrucciones de Configuración del acceso al cluster.
  3. Muestre los pods en el espacio de nombres kube-system introduciendo:
    kubectl get pods -n kube-system
Ejemplo 3: Creación de un rol y un enlace de roles de Kubernetes para permitir a un grupo leer pods en un cluster

Siga estos pasos para proporcionar a los usuarios que no sean administradores de un grupo los permisos necesarios de Oracle Cloud Infrastructure y Kubernetes RBAC para ver pods en ejecución en un cluster de Kubernetes. En este ejemplo, a los usuarios que no son administradores se les otorga acceso al cluster como miembros de un grupo de IAM (podría especificar un grupo dinámico en su lugar).

Como administrador del arrendamiento:

Nota

En las siguientes instrucciones se asume que está en el grupo Administradores del arrendamiento y, por lo tanto, tiene los permisos necesarios para crear usuarios, grupos y políticas de IAM.
  1. Cree una nueva cuenta de usuario de IAM de Oracle Cloud Infrastructure para un usuario que no sea administrador (por ejemplo, jsmith@acme.com). Consulte Para crear un usuario.
  2. Cree un nuevo grupo de IAM de Oracle Cloud Infrastructure (por ejemplo, denominado acme-developer-group) y agregue la nueva cuenta de usuario de IAM al grupo. Consulte Para crear un grupo.
  3. Anote el OCID del nuevo grupo de IAM (por ejemplo, ocid1.group.oc1..aa______m7dt, abreviado para facilitar la lectura).
  4. Cree una nueva política de Oracle Cloud Infrastructure que otorgue al nuevo grupo el permiso CLUSTER_USE en clusters, con una sentencia de política como:
    Allow group acme-developer-group to use clusters in <location>

    En la sentencia de política anterior, sustituya <location> por tenancy (si está creando la política en el compartimento raíz del arrendamiento) o compartment <compartment-name> (si está creando la política en un compartimento individual). Consulte Para crear una política.

    Tenga en cuenta que si un grupo no está en el dominio de identidad por defecto, agregue un prefijo al nombre de grupo con el nombre de dominio de identidad, con el formato group '<identity-domain-name>'/'group-name'. También puede especificar un grupo mediante su OCID, con el formato group id <group-ocid>.

Como administrador del cluster:

Nota

En las siguientes instrucciones se asume que tiene los permisos necesarios para crear y gestionar clusters, así como el acceso necesario para crear roles y roles de cluster de RBAC de Kubernetes.
  1. En un editor de texto, cree el siguiente manifiesto (por ejemplo, denominado pod-reader-group.yaml) para definir un enlace de rol y rol de RBAC de Kubernetes para permitir a los usuarios del nuevo grupo de IAM mostrar los pods en el espacio de nombres kube-system:
    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: pod-reader-ks
      namespace: kube-system
    rules:
    - apiGroups: [""]
      resources: ["pods"]
      verbs: ["get", "watch", "list"]
    ---
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: pod-reader-ks-role-binding
      namespace: kube-system
    subjects:
    - kind: Group
      name: <group-ocid>
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: pod-reader-ks
      apiGroup: rbac.authorization.k8s.io
    

    donde name: <group-ocid> especifica el OCID del nuevo grupo de IAM que ha creado anteriormente. Por ejemplo, name: ocid1.group.oc1..aa______m7dt

  2. Cree el nuevo rol y el enlace de roles introduciendo:
    kubectl apply -f pod-reader-group.yml

Como usuario no administrador:

Nota

En las siguientes instrucciones se asume que tiene las credenciales de la nueva cuenta de usuario de IAM creada anteriormente como miembro del nuevo grupo de IAM. Como tal, tiene los permisos necesarios para utilizar clusters de Kubernetes en el arrendamiento o compartimento.
  1. Conéctese a la consola con las credenciales de la nueva cuenta de usuario de IAM.
  2. Configure el acceso al cluster siguiendo las instrucciones de Configuración del acceso al cluster.
  3. Muestre los pods en el espacio de nombres kube-system introduciendo:
    kubectl get pods -n kube-system
Ejemplo 4: Creación de un ClusterRole y ClusterRoleBinding de Kubernetes para permitir a usuarios y grupos mostrar secretos en un cluster

Siga estos pasos para proporcionar a los usuarios que no sean administradores de un grupo los permisos necesarios de Oracle Cloud Infrastructure y Kubernetes RBAC para ver pods en ejecución en un cluster de Kubernetes. En este ejemplo, a un usuario que no sea administrador se le otorga acceso al cluster de forma explícita o como miembro de un grupo de IAM (podría especificar un grupo dinámico en su lugar).

Como administrador del arrendamiento:

Nota

En las siguientes instrucciones se asume que está en el grupo Administradores del arrendamiento y, por lo tanto, tiene los permisos necesarios para crear usuarios, grupos y políticas de IAM.
  1. Cree una nueva cuenta de usuario de IAM de Oracle Cloud Infrastructure para un usuario que no sea administrador (por ejemplo, jjones@acme.com). Consulte Para crear un usuario.
  2. Si solo desea activar este usuario para que muestre secretos, anote el OCID de la nueva cuenta de usuario de IAM (por ejemplo, ocid1.user.oc1..aa______4gs6, abreviado para facilitar la lectura).
  3. Cree un nuevo grupo de IAM de Oracle Cloud Infrastructure (por ejemplo, denominado acme-developer-group) y agregue la nueva cuenta de usuario de IAM al grupo. Consulte Para crear un grupo.
  4. Si desea permitir que todos los usuarios de este grupo muestren secretos, anote el OCID del nuevo grupo de IAM (por ejemplo, ocid1.group.oc1..aa______e26f, abreviado para facilitar la lectura).
  5. Cree una nueva política de Oracle Cloud Infrastructure que otorgue al nuevo grupo el permiso CLUSTER_USE en clusters, con una sentencia de política como:
    Allow group acme-developer-group to use clusters in <location>

    En la sentencia de política anterior, sustituya <location> por tenancy (si está creando la política en el compartimento raíz del arrendamiento) o compartment <compartment-name> (si está creando la política en un compartimento individual). Consulte Para crear una política.

    Tenga en cuenta que si un grupo no está en el dominio de identidad por defecto, agregue un prefijo al nombre de grupo con el nombre de dominio de identidad, con el formato group '<identity-domain-name>'/'group-name'. También puede especificar un grupo mediante su OCID, con el formato group id <group-ocid>.

Como administrador del cluster:

Nota

En las siguientes instrucciones se asume que tiene los permisos necesarios para crear y gestionar clusters, así como el acceso necesario para crear roles y roles de cluster de RBAC de Kubernetes.
  1. En un editor de texto, realice una de las siguientes acciones, en función de si desea activar solo el nuevo usuario de IAM o todos los usuarios del nuevo grupo de IAM para mostrar secretos en un cluster de Kubernetes:
    • Si solo desea activar el nuevo usuario de IAM para que muestre secretos en un cluster de Kubernetes, cree el siguiente manifiesto (por ejemplo, denominado secrets-reader.yaml):
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: secret-reader
      rules:
      - apiGroups: [""]
        resources: ["secrets"]
        verbs: ["get", "watch", "list"]
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: read-secrets-global
      subjects:
      - kind: User
        name: <user-ocid>
        apiGroup: rbac.authorization.k8s.io
      roleRef:
        kind: ClusterRole
        name: secret-reader
        apiGroup: rbac.authorization.k8s.io
      

      donde name: <user-ocid> especifica el OCID del nuevo usuario de IAM que ha creado anteriormente. Por ejemplo, name: ocid1.user.oc1..aa______4gs6

    • Si desea permitir que todos los usuarios del nuevo grupo de IAM muestren secretos en un cluster de Kubernetes, cree el siguiente manifiesto (por ejemplo, denominado secrets-reader.yaml):
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: secret-reader
      rules:
      - apiGroups: [""]
        resources: ["secrets"]
        verbs: ["get", "watch", "list"]
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: read-secrets-global
      subjects:
      - kind: Group
        name: <group-ocid>
        apiGroup: rbac.authorization.k8s.io
      roleRef:
        kind: ClusterRole
        name: secret-reader
        apiGroup: rbac.authorization.k8s.io
      

      donde name: <group-ocid> es el OCID del nuevo grupo de IAM que ha creado anteriormente. Por ejemplo, ocid1.group.oc1..aa______e26f

  2. Cree el nuevo ClusterRole y ClusterRoleBinding introduciendo:
    kubectl apply -f secret-reader.yml

Como usuario no administrador:

Nota

En las siguientes instrucciones se asume que tiene las credenciales de la nueva cuenta de usuario de IAM creada anteriormente como miembro del nuevo grupo de IAM. Como tal, tiene los permisos necesarios para utilizar clusters de Kubernetes en el arrendamiento o compartimento de forma explícita o como miembro de un grupo.
  1. Conéctese a la consola con las credenciales de la nueva cuenta de usuario de IAM.
  2. Configure el acceso al cluster siguiendo las instrucciones de Configuración del acceso al cluster.
  3. Muestre los secretos en todos los espacios de nombres introduciendo:
    kubectl get secrets --all-namespaces