Compartir a través de


Funcionamiento de servicios de datos habilitados para Azure Arc con privilegios mínimos

El uso de servicios de datos habilitados para Arc con privilegios mínimos es un procedimiento recomendado de seguridad. Conceda solo a los usuarios y cuentas de servicio los permisos específicos necesarios para realizar las tareas necesarias. Tanto Azure como Kubernetes proporcionan un modelo de control de acceso basado en roles que se puede usar para conceder estos permisos específicos. En este artículo se describen determinados escenarios comunes en los que se debe aplicar la seguridad de privilegios mínimos.

Nota:

En este artículo, se usará el nombre de arc. Si decide usar otro, utilice el mismo nombre en todos. En este artículo, se usa como base la utilidad de la CLI kubectl. Sin embargo, se puede usar cualquier herramienta o sistema que use la API de Kubernetes.

Implementación del controlador de datos de Azure Arc

La implementación del controlador de datos de Azure Arc requiere algunos permisos que se pueden considerar privilegios elevados, como la creación de un espacio de nombres de Kubernetes o la creación de un rol de clúster. Se pueden seguir los pasos siguientes para separar la implementación del controlador de datos en varios pasos, cada uno de los cuales puede realizar un usuario o una cuenta de servicio que tenga los permisos necesarios. Esta separación de tareas garantiza que cada cuenta de usuario o servicio del proceso tenga solo los permisos necesarios y nada más.

Implementación de un espacio de nombres en el que se generará el controlador de datos

Este paso creará un nuevo espacio de nombres de Kubernetes dedicado en el que se implementará el controlador de datos de Arc. Es esencial realizar este paso primero, ya que los pasos siguientes usarán este nuevo espacio de nombres como ámbito para los permisos que se conceden.

Permisos necesarios para realizar esta acción:

  • Espacio de nombres
    • Create
    • Edición (si es necesario para clústeres de OpenShift)

Ejecute un comando similar al siguiente para crear un espacio de nombres dedicado en el que se generará el controlador de datos.

kubectl create namespace arc

Si va a usar OpenShift, tendrá que editar las anotaciones openshift.io/sa.scc.supplemental-groups y openshift.io/sa.scc.uid-range en el espacio de nombres usando kubectl edit namespace <name of namespace>. Cambie estas anotaciones ya existentes para que coincidan con este UID y estos Ids. fsGroup/rangos específicos.

openshift.io/sa.scc.supplemental-groups: 1000700001/10000
openshift.io/sa.scc.uid-range: 1000700001/10000

Asignación de permisos a la cuenta de servicio de implementación y usuarios o grupos

Este paso creará una cuenta de servicio y asignará roles y roles de clúster a la cuenta de servicio para que la cuenta de servicio se pueda usar en un trabajo para implementar el controlador de datos de Arc con los privilegios mínimos necesarios.

Permisos necesarios para realizar esta acción:

  • Cuenta de servicio
    • Create
  • Role
    • Create
  • Enlace de roles
    • Create
  • Rol de clúster
    • Create
  • Enlace de rol de clúster
    • Create
  • Todos los permisos que se conceden a la cuenta de servicio (consulte arcdata-deployer.yaml a continuación para obtener más información).

Guarde una copia de arcdata-deployer.yaml y reemplace el marcador de posición {{NAMESPACE}} del archivo por el espacio de nombres creado en el paso anterior, por ejemplo, arc. Ejecute el siguiente comando para crear la cuenta de servicio del implementador con el archivo editado.

kubectl apply --namespace arc -f arcdata-deployer.yaml

Concesión de permisos a los usuarios para crear el trabajo del programa previo y el controlador de datos

Permisos necesarios para realizar esta acción:

  • Role
    • Create
  • Enlace de roles
    • Create

Guarde una copia de arcdata-installer.yaml y reemplace el marcador de posición {{INSTALLER_USERNAME}} en el archivo por el nombre del usuario para conceder los permisos, por ejemplo: john@contoso.com. Agregue temas de enlace de roles adicionales, como otros usuarios o grupos según sea necesario. Ejecute el siguiente comando para crear los permisos del instalador con el archivo editado.

kubectl apply --namespace arc -f arcdata-installer.yaml

Implementación del trabajo del programa previo

Permisos necesarios para realizar esta acción:

  • Usuario asignado al rol arcdata-installer-role en el paso anterior

Ejecute el siguiente comando para crear el trabajo del programa previo que ejecutará los pasos preparatorios para implementar el controlador de datos.

kubectl apply --namespace arc -f https://raw.githubusercontent.com/microsoft/azure_arc/main/arc_data_services/deploy/yaml/bootstrapper.yaml

Creación del controlador de datos de Azure Arc

Ya puede crear su propio controlador de datos.

En primer lugar, cree una copia del archivo de plantilla localmente en el equipo para que pueda modificar algunos de los valores de la configuración.

Creación de las métricas y registros de los paneles de nombres de usuario y contraseñas

En la parte superior del archivo, puede especificar un nombre de usuario y una contraseña para autenticarse en los paneles de métricas y registros como administrador. Elija una contraseña segura y compártala solo con aquellos usuarios que necesiten tener estos privilegios.

Un secreto de Kubernetes se almacena como una cadena codificada en Base64, una para el nombre de usuario y otra para la contraseña.

echo -n '<your string to encode here>' | base64
# echo -n 'example' | base64

Opcionalmente, puede crear certificados SSL/TLS para los paneles de registros y métricas. Siga las instrucciones en Especificar certificados SSL/TLS durante el despliegue de las herramientas nativas de Kubernetes.

Edición de la configuración del controlador de datos

Edición de la configuración del controlador de datos según sea necesario:

OBLIGATORIO

  • location: cambie esta opción para que sea la ubicación de Azure donde se almacenarán los metadatos sobre el controlador de datos. Revise la lista de regiones disponibles.
  • logsui-certificate-secret: el nombre del secreto creado en el clúster de Kubernetes para el certificado de interfaz de usuario de registros.
  • metricsui-certificate-secret: el nombre del secreto creado en el clúster de Kubernetes para el certificado de interfaz de usuario de métricas.

Revise estos valores y actualice para la implementación:

  • storage..className: la clase de almacenamiento que se va a usar para los archivos de registro y datos del controlador de datos. Si no sabe con seguridad cuáles son las clases de almacenamiento disponibles en el clúster de Kubernetes, puede ejecutar el siguiente comando: kubectl get storageclass. El valor predeterminado es predeterminado, que da por sentado que hay una clase de almacenamiento que existe y que se denomina predeterminado, y no que hay una clase de almacenamiento que sea la predeterminada. Nota: Hay dos configuraciones de className que se deben establecer en la clase de almacenamiento deseada: una para los datos y otra para los registros.

  • serviceType: Cambie el tipo de servicio a NodePort si usted no usa un equilibrador de carga.

  • Seguridad: para Red Hat OpenShift en Azure o Red Hat OpenShift Container Platform, reemplace la configuración de seguridad por los siguientes valores en el archivo .yaml del controlador de datos.

    security:
      allowDumps: false
      allowNodeMetricsCollection: false
      allowPodMetricsCollection: false
    

Opcionales

Los siguientes parámetros de configuración son opcionales.

  • name: El nombre predeterminado del controlador de datos es arc, pero puede cambiarlo si lo desea.
  • displayName: establezca este valor en el mismo valor que el atributo name en la parte superior del archivo.
  • registry: Microsoft Container Registry es el valor predeterminado. Si extrae las imágenes de Microsoft Container Registry y las inserta en un registro de contenedor privado, escriba aquí la dirección IP o el nombre DNS del registro.
  • dockerRegistry: secreto que se va a usar para extraer las imágenes de un registro de contenedor privado si es necesario.
  • repository: El repositorio predeterminado de Microsoft Container Registry es arcdata. Si usa un registro de contenedor privado, escriba la ruta de acceso de la carpeta o del repositorio que incluyen las imágenes de contenedor de servicios de datos habilitados para Azure Arc.
  • imageTag: la etiqueta de versión más reciente actual está predeterminada en la plantilla, pero puede cambiarla si desea usar una versión anterior.
  • logsui-certificate-secret: el nombre del secreto creado en el clúster de Kubernetes para el certificado de interfaz de usuario de registros.
  • metricsui-certificate-secret: el nombre del secreto creado en el clúster de Kubernetes para el certificado de interfaz de usuario de métricas.

En el ejemplo siguiente se muestra un .yaml del controlador de datos completado.

apiVersion: v1
data:
  password: <your base64 encoded password>
  username: <your base64 encoded username>
kind: Secret
metadata:
  name: metricsui-admin-secret
type: Opaque

---

apiVersion: v1
data:
  password: <your base64 encoded password>
  username: <your base64 encoded username>
kind: Secret
metadata:
  name: logsui-admin-secret
type: Opaque

---

apiVersion: arcdata.microsoft.com/v5
kind: DataController
metadata:
  name: arc-dc
spec:
  credentials:
    dockerRegistry: arc-private-registry # Create a registry secret named 'arc-private-registry' if you are going to pull from a private registry instead of MCR.
    serviceAccount: sa-arc-controller
  docker:
    imagePullPolicy: Always
    imageTag: v1.33.0_2024-09-10
    registry: mcr.microsoft.com
    repository: arcdata
  infrastructure: other # Must be a value in the array [alibaba, aws, azure, gcp, onpremises, other]
  security:
    allowDumps: true # Set this to false if deploying on OpenShift
    allowNodeMetricsCollection: true # Set this to false if deploying on OpenShift
    allowPodMetricsCollection: true # Set this to false if deploying on OpenShift
  services:
  - name: controller
    port: 30080
    serviceType: LoadBalancer # Modify serviceType based on your Kubernetes environment
  settings:
    ElasticSearch:
      vm.max_map_count: "-1"
    azure:
      connectionMode: indirect # Only indirect is supported for Kubernetes-native deployment for now.
      location: eastus # Choose a different Azure location if you want
      resourceGroup: <your resource group>
      subscription: <your subscription GUID>
    controller:
      displayName: arc-dc
      enableBilling: true
      logs.rotation.days: "7"
      logs.rotation.size: "5000"
  storage:
    data:
      accessMode: ReadWriteOnce
      className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
      size: 15Gi
    logs:
      accessMode: ReadWriteOnce
      className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
      size: 10Gi

Guarde el archivo editado en el equipo local y ejecute el siguiente comando para crear el controlador de datos:

kubectl create --namespace arc -f <path to your data controller file>

#Example
kubectl create --namespace arc -f data-controller.yaml

Supervisión del estado de creación

La creación del controlador tardará unos minutos en completarse. Puede supervisar el progreso en otra ventana de terminal con los siguientes comandos:

kubectl get datacontroller --namespace arc
kubectl get pods --namespace arc

También puede comprobar el estado de creación o logs de un pod determinado ejecutando un comando como el siguiente. Esto es especialmente útil para solucionar problemas.

kubectl describe pod/<pod name> --namespace arc
kubectl logs <pod name> --namespace arc

#Example:
#kubectl describe pod/control-2g7bl --namespace arc
#kubectl logs control-2g7b1 --namespace arc

Tiene varias opciones adicionales para crear el controlador de datos de Azure Arc:

¿Solo desea realizar algunas pruebas? Comience a trabajar rápidamente con Azure Arc Jumpstart en AKS, Amazon EKS o GKE, o en una máquina virtual de Azure.