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.
Empfohlen: Überprüfen und ggf. Ändern der Standardwerte
Ü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.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
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
Zugehöriger Inhalt
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.
- Erstellen eines Datencontrollers im direkten Konnektivitätsmodus über das Azure-Portal
- Erstellen eines Datencontrollers im indirekten Konnektivitätsmodus über die CLI
- Erstellen eines Datencontrollers im indirekten Konnektivitätsmodus über Azure Data Studio
- Erstellen eines Datencontrollers im indirekten Konnektivitätsmodus über das Azure-Portal mithilfe eines Jupyter Notebooks in Azure Data Studio
- Erstellen eines Datencontrollers im indirekten Konnektivitätsmodus mit Kubernetes-Tools wie z. B.
kubectl
oderoc