Delen via


Gegevensservices met minimale bevoegdheden van Azure Arc gebruiken

Het uitvoeren van gegevensservices met minimale bevoegdheden met Arc is een aanbevolen procedure voor beveiliging. Geef gebruikers en serviceaccounts alleen de specifieke machtigingen die nodig zijn om de vereiste taken uit te voeren. Zowel Azure als Kubernetes bieden een op rollen gebaseerd toegangsbeheermodel dat kan worden gebruikt om deze specifieke machtigingen te verlenen. In dit artikel worden bepaalde veelvoorkomende scenario's beschreven waarin de beveiliging van minimale bevoegdheden moet worden toegepast.

Notitie

In dit artikel wordt een naamruimtenaam gebruikt.arc Als u ervoor kiest om een andere naam te gebruiken, gebruikt u overal dezelfde naam. In dit artikel wordt het kubectl CLI-hulpprogramma gebruikt als voorbeeld. Elk hulpprogramma of systeem dat gebruikmaakt van de Kubernetes-API kan echter worden gebruikt.

De Azure Arc-gegevenscontroller implementeren

Voor het implementeren van de Azure Arc-gegevenscontroller zijn enkele machtigingen vereist die als hoge bevoegdheden kunnen worden beschouwd, zoals het maken van een Kubernetes-naamruimte of het maken van een clusterrol. De volgende stappen kunnen worden gevolgd om de implementatie van de gegevenscontroller te scheiden in meerdere stappen, die elk kunnen worden uitgevoerd door een gebruiker of een serviceaccount met de vereiste machtigingen. Deze scheiding van taken zorgt ervoor dat elk gebruikers- of serviceaccount in het proces alleen de vereiste machtigingen heeft en niets meer.

Een naamruimte implementeren waarin de gegevenscontroller wordt gemaakt

Met deze stap maakt u een nieuwe, toegewezen Kubernetes-naamruimte waarin de Arc-gegevenscontroller wordt geïmplementeerd. Het is essentieel om deze stap eerst uit te voeren, omdat in de volgende stappen deze nieuwe naamruimte wordt gebruikt als een bereik voor de machtigingen die worden verleend.

Vereiste machtigingen om deze actie uit te voeren:

  • Namespace
    • Maken
    • Bewerken (indien nodig voor OpenShift-clusters)

Voer een opdracht uit die vergelijkbaar is met de volgende om een nieuwe, toegewezen naamruimte te maken waarin de gegevenscontroller wordt gemaakt.

kubectl create namespace arc

Als u OpenShift gebruikt, moet u de openshift.io/sa.scc.supplemental-groups en openshift.io/sa.scc.uid-range aantekeningen in de naamruimte bewerken met behulp van kubectl edit namespace <name of namespace>. Wijzig deze bestaande aantekeningen zodat deze overeenkomen met deze specifieke UID- en fsGroup-id's/bereiken.

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

Machtigingen toewijzen aan het implementerende serviceaccount en gebruikers/groepen

Met deze stap maakt u een serviceaccount en wijst u rollen en clusterrollen toe aan het serviceaccount, zodat het serviceaccount in een taak kan worden gebruikt om de Arc-gegevenscontroller te implementeren met de minste bevoegdheden die vereist zijn.

Vereiste machtigingen om deze actie uit te voeren:

  • Serviceaccount
    • Maken
  • Rol
    • Maken
  • Rolbinding
    • Maken
  • Clusterrol
    • Maken
  • Clusterrolbinding
    • Maken
  • Alle machtigingen die worden verleend aan het serviceaccount (zie de onderstaande arcdata-deployer.yaml voor meer informatie)

Sla een kopie van arcdata-deployer.yaml op en vervang de tijdelijke aanduiding {{NAMESPACE}} in het bestand door de naamruimte die u in de vorige stap hebt gemaakt, bijvoorbeeld: arc. Voer de volgende opdracht uit om het serviceaccount voor de deployer te maken met het bewerkte bestand.

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

Machtigingen verlenen aan gebruikers om de bootstrapper-taak en gegevenscontroller te maken

Vereiste machtigingen om deze actie uit te voeren:

  • Rol
    • Maken
  • Rolbinding
    • Maken

Sla een kopie van arcdata-installer.yaml op en vervang de tijdelijke aanduiding {{INSTALLER_USERNAME}} in het bestand door de naam van de gebruiker om de machtigingen te verlenen, bijvoorbeeld: john@contoso.com. Voeg indien nodig extra bindingsonderwerp voor rollen toe, zoals andere gebruikers of groepen. Voer de volgende opdracht uit om de installatiemachtigingen te maken met het bewerkte bestand.

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

De bootstrapper-taak implementeren

Vereiste machtigingen om deze actie uit te voeren:

  • Gebruiker die is toegewezen aan de rol arcdata-installer in de vorige stap

Voer de volgende opdracht uit om de bootstrapper-taak te maken waarmee voorbereidende stappen worden uitgevoerd om de gegevenscontroller te implementeren.

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

De Arc-gegevenscontroller maken

U bent nu klaar om de gegevenscontroller zelf te maken.

Maak eerst een kopie van het sjabloonbestand lokaal op uw computer, zodat u enkele van de instellingen kunt wijzigen.

De gebruikersnamen en wachtwoorden van dashboards voor metrische gegevens en logboeken maken

Boven aan het bestand kunt u een gebruikersnaam en wachtwoord opgeven die wordt gebruikt voor verificatie bij de metrische gegevens en logboeken van dashboards als beheerder. Kies een beveiligd wachtwoord en deel het met alleen wachtwoorden die deze bevoegdheden nodig hebben.

Een Kubernetes-geheim wordt opgeslagen als een met base64 gecodeerde tekenreeks: één voor de gebruikersnaam en een voor het wachtwoord.

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

U kunt desgewenst SSL/TLS-certificaten maken voor de logboeken en dashboards voor metrische gegevens. Volg de instructies bij Ssl/TLS-certificaten opgeven tijdens de implementatie van systeemeigen Kubernetes-hulpprogramma's.

De configuratie van de gegevenscontroller bewerken

Bewerk indien nodig de configuratie van de gegevenscontroller:

VEREIST

  • location: Wijzig dit in de Azure-locatie waar de metagegevens over de gegevenscontroller worden opgeslagen. Bekijk de lijst met beschikbare regio's.
  • logsui-certificate-secret: De naam van het geheim dat is gemaakt in het Kubernetes-cluster voor het gebruikersinterfacecertificaat voor logboeken.
  • metricsui-certificate-secret: De naam van het geheim dat is gemaakt in het Kubernetes-cluster voor het ui-certificaat voor metrische gegevens.

Bekijk deze waarden en werk deze bij voor uw implementatie:

  • storage..className: de opslagklasse die moet worden gebruikt voor de gegevenscontrollergegevens en logboekbestanden. Als u niet zeker weet welke opslagklassen beschikbaar zijn in uw Kubernetes-cluster, kunt u de volgende opdracht uitvoeren: kubectl get storageclass De standaardwaarde is de standaardinstelling. Hierbij wordt ervan uitgegaan dat er een opslagklasse bestaat die bestaat en de standaardnaam heeft, niet dat er een opslagklasse is die de standaardwaarde is. Opmerking: Er zijn twee className-instellingen die moeten worden ingesteld op de gewenste opslagklasse: één voor gegevens en één voor logboeken.

  • serviceType: Wijzig het servicetype in NodePort als u geen LoadBalancer gebruikt.

  • Beveiliging voor Azure Red Hat OpenShift of Red Hat OpenShift Container Platform vervangt de beveiliging: instellingen door de volgende waarden in het yaml-bestand van de gegevenscontroller.

    security:
      allowDumps: false
      allowNodeMetricsCollection: false
      allowPodMetricsCollection: false
    

Optioneel

De volgende instellingen zijn optioneel.

  • name: De standaardnaam van de gegevenscontroller is boog, maar u kunt deze desgewenst wijzigen.
  • displayName: Stel dit in op dezelfde waarde als het naamkenmerk boven aan het bestand.
  • registry: Het Microsoft Container Registry is de standaardinstelling. Als u de installatiekopieën uit het Microsoft Container Registry ophaalt en naar een privécontainerregister pusht, voert u hier het IP-adres of de DNS-naam van uw register in.
  • dockerRegistry: het geheim dat moet worden gebruikt om de installatiekopieën op te halen uit een privécontainerregister, indien nodig.
  • repository: De standaardopslagplaats in het Microsoft Container Registry is arcdata. Als u een privécontainerregister gebruikt, voert u het pad in van de map/opslagplaats met de containerinstallatiekopieën voor Gegevensservices met Azure Arc.
  • imageTag: De huidige meest recente versietag is standaard ingesteld in de sjabloon, maar u kunt deze wijzigen als u een oudere versie wilt gebruiken.
  • logsui-certificate-secret: De naam van het geheim dat is gemaakt in het Kubernetes-cluster voor het gebruikersinterfacecertificaat voor logboeken.
  • metricsui-certificate-secret: De naam van het geheim dat is gemaakt in het Kubernetes-cluster voor het ui-certificaat voor metrische gegevens.

In het volgende voorbeeld ziet u een voltooide yaml voor de gegevenscontroller.

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.34.0_2024-10-08
    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

Sla het bewerkte bestand op uw lokale computer op en voer de volgende opdracht uit om de gegevenscontroller te maken:

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

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

De status van het maken controleren

Het maken van de controller duurt enkele minuten. U kunt de voortgang in een ander terminalvenster bewaken met de volgende opdrachten:

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

U kunt ook de status of logboeken van een bepaalde pod controleren door een opdracht zoals hieronder uit te voeren. Dit is vooral handig voor het oplossen van eventuele problemen.

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

U hebt verschillende extra opties voor het maken van de Azure Arc-gegevenscontroller:

Wilt u gewoon iets uitproberen? Ga snel aan de slag met Azure Arc Jumpstart op AKS, Amazon EKS of GKE, of in een Azure-VM.