Freigeben über


Ausführen von Azure Arc-aktivierten Datendiensten mit geringsten Berechtigungen

Das Ausführen von Arc-aktivierten Datendiensten mit geringsten Berechtigungen ist ein bewährtes Sicherheitsverfahren. Erteilen Sie Benutzern und Dienstkonten nur die spezifischen Berechtigungen, die zum Ausführen der erforderlichen Aufgaben erforderlich sind. Sowohl Azure als auch Kubernetes bieten ein rollenbasiertes Zugriffssteuerungsmodell, mit dem diese spezifischen Berechtigungen erteilt werden können. In diesem Artikel werden bestimmte allgemeine Szenarien beschrieben, in denen die Sicherheit der geringsten Berechtigungen angewendet werden soll.

Hinweis

In diesem Artikel wird der Namespace-Name arc verwendet. Wenn Sie sich für einen anderen Namen entscheiden, müssen Sie diesen durchgehend verwenden. In diesem Artikel wird das kubectl-CLI-Dienstprogramm als Beispiel verwendet. Es kann jedoch jedes Tool oder System verwendet werden, das die Kubernetes-API verwendet.

Bereitstellen des Azure Arc-Datencontrollers

Die Bereitstellung des Azure Arc-Datencontrollers erfordert einige Berechtigungen, die als erhöhte Berechtigungen betrachtet werden können, wie es z. B. beim Erstellen eines Kubernetes-Namespace oder beim Erstellen einer Clusterrolle der Fall ist. Die folgenden Schritte können ausgeführt werden, um die Bereitstellung des Datencontrollers in mehrere Schritte zu trennen, von denen jeder von einem Benutzer- oder Dienstkonto ausgeführt werden kann, das über die erforderlichen Berechtigungen verfügt. Durch diese Trennung von Aufgaben wird sichergestellt, dass jedes Benutzer- oder Dienstkonto nur über die erforderlichen Berechtigungen und sonst nichts verfügt.

Bereitstellen eines Namespace, in dem der Datencontroller erstellt wird

Mit diesem Schritt wird ein neuer, dedizierter Kubernetes-Namespace erstellt, in dem der Arc-Datencontroller bereitgestellt wird. Es ist wichtig, diesen Schritt zuerst auszuführen, da die folgenden Schritte diesen neuen Namespace als Bereich für die gewährten Berechtigungen verwenden.

Erforderliche Berechtigungen zum Ausführen dieser Aktion:

  • Namespace
    • Erstellen
    • Bearbeiten (sofern erforderlich für OpenShift-Cluster)

Führen Sie einen mit dem folgenden vergleichbaren Befehl aus, um einen neuen dedizierten Namespace zu erstellen, in dem der Datencontroller erstellt wird.

kubectl create namespace arc

Wenn Sie OpenShift verwenden, müssen Sie die Anmerkungen openshift.io/sa.scc.supplemental-groups und openshift.io/sa.scc.uid-range für den Namespace mithilfe von kubectl edit namespace <name of namespace> bearbeiten. Ändern Sie diese vorhandenen Anmerkungen so, dass sie mit diesen spezifischen UID- und fsGroup-IDs/-Bereichen übereinstimmen.

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

Zuweisen von Berechtigungen zu dem bereitstellenden Dienstkonto und den Benutzern/Gruppen

In diesem Schritt wird ein Dienstkonto erstellt und dem Dienstkonto werden Rollen und Clusterrollen zugewiesen, sodass das Dienstkonto in einem Auftrag verwendet werden kann, um den Arc-Datencontroller mit möglichst wenigen erforderlichen Berechtigungen bereitzustellen.

Erforderliche Berechtigungen zum Ausführen dieser Aktion:

  • Dienstkonto
    • Erstellen
  • Role
    • Erstellen
  • Rollenbindung
    • Erstellen
  • Clusterrolle
    • Erstellen
  • Clusterrollenbindung
    • Erstellen
  • Alle Berechtigungen, die dem Dienstkonto gewährt werden (ausführliche Informationen finden Sie nachfolgend unter "arcdata-deployer.yaml")

Speichern Sie eine Kopie von arcdata-deployer.yaml, und ersetzen Sie den Platzhalter {{NAMESPACE}} in der Datei durch den im vorherigen Schritt erstellten Namespace. Beispiel: arc. Führen Sie den folgenden Befehl aus, um das Bereitstellungsdienstkonto mit der bearbeiteten Datei zu erstellen:

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

Erteilen von Berechtigungen für Benutzer zum Erstellen des Bootstrapperauftrags und des Datencontrollers

Erforderliche Berechtigungen zum Ausführen dieser Aktion:

  • Role
    • Erstellen
  • Rollenbindung
    • Erstellen

Speichern Sie eine Kopie von arcdata-installer.yaml, und ersetzen Sie den Platzhalter {{INSTALLER_USERNAME}} in der Datei durch den Namen des Benutzers, dem die Berechtigungen erteilt werden sollen, wie z. B.: john@contoso.com Fügen Sie nach Bedarf weitere Rollenbindungsthemen wie z. B. andere Benutzer oder Gruppen hinzu. Führen Sie den folgenden Befehl aus, um die Installationsberechtigungen mit der bearbeiteten Datei zu erstellen.

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

Bereitstellen des Bootstrapperauftrags

Erforderliche Berechtigungen zum Ausführen dieser Aktion:

  • Benutzer, der der Rolle "arcdata-installer-role" im vorherigen Schritt zugewiesen wurde

Führen Sie den folgenden Befehl aus, um den Bootstrapperauftrag zu erstellen, der die vorbereitenden Schritte zur Bereitstellung des Datencontrollers ausführt.

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

Erstellen des Azure Arc-Datencontrollers

Nun können Sie den Datencontroller selbst erstellen.

Erstellen Sie zunächst eine lokale Kopie der Vorlagendatei auf Ihrem Computer, damit Sie einige Einstellungen ändern können.

Erstellen der Dashboards mit Metriken und Protokollen sowie der Benutzernamen und Kennwörter

Am Anfang der Datei können Sie einen Benutzernamen und ein Kennwort angeben, die für die Authentifizierung bei den Dashboards mit Metriken und Protokollen als Administrator verwendet werden. Wählen Sie ein sicheres Kennwort aus, und geben Sie es nur an Personen weiter, die diese Berechtigungen besitzen müssen.

Ein Kubernetes-Geheimnis wird als Base64-codierte Zeichenfolge gespeichert – eine für den Benutzernamen und eine für das Kennwort.

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

Optional können Sie SSL/TLS-Zertifikate für die Protokolle und Metrikdashboards erstellen. Befolgen Sie die Anweisungen unter Angeben von SSL/TLS-Zertifikaten während der Bereitstellung nativer Kubernetes-Tools.

Bearbeiten der Datencontrollerkonfiguration

Bearbeiten Sie Datencontrollerkonfiguration nach Bedarf:

ERFORDERLICH

  • location: Ändern Sie diese Einstellung in den Azure-Standort, an dem die Metadaten zum Datencontroller gespeichert werden sollen. Sehen Sie sich die Liste der verfügbaren Regionen an.
  • logsui-certificate-secret: der Name des Geheimnisses, das im Kubernetes-Cluster für das Protokoll-Benutzeroberflächen-Zertifikat erstellt wurde.
  • metricsui-certificate-secret: der Name des Geheimnisses, das im Kubernetes-Cluster für das Metrik-Benutzeroberflächen-Zertifikat erstellt wurde.

Überprüfen Sie diese Werte, und aktualisieren Sie sie für ihre Bereitstellung:

  • storage..className: die Speicherklasse für die Daten- und Protokolldateien des Datencontrollers. Wenn Sie nicht sicher sind, welche Speicherklassen in Ihrem Kubernetes-Cluster verfügbar sind, können Sie den folgenden Befehl ausführen: kubectl get storageclass. Der Standardwert lautet „Standard“. Dabei wird davon ausgegangen, dass eine Speicherklasse vorhanden ist, die „Standard“ heißt, und nicht, dass es keine Speicherklasse gibt, die als Standard fungiert. Hinweis: Es gibt zwei className-Einstellungen, die auf die gewünschte Speicherklasse festgelegt werden müssen – eine für Daten und eine für Protokolle.

  • serviceType: Ändern Sie den Diensttyp in NodePort, wenn Sie keinen LoadBalancer verwenden.

  • Sicherheit für Azure Red Hat OpenShift oder für die Red Hat OpenShift-Containerplattform: ersetzen Sie die Sicherheitseinstellungen durch die folgenden Werte in der YAML-Datei des Datencontrollers.

    security:
      allowDumps: false
      allowNodeMetricsCollection: false
      allowPodMetricsCollection: false
    

Optional

Die folgenden Einstellungen sind optional.

  • name: Der Standardname des Datencontrollers lautet „arc“. Sie können ihn jedoch ändern.
  • displayName: Legen Sie diesen Wert auf denselben Wert fest wie das name-Attribut am Anfang der Datei.
  • registry: Die Microsoft Container Registry ist die Standardregistrierung. Wenn Sie die Images aus der Microsoft Container Registry pullen und in eine private Containerregistrierung pushen, geben Sie hier die IP-Adresse oder den DNS-Namen Ihrer Registrierung ein.
  • dockerRegistry: das Geheimnis für Imagepullvorgänge, das verwendet wird, um die Images ggf. aus einer privaten Containerregistrierung zu pullen.
  • repository: Das Standardrepository der Microsoft Container Registry lautet „arcdata“. Wenn Sie eine private Containerregistrierung verwenden, geben Sie den Pfad für den Ordner/das Repository mit den Containerimages der Azure Arc-fähigen Datendienste ein.
  • imageTag: Das aktuelle Tag der letzten Version wird standardmäßig in der Vorlage verwendet, Sie können es jedoch ändern, wenn Sie eine ältere Version verwenden möchten.
  • logsui-certificate-secret: der Name des Geheimnisses, das im Kubernetes-Cluster für das Protokoll-Benutzeroberflächen-Zertifikat erstellt wurde.
  • metricsui-certificate-secret: der Name des Geheimnisses, das im Kubernetes-Cluster für das Metrik-Benutzeroberflächen-Zertifikat erstellt wurde.

Das folgende Beispiel zeigt eine vollständige YAML-Datei eines Datencontrollers.

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

Speichern Sie die bearbeitete Datei auf Ihrem lokalen Computer, und führen Sie den folgenden Befehl aus, um den Datencontroller zu erstellen:

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

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

Überwachen des Erstellungsstatus

Das Erstellen des Controllers dauert einige Minuten. Mithilfe der folgenden Befehle können Sie den Status in einem anderen Terminalfenster überwachen:

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

Sie können auch den Erstellungsstatus oder die Protokolle eines bestimmten Pods überprüfen, indem Sie einen Befehl wie den folgenden ausführen. Dies ist besonders bei der Problembehandlung hilfreich.

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

Sie haben mehrere zusätzliche Optionen zum Erstellen des Azure Arc-Datencontrollers:

Möchten Sie es selbst ausprobieren? Mit Azure Arc Jumpstart in AKS, Amazon EKS oder GKE oder auf einer Azure-VM können Sie sofort loslegen.