Condividi tramite


Usare i servizi dati abilitati per Azure Arc con privilegi minimi

L'uso di servizi dati abilitati per Arc con privilegi minimi è una procedura consigliata per la sicurezza. Concedere solo agli utenti e agli account del servizio le autorizzazioni specifiche necessarie per eseguire le attività necessarie. Sia Azure che Kubernetes forniscono un modello di controllo degli accessi in base al ruolo che può essere usato per concedere queste autorizzazioni specifiche. Questo articolo descrive alcuni scenari comuni in cui deve essere applicata la sicurezza dei privilegi minimi.

Nota

In questo articolo verrà usato un nome dello spazio dei nomi di arc. Se si sceglie di usare un nome diverso, usare lo stesso nome. In questo articolo l'utilità dell'interfaccia della riga di comando di kubectl viene usata come esempio. È tuttavia possibile usare qualsiasi strumento o sistema che usa l'API Kubernetes.

Distribuire il controller dei dati di Azure Arc

La distribuzione del controller dati di Azure Arc richiede alcune autorizzazioni che possono essere considerate privilegi elevati, ad esempio la creazione di uno spazio dei nomi Kubernetes o la creazione di un ruolo del cluster. È possibile seguire questa procedura per separare la distribuzione del titolare del trattamento dei dati in più passaggi, ognuno dei quali può essere eseguito da un utente o da un account del servizio con le autorizzazioni necessarie. Questa separazione dei compiti garantisce che ogni account utente o di servizio nel processo disponga solo delle autorizzazioni necessarie e niente di più.

Distribuire uno spazio dei nomi in cui verrà creato il titolare del trattamento dei dati

Questo passaggio creerà un nuovo spazio dei nomi Kubernetes dedicato in cui verrà distribuito il controller dati Arc. È essenziale eseguire prima questo passaggio, perché i passaggi seguenti useranno questo nuovo spazio dei nomi come ambito per le autorizzazioni concesse.

Autorizzazioni necessarie per eseguire questa azione:

  • Spazio dei nomi
    • Creazione
    • Modifica (se necessario per i cluster OpenShift)

Eseguire un comando simile al seguente per creare un nuovo spazio dei nomi dedicato in cui verrà creato il controller dati.

kubectl create namespace arc

Se si usa OpenShift, sarà necessario modificare le annotazioni openshift.io/sa.scc.supplemental-groups e openshift.io/sa.scc.uid-range nello spazio dei nomi usando kubectl edit namespace <name of namespace>. Modificare queste annotazioni esistenti in modo che corrispondano a questi ID/intervalli UID e fsGroup specifici.

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

Assegnare autorizzazioni all'account del servizio di distribuzione e utenti/gruppi

Questo passaggio creerà un account del servizio e assegnerà ruoli e ruoli del cluster all'account del servizio in modo che l'account del servizio possa essere usato in un processo per distribuire il controller dati Arc con i privilegi minimi necessari.

Autorizzazioni necessarie per eseguire questa azione:

  • Account servizio
    • Creazione
  • Ruolo
    • Creazione
  • Binding del ruolo
    • Creazione
  • Ruolo cluster
    • Creazione
  • Binding del ruolo del cluster
    • Creazione
  • Tutte le autorizzazioni concesse all'account del servizio (vedere arcdata-deployer.yaml di seguito per informazioni dettagliate)

Salvare una copia di arcdata-deployer.yaml e sostituire il segnaposto {{NAMESPACE}} nel file con lo spazio dei nomi creato nel passaggio precedente, ad esempio: arc. Eseguire il comando seguente per creare l'account del servizio deployer con il file modificato.

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

Concedere autorizzazioni agli utenti per creare il processo del programma di avvio automatico e il titolare del trattamento dei dati

Autorizzazioni necessarie per eseguire questa azione:

  • Ruolo
    • Creazione
  • Binding del ruolo
    • Creazione

Salvare una copia di arcdata-installer.yaml e sostituire il segnaposto {{INSTALLER_USERNAME}} nel file con il nome dell'utente a cui concedere le autorizzazioni, ad esempio: john@contoso.com. Aggiungere altri soggetti di associazione di ruoli, ad esempio altri utenti o gruppi in base alle esigenze. Eseguire il comando seguente per creare le autorizzazioni del programma di installazione con il file modificato.

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

Distribuire il processo del programma di avvio automatico

Autorizzazioni necessarie per eseguire questa azione:

  • Utente assegnato al ruolo arcdata-installer-role nel passaggio precedente

Eseguire il comando seguente per creare il processo del programma di avvio automatico che eseguirà i passaggi preliminari per distribuire il controller dati.

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

Creare il controller dati Arc

Adesso è possibile creare il controller dei dati.

In primo luogo, creare una copia del file modello in locale nel computer, in questo modo sarà possibile modificare alcune delle impostazioni.

Creare i nomi utente e le password dei dashboard delle metriche e dei log

Nella parte superiore del file è possibile specificare un nome utente e una password che saranno usati per eseguire l'autenticazione come amministratore per i dashboard delle metriche e dei log. Scegliere una password sicura e condividerla esclusivamente con le persone che devono avere questi privilegi.

Un segreto Kubernetes viene archiviato come stringa con codifica in Base 64, una per il nome utente e una per la password.

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

Facoltativamente, è possibile creare certificati SSL/TLS per i dashboard dei log e delle metriche. Seguire le istruzioni della sezione Specificare i certificati SSL/TLS durante la distribuzione degli strumenti nativi di Kubernetes.

Modificare la configurazione del controller dei dati

Modificare la configurazione del controller dei dati in base alle esigenze:

REQUIRED

  • location: modificare questa impostazione in modo che sia la posizione di Azure in cui verranno archiviati i metadati relativi al controller dei dati. Rivedere l'elenco delle aree disponibili.
  • logsui-certificate-secret: nome del segreto creato nel cluster Kubernetes per il certificato dell'interfaccia utente dei log.
  • metricsui-certificate-secret: nome del segreto creato nel cluster Kubernetes per il certificato dell'interfaccia utente delle metriche.

Esaminare questi valori e aggiornare la distribuzione:

  • storage..className: classe di archiviazione da utilizzare per i file di dati e di log del controller dei dati. Se si hanno dubbi sulle classi di archiviazione disponibili nel cluster Kubernetes, è possibile eseguire il comando seguente: kubectl get storageclass. Il valore predefinito è predefinito, ciò presuppone l’esistenza di una classe di archiviazione denominata predefinita e non che esista una classe di archiviazione che è quella predefinita. Nota: due impostazioni className devono essere impostate per la classe di archiviazione desiderata, una per i dati e una per i log.

  • serviceType: modificare il tipo di servizio su NodePort se non si usa LoadBalancer.

  • Sicurezza per Azure Red Hat OpenShift o Red Hat OpenShift Container Platform, sostituire le impostazioni di sicurezza con i valori seguenti nel file yaml del controller dei dati.

    security:
      allowDumps: false
      allowNodeMetricsCollection: false
      allowPodMetricsCollection: false
    

Facoltativo

Le impostazioni seguenti sono facoltative.

  • name: il nome predefinito del controller dei dati è arc, tuttavia, se si desidera, è possibile modificarlo.
  • displayName: impostare sullo stesso valore dell'attributo name nella parte superiore del file.
  • registry: registro Contenitori Microsoft è l'impostazione predefinita. Se si esegue il pull delle immagini dal Registro Contenitori Microsoft e le si esegue il push in un registro contenitori privato, immettere qui l'indirizzo IP o il nome DNS del registro.
  • dockerRegistry: segreto da usare per eseguire il pull delle immagini da un registro contenitori privato, se necessario.
  • repository: il repository predefinito nel Registro Contenitori di Microsoft è arcdata. Se si usa un registro contenitori privato, immettere il percorso della cartella o del repository contenente le immagini del contenitore dei servizi dati abilitate per Azure Arc.
  • imageTag: il tag di versione più recente corrente è predefinito nel modello, ma è possibile modificarlo se si vuole usare una versione precedente.
  • logsui-certificate-secret: nome del segreto creato nel cluster Kubernetes per il certificato dell'interfaccia utente dei log.
  • metricsui-certificate-secret: nome del segreto creato nel cluster Kubernetes per il certificato dell'interfaccia utente delle metriche.

L'esempio seguente mostra un file yaml completato del controller dei dati.

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

Salvare il file modificato nel computer locale ed eseguire il comando seguente per creare il controller dei dati:

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

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

Monitoraggio dello stato della creazione

Il completamento della creazione del controller richiederà alcuni minuti. Lo stato di avanzamento può essere monitorato in un'altra finestra del terminale con i comandi seguenti:

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

È anche possibile controllare lo stato della creazione o i log di qualsiasi pod specifico eseguendo un comando simile a quello riportato di seguito. Ciò è particolarmente utile per la risoluzione di eventuali problemi.

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

Sono disponibili diverse opzioni aggiuntive per la creazione del controller dei dati di Azure Arc:

Si desidera fare semplicemente una prova? Informazioni di base sulle Guide di avvio rapido per Azure Arc nel servizio Azure Kubernetes, Amazon EKS o GKE, o in una macchina virtuale di Azure.