Управление службами данных с поддержкой Azure Arc с минимальными привилегиями
Операционные службы данных с поддержкой Arc с минимальными привилегиями — это рекомендация по обеспечению безопасности. Предоставить пользователям и учетным записям служб только определенные разрешения, необходимые для выполнения необходимых задач. Azure и Kubernetes предоставляют модель управления доступом на основе ролей, которую можно использовать для предоставления этих конкретных разрешений. В этой статье описываются некоторые распространенные сценарии, в которых должна применяться безопасность наименьших привилегий.
Примечание.
В этой статье будет использоваться имя пространства имен arc
. Если вы решили использовать другое имя, используйте его во всех примерах.
В этой статье в качестве примера используется служебная kubectl
программа CLI. Любое средство или система, использующая API Kubernetes, можно использовать.
Развернуть контроллер данных Azure Arc
При развертывании контроллера данных Azure Arc требуются некоторые разрешения, которые можно считать высокими привилегиями, например создание пространства имен Kubernetes или создание роли кластера. Следующие шаги можно выполнить, чтобы разделить развертывание контроллера данных на несколько шагов, каждый из которых может выполняться пользователем или учетной записью службы, которая имеет необходимые разрешения. Это разделение обязанностей гарантирует, что у каждого пользователя или учетной записи службы в процессе есть только необходимые разрешения и ничего больше.
Развертывание пространства имен, в котором будет создан контроллер данных
На этом шаге будет создано новое выделенное пространство имен Kubernetes, в котором будет развернут контроллер данных Arc. Сначала необходимо выполнить этот шаг, так как следующие шаги будут использовать это новое пространство имен в качестве области разрешений, предоставляемых.
Разрешения, необходимые для выполнения этого действия:
- Пространство имен
- Создание
- Изменение (если требуется для кластеров OpenShift)
Выполните команду, аналогичную приведенной ниже, чтобы создать новое выделенное пространство имен, в котором будет создан контроллер данных.
kubectl create namespace arc
Если вы используете OpenShift, то вам потребуется изменить заметки openshift.io/sa.scc.supplemental-groups
и openshift.io/sa.scc.uid-range
в пространстве имен с помощью команды kubectl edit namespace <name of namespace>
. Измените имеющиеся заметки в соответствии с конкретными UID и идентификаторами/диапазонами fsGroup.
openshift.io/sa.scc.supplemental-groups: 1000700001/10000
openshift.io/sa.scc.uid-range: 1000700001/10000
Назначение разрешений для учетной записи и пользователей или групп развертывания
Этот шаг создаст учетную запись службы и назначит роли и роли кластера учетной записи службы, чтобы учетная запись службы использовалась в задании для развертывания контроллера данных Arc с минимальными привилегиями.
Разрешения, необходимые для выполнения этого действия:
- Учетная запись службы
- Создание
- Роль
- Создание
- Привязка ролей
- Создание
- Роль кластера
- Создание
- Привязка роли кластера
- Создание
- Все разрешения, предоставленные учетной записи службы (дополнительные сведения см. в разделе arcdata-deployer.yaml ниже).
Сохраните копию arcdata-deployer.yaml и замените заполнитель {{NAMESPACE}}
в файле пространством имен, созданным на предыдущем шаге, например: arc
Выполните следующую команду, чтобы создать учетную запись службы развертывания с измененным файлом.
kubectl apply --namespace arc -f arcdata-deployer.yaml
Предоставление пользователям разрешений на создание задания начального загрузчика и контроллера данных
Разрешения, необходимые для выполнения этого действия:
- Роль
- Создание
- Привязка ролей
- Создание
Сохраните копию arcdata-installer.yaml и замените заполнитель {{INSTALLER_USERNAME}}
в файле именем пользователя, чтобы предоставить разрешения, например: john@contoso.com
Добавьте дополнительные субъекты привязки ролей, такие как другие пользователи или группы по мере необходимости. Выполните следующую команду, чтобы создать разрешения установщика с измененным файлом.
kubectl apply --namespace arc -f arcdata-installer.yaml
Развертывание задания начального загрузчика
Разрешения, необходимые для выполнения этого действия:
- Пользователь, которому назначена роль arcdata-installer-role на предыдущем шаге
Выполните следующую команду, чтобы создать задание начального загрузчика, которое будет выполнять подготовительные шаги для развертывания контроллера данных.
kubectl apply --namespace arc -f https://raw.githubusercontent.com/microsoft/azure_arc/main/arc_data_services/deploy/yaml/bootstrapper.yaml
Создание контроллера данных Arc
Теперь все готово для создания самого контроллера данных.
Сначала создайте локальную копию файла шаблона, чтобы можно было изменить некоторые параметры.
Создание метрик и панелей мониторинга журналов имен пользователей и паролей
В верхней части файла можно указать имя пользователя и пароль, который используется для проверки подлинности на панелях мониторинга метрик и журналов в качестве администратора. Выберите безопасный пароль и предоставьте к нему доступ только тем пользователям, которым необходимы эти права.
Секрет Kubernetes хранится в формате строки в кодировке Base64. Одна строка используется для имени пользователя, а другая — для пароля.
echo -n '<your string to encode here>' | base64
# echo -n 'example' | base64
При необходимости можно создать SSL/TLS-сертификаты для журналов и панелей мониторинга метрик. Следуйте инструкциям по указанию сертификатов SSL/TLS во время развертывания собственных средств Kubernetes.
Изменение конфигурации контроллера данных
При необходимости измените конфигурацию контроллера данных:
ОБЯЗАТЕЛЬНО
location
: измените это расположение Azure, в котором будут храниться метаданные о контроллере данных. Просмотрите список доступных регионов.logsui-certificate-secret
: имя секрета, созданного в кластере Kubernetes для сертификата пользовательского интерфейса журнала.metricsui-certificate-secret
: имя секрета, созданного в кластере Kubernetes для сертификата пользовательского интерфейса метрик.
Рекомендуется: просмотрите и, возможно, измените значения по умолчанию
Просмотрите эти значения и обновите развертывание:
storage..className
: класс хранилища, используемый для данных контроллера данных и файлов журналов. Если вы не знаете доступные классы хранения в кластере Kubernetes, можно выполнить следующую команду:kubectl get storageclass
. По умолчанию предполагается, что существует класс хранилища и по умолчанию не имеется класса хранилища, который является стандартным. Примечание. Для желаемого класса хранения необходимо установить два параметра className — один для данных и один для журналов.serviceType
: измените тип службы на NodePort, если вы не используете LoadBalancer.Безопасность для платформы контейнеров Red Hat OpenShift или Red Hat OpenShift замените параметры следующими значениями в yaml-файле контроллера данных.
security: allowDumps: false allowNodeMetricsCollection: false allowPodMetricsCollection: false
Необязательно
Следующие параметры являются необязательными.
name
: имя контроллера данных по умолчанию — arc, но его можно изменить, если вы хотите.displayName
: задайте для этого значение таким же значением, что и атрибут имени в верхней части файла.registry
: Реестр контейнеров Майкрософт — это по умолчанию. Если вы извлекаете образы из Microsoft Container Registry и отправляете их в частный реестр контейнеров, введите здесь IP-адрес или DNS-имя этого реестра.dockerRegistry
: секрет, используемый для извлечения образов из частного реестра контейнеров при необходимости.repository
: репозиторий по умолчанию в реестре контейнеров Майкрософт — arcdata. Если вы используете частный реестр контейнеров, введите путь к папке или репозиторию, содержащему образы контейнеров служб данных с поддержкой Azure Arc.imageTag
: текущий тег последней версии по умолчанию используется в шаблоне, но его можно изменить, если вы хотите использовать более раннюю версию.logsui-certificate-secret
: имя секрета, созданного в кластере Kubernetes для сертификата пользовательского интерфейса журнала.metricsui-certificate-secret
: имя секрета, созданного в кластере Kubernetes для сертификата пользовательского интерфейса метрик.
В следующем примере показан завершенный контроллер данных yaml.
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
Сохраните измененный файл на локальном компьютере и выполните следующую команду, чтобы создать контроллер данных:
kubectl create --namespace arc -f <path to your data controller file>
#Example
kubectl create --namespace arc -f data-controller.yaml
Мониторинг состояния создания
Создание контроллера занимает несколько минут. Вы можете отслеживать ход выполнения этой операции в другом окне терминала с помощью следующих команд:
kubectl get datacontroller --namespace arc
kubectl get pods --namespace arc
Вы также можете проверить состояние создания или журналы любого конкретного модуля pod, выполнив команду, как показано ниже. Это особенно полезно для устранения неполадок.
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
Связанный контент
У вас есть несколько дополнительных параметров для создания контроллера данных Azure Arc:
Хотите попробовать? Быстро приступить к работе с Azure Arc Jumpstart в AKS, Amazon EKS или GKE или на виртуальной машине Azure.
- Создание контроллера данных в режиме прямого подключения с помощью портал Azure
- Создание контроллера данных в режиме косвенного подключения с помощью CLI
- Создание контроллера данных в режиме косвенного подключения с помощью Azure Data Studio
- Создание контроллера данных в режиме косвенного подключения из портал Azure с помощью записной книжки Jupyter в Azure Data Studio
- Создание контроллера данных в режиме косвенного подключения с помощью таких средств Kubernetes, как
kubectl
илиoc