Share via


Gestire 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 kubectl riga di comando 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:

  • Namespace
    • 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 openshift.io/sa.scc.supplemental-groups annotazioni 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 del servizio
    • Creazione
  • Ruolo
    • Creazione
  • Associazione di ruoli
    • Creazione
  • Ruolo del cluster
    • Creazione
  • Associazione di ruoli 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
  • Associazione di ruoli
    • Creazione

Salvare una copia di arcdata-installer.yaml e sostituire il segnaposto {{INSTALLER_USERNAME}} nel file con il nome dell'utente per concedere le autorizzazioni a, 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

A questo momento si è pronti per creare il titolare del trattamento dei dati stesso.

Creare prima di tutto una copia del file modello in locale nel computer in modo da poter modificare alcune delle impostazioni.

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

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

Un segreto Kubernetes viene archiviato come stringa con codifica Base64, uno per il nome utente e uno per la password.

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

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

Modificare la configurazione del controller dati

Modificare la configurazione del controller di 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 titolare del trattamento dei dati. Esaminare 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 usare per i file di dati e di log del controller di dati. Se non si è certi delle classi di archiviazione disponibili nel cluster Kubernetes, è possibile eseguire il comando seguente: kubectl get storageclass. Il valore predefinito è quello predefinito che presuppone che esista una classe di archiviazione e che sia denominata default non che esista una classe di archiviazione che rappresenta l'impostazione predefinita. Nota: sono disponibili due impostazioni className da impostare sulla classe di archiviazione desiderata, una per i dati e una per i log.

  • serviceType: modificare il tipo di servizio in 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 di dati.

    security:
      allowDumps: false
      allowNodeMetricsCollection: false
      allowPodMetricsCollection: false
    

Facoltativo

Le impostazioni seguenti sono facoltative.

  • name: il nome predefinito del controller dati è arc, ma è possibile modificarlo se necessario.
  • displayName: impostare questo valore 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 yaml del controller dati completato.

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.29.0_2024-04-09
    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 dati:

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

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

Monitoraggio dello stato di creazione

Il completamento della creazione del controller richiederà alcuni minuti. È possibile monitorare lo stato di avanzamento 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 di creazione o i log di qualsiasi pod specifico eseguendo un comando simile al seguente. 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 dati di Azure Arc:

Si desidera fare semplicemente una prova? Iniziare rapidamente a usare Jumpstart di Azure Arc nel servizio Azure Kubernetes, Amazon EKS o GKE o in una macchina virtuale di Azure.