Udostępnij za pośrednictwem


Obsługa usług danych z obsługą usługi Azure Arc z najmniejszymi uprawnieniami

Najlepszym rozwiązaniem jest obsługa usług danych z obsługą usługi Arc z najmniejszymi uprawnieniami. Przyznaj tylko użytkownikom i kontom usług określone uprawnienia wymagane do wykonywania wymaganych zadań. Zarówno platforma Azure, jak i platforma Kubernetes udostępniają model kontroli dostępu opartej na rolach, który może służyć do udzielania tych konkretnych uprawnień. W tym artykule opisano niektóre typowe scenariusze, w których należy zastosować zabezpieczenia najniższych uprawnień.

Uwaga

W tym artykule zostanie użyta arc nazwa przestrzeni nazw. Jeśli zdecydujesz się użyć innej nazwy, użyj tej samej nazwy w całym. W tym artykule narzędzie interfejsu kubectl wiersza polecenia jest używane jako przykład. Można jednak użyć dowolnego narzędzia lub systemu korzystającego z interfejsu API Kubernetes.

Wdrażanie kontrolera danych usługi Azure Arc

Wdrożenie kontrolera danych usługi Azure Arc wymaga pewnych uprawnień, które mogą być uznawane za wysokie uprawnienia, takie jak tworzenie przestrzeni nazw kubernetes lub tworzenie roli klastra. Poniższe kroki można wykonać, aby oddzielić wdrożenie kontrolera danych na wiele kroków, z których każdy może być wykonywany przez użytkownika lub konto usługi, które ma wymagane uprawnienia. To rozdzielenie obowiązków gwarantuje, że każdy użytkownik lub konto usługi w procesie ma tylko wymagane uprawnienia i nic więcej.

Wdrażanie przestrzeni nazw, w której zostanie utworzony kontroler danych

W tym kroku zostanie utworzona nowa dedykowana przestrzeń nazw kubernetes, w której zostanie wdrożony kontroler danych usługi Arc. Najpierw należy wykonać ten krok, ponieważ poniższe kroki będą używać tej nowej przestrzeni nazw jako zakresu uprawnień, które są przyznawane.

Uprawnienia wymagane do wykonania tej akcji:

  • Namespace
    • Utworzenie
    • Edytuj (jeśli jest to wymagane dla klastrów OpenShift)

Uruchom polecenie podobne do poniższego, aby utworzyć nową dedykowaną przestrzeń nazw, w której zostanie utworzony kontroler danych.

kubectl create namespace arc

Jeśli używasz biblioteki OpenShift, musisz edytować openshift.io/sa.scc.supplemental-groups adnotacje i openshift.io/sa.scc.uid-range w przestrzeni nazw przy użyciu polecenia kubectl edit namespace <name of namespace>. Zmień te istniejące adnotacje, aby były zgodne z tymi określonymi identyfikatorami UID i identyfikatorami fsGroup/zakresami.

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

Przypisywanie uprawnień do wdrażającego konta usługi i użytkowników/grup

Ten krok spowoduje utworzenie konta usługi i przypisanie ról i ról klastra do konta usługi, aby można było użyć konta usługi w zadaniu w celu wdrożenia kontrolera danych usługi Arc z najmniejszymi wymaganymi uprawnieniami.

Uprawnienia wymagane do wykonania tej akcji:

  • Konto usługi
    • Utworzenie
  • Rola
    • Utworzenie
  • Powiązanie roli
    • Utworzenie
  • Rola klastra
    • Utworzenie
  • Powiązanie roli klastra
    • Utworzenie
  • Wszystkie uprawnienia przyznane do konta usługi (zobacz arcdata-deployer.yaml poniżej, aby uzyskać szczegółowe informacje)

Zapisz kopię pliku arcdata-deployer.yaml i zastąp symbol zastępczy {{NAMESPACE}} w pliku przestrzenią nazw utworzoną w poprzednim kroku, na przykład: arc. Uruchom następujące polecenie, aby utworzyć konto usługi wdrażania przy użyciu edytowanego pliku.

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

Udzielanie użytkownikom uprawnień do tworzenia zadania programu inicjjącego i kontrolera danych

Uprawnienia wymagane do wykonania tej akcji:

  • Rola
    • Utworzenie
  • Powiązanie roli
    • Utworzenie

Zapisz kopię pliku arcdata-installer.yaml i zastąp symbol zastępczy {{INSTALLER_USERNAME}} w pliku nazwą użytkownika, aby udzielić uprawnień, na przykład: john@contoso.com. W razie potrzeby dodaj dodatkowe tematy powiązania roli, takie jak inni użytkownicy lub grupy. Uruchom następujące polecenie, aby utworzyć uprawnienia instalatora z edytowanym plikiem.

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

Wdrażanie zadania programu inicjjącego

Uprawnienia wymagane do wykonania tej akcji:

  • Użytkownik przypisany do roli arcdata-installer-role w poprzednim kroku

Uruchom następujące polecenie, aby utworzyć zadanie programu inicjujące, które uruchomi kroki przygotowawcze w celu wdrożenia kontrolera danych.

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

Tworzenie kontrolera danych usługi Arc

Teraz możesz przystąpić do tworzenia samego kontrolera danych.

Najpierw utwórz kopię pliku szablonu lokalnie na komputerze, aby można było zmodyfikować niektóre ustawienia.

Tworzenie metryk i dzienników pulpitów nawigacyjnych nazw użytkowników i haseł

W górnej części pliku można określić nazwę użytkownika i hasło używane do uwierzytelniania w metrykach i dziennikach pulpitów nawigacyjnych jako administrator. Wybierz bezpieczne hasło i udostępnij je tylko tym, którzy muszą mieć te uprawnienia.

Wpis tajny kubernetes jest przechowywany jako ciąg zakodowany w formacie base64 — jeden dla nazwy użytkownika i jeden dla hasła.

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

Opcjonalnie możesz utworzyć certyfikaty SSL/TLS dla pulpitów nawigacyjnych dzienników i metryk. Postępuj zgodnie z instrukcjami w temacie Określanie certyfikatów SSL/TLS podczas wdrażania narzędzi natywnych platformy Kubernetes.

Edytowanie konfiguracji kontrolera danych

Edytuj konfigurację kontrolera danych zgodnie z potrzebami:

WYMAGANE

  • location: zmień tę wartość na lokalizację platformy Azure, w której będą przechowywane metadane dotyczące kontrolera danych. Przejrzyj listę dostępnych regionów.
  • logsui-certificate-secret: nazwa wpisu tajnego utworzonego w klastrze Kubernetes dla certyfikatu interfejsu użytkownika dzienników.
  • metricsui-certificate-secret: nazwa wpisu tajnego utworzonego w klastrze Kubernetes dla certyfikatu interfejsu użytkownika metryk.

Przejrzyj te wartości i zaktualizuj wdrożenie:

  • storage..className: klasa magazynu do użycia dla danych kontrolera danych i plików dziennika. Jeśli nie masz pewności co do dostępnych klas magazynu w klastrze Kubernetes, możesz uruchomić następujące polecenie: kubectl get storageclass. Wartość domyślna jest domyślna, która zakłada, że istnieje klasa magazynu, która istnieje i ma nazwę domyślną, a nie, że istnieje klasa magazynu, która jest domyślna. Uwaga: istnieją dwa ustawienia className, które mają być ustawione na żądaną klasę magazynu — jedną dla danych i jedną dla dzienników.

  • serviceType: zmień typ usługi na NodePort, jeśli nie używasz modułu LoadBalancer.

  • Zabezpieczenia dla usługi Azure Red Hat OpenShift lub Red Hat OpenShift Container Platform zastąp ustawienia następującymi wartościami w pliku yaml kontrolera danych.

    security:
      allowDumps: false
      allowNodeMetricsCollection: false
      allowPodMetricsCollection: false
    

Opcjonalnie

Następujące ustawienia są opcjonalne.

  • name: Domyślna nazwa kontrolera danych to łuk, ale możesz go zmienić, jeśli chcesz.
  • displayName: ustaw tę samą wartość co atrybut name w górnej części pliku.
  • registry: Rejestr kontenerów firmy Microsoft jest domyślny. Jeśli ściągasz obrazy z usługi Microsoft Container Registry i wypychasz je do prywatnego rejestru kontenerów, wprowadź tutaj adres IP lub nazwę DNS rejestru.
  • dockerRegistry: Wpis tajny używany do ściągania obrazów z prywatnego rejestru kontenerów, jeśli jest to wymagane.
  • repository: domyślne repozytorium w usłudze Microsoft Container Registry to arcdata. Jeśli używasz prywatnego rejestru kontenerów, wprowadź ścieżkę do folderu/repozytorium zawierającego obrazy kontenerów usług danych z obsługą usługi Azure Arc.
  • imageTag: bieżący tag najnowszej wersji jest domyślny w szablonie, ale możesz go zmienić, jeśli chcesz użyć starszej wersji.
  • logsui-certificate-secret: nazwa wpisu tajnego utworzonego w klastrze Kubernetes dla certyfikatu interfejsu użytkownika dzienników.
  • metricsui-certificate-secret: nazwa wpisu tajnego utworzonego w klastrze Kubernetes dla certyfikatu interfejsu użytkownika metryk.

W poniższym przykładzie pokazano ukończony plik yaml kontrolera danych.

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

Zapisz edytowany plik na komputerze lokalnym i uruchom następujące polecenie, aby utworzyć kontroler danych:

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

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

Monitorowanie stanu tworzenia

Utworzenie kontrolera potrwa kilka minut. Postęp można monitorować w innym oknie terminalu za pomocą następujących poleceń:

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

Możesz również sprawdzić stan tworzenia lub dzienniki dowolnego określonego zasobnika, uruchamiając polecenie podobne do poniższego. Jest to szczególnie przydatne w przypadku rozwiązywania wszelkich problemów.

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

Istnieje kilka dodatkowych opcji tworzenia kontrolera danych usługi Azure Arc:

Po prostu chcesz wypróbować rzeczy? Szybko rozpocznij pracę z usługą Azure Arc Jumpstart w usługach AKS, Amazon EKS lub GKE lub na maszynie wirtualnej platformy Azure.