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.
Recomendado: revisar y, posiblemente, cambiar los valores predeterminados
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
Contenido relacionado
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.
- Creación de un controlador de datos en modo de conexión directa con Azure Portal
- Creación de un controlador de datos en modo de conexión indirecta con la CLI
- Creación de un controlador de datos en modo de conexión indirecta con Azure Data Studio
- Creación de un controlador de datos en modo de conectividad indirecta desde Azure Portal mediante un cuaderno de Jupyter Notebook en Azure Data Studio
- Creación de un controlador de datos en modo de conectividad indirecta con herramientas de Kubernetes como
kubectl
ooc