Operar os serviços de dados habilitados para Azure Arc com privilégios mínimos
Operar os serviços de dados habilitados para Arc com privilégios mínimos é uma das melhores práticas de segurança. Conceda aos usuários e às contas de serviço somente as permissões específicas necessárias para executar as tarefas necessárias. O Azure e o Kubernetes fornecem um modelo de controle de acesso baseado em função, que pode ser usado para conceder essas permissões específicas. Este artigo descreve determinados cenários comuns em que a segurança de privilégios mínimos deve ser aplicada.
Observação
Neste artigo, um nome de namespace de arc
será usado. Se você optar por usar um nome diferente, use o mesmo nome em todo ele.
Neste artigo, o utilitário da CLI kubectl
é usado como exemplo. As ferramentas ou sistemas que usam a API do Kubernetes podem ser usados.
Implantar o controlador de dados do Azure Arc
A implantação do controlador de dados do Azure Arc requer algumas permissões, que podem ser consideradas de privilégio elevado, como a criação de um namespace do Kubernetes ou a criação de uma função de cluster. As etapas a seguir podem ser seguidas para dividir a implantação do controlador de dados em várias etapas, cada uma delas pode ser executada por um usuário ou uma conta de serviço que tenha as permissões necessárias. Essa separação de tarefas garante que cada usuário ou conta de serviço no processo tenha apenas as permissões necessárias e nada mais.
Implantar um namespace em que o controlador de dados será criado
Esta etapa criará um novo namespace dedicado do Kubernetes, em que o controlador de dados do Arc será implantado. É essencial executar essa etapa primeiro, pois as etapas seguintes usarão esse novo namespace como escopo para as permissões que estão sendo concedidas.
Permissões necessárias para executar essa ação:
- Namespace
- Criar
- Editar (se necessário, para clusters do OpenShift)
Execute um comando semelhante ao seguinte para criar um novo namespace dedicado no qual o controlador de dados será criado.
kubectl create namespace arc
Se estiver usando o OpenShift, você precisará editar as anotações openshift.io/sa.scc.supplemental-groups
e openshift.io/sa.scc.uid-range
no namespace usando kubectl edit namespace <name of namespace>
. Altere essas anotações existentes para corresponder a esse UID específico e intervalos/IDs do fsGroup.
openshift.io/sa.scc.supplemental-groups: 1000700001/10000
openshift.io/sa.scc.uid-range: 1000700001/10000
Atribuir permissões à conta de serviço e aos usuários/grupos de implantação
Esta etapa criará uma conta de serviço e atribuirá funções e funções de cluster à conta de serviço de modo que a conta de serviço possa ser usada em um trabalho, para implantar o controlador de dados do Arc com os privilégios mínimos necessários.
Permissões necessárias para executar essa ação:
- Conta de serviço
- Criar
- Função
- Criar
- Associação de função
- Criar
- Função de cluster
- Criar
- Associação da função de cluster
- Criar
- Todas as permissões que estão sendo concedidas à conta de serviço (confira o arcdata-deployer.yaml abaixo, para obter detalhes)
Salve uma cópia de arcdata-deployer.yaml e substitua o espaço reservado {{NAMESPACE}}
no arquivo pelo namespace criado na etapa anterior, por exemplo: arc
. Execute o comando a seguir para criar a conta de serviço do implantador com o arquivo editado.
kubectl apply --namespace arc -f arcdata-deployer.yaml
Conceder permissões aos usuários para criar o trabalho do bootstrapper e o controlador de dados
Permissões necessárias para executar essa ação:
- Função
- Criar
- Associação de função
- Criar
Salve uma cópia do arcdata-installer.yaml e substitua o espaço reservado {{INSTALLER_USERNAME}}
no arquivo pelo nome do usuário, para conceder as permissões, por exemplo: john@contoso.com
. Adicione outros titulares da associação de função, como outros usuários ou grupos, conforme necessário. Execute o comando a seguir para criar as permissões do instalador com o arquivo editado.
kubectl apply --namespace arc -f arcdata-installer.yaml
Implantar o trabalho do bootstrapper
Permissões necessárias para executar essa ação:
- Usuário atribuído à função arcdata-installer-role na etapa anterior
Execute o comando a seguir para criar o trabalho do bootstrapper que executará as etapas preparatórias para implantar o controlador de dados.
kubectl apply --namespace arc -f https://raw.githubusercontent.com/microsoft/azure_arc/main/arc_data_services/deploy/yaml/bootstrapper.yaml
Criar o controlador de dados do Arc
Agora você está pronto para criar o próprio controlador de dados.
Primeiro, crie uma cópia do arquivo de modelo localmente no seu computador para que você possa modificar algumas das configurações.
Criar as métricas e os painéis de logs de nomes de usuário e senhas
Na parte superior do arquivo, especifique um nome de usuário e uma senha usados para autenticar para as métricas e os painéis de logs como administrador. Escolha uma senha segura e compartilhe-a apenas com quem precise ter esses privilégios.
Um segredo de Kubernetes é armazenado como uma cadeia de caracteres codificada em base64, uma para o nome de usuário e outra para a senha.
echo -n '<your string to encode here>' | base64
# echo -n 'example' | base64
Opcionalmente, você pode criar certificados SSL/TLS para logs e painéis de métricas. Siga as instruções em Especificar certificados de SSL/TLS durante a implantação de ferramentas nativas do Kubernetes.
Edite a configuração do controlador de dados
Edite a configuração do controlador de dados conforme necessário:
OBRIGATÓRIO
location
: altere isso para ser o local do Azure onde os metadados sobre o controlador de dados serão armazenados. Examine a lista de regiões disponíveis.logsui-certificate-secret
: nome do segredo criado no cluster do Kubernetes para o certificado da interface do usuário de logs.metricsui-certificate-secret
: o nome do segredo criado no cluster do Kubernetes para o certificado da interface do usuário de métricas.
Recomendado: examinar e possivelmente alterar os padrões
Examine estes valores e atualize de acordo com a implantação:
storage..className
: a classe de armazenamento a ser usada para os dados do controlador de dados e os arquivos de log. Se não tiver certeza das classes de armazenamento disponíveis no cluster do Kubernetes, poderá executar o seguinte comando:kubectl get storageclass
. O padrão pressupõe que existe uma classe de armazenamento chamada de padrão, e não que existe uma classe de armazenamento que seja o padrão. Observação: Há duas configurações de className a serem definidas para a classe de armazenamento desejada, uma para os dados e outra para os logs.serviceType
: altere o tipo de serviço para NodePort, se não estiver usando um LoadBalancer.Segurança No Red Hat OpenShift no Azure ou na Plataforma de Contêiner do Red Hat OpenShift, substitua as configurações de segurança pelos valores a seguir no arquivo yaml do controlador de dados.
security: allowDumps: false allowNodeMetricsCollection: false allowPodMetricsCollection: false
Opcional
As seguintes configurações são opcionais.
name
: o nome padrão do controlador de dados é arc, mas você pode alterá-lo, se desejar.displayName
: defina isso com o mesmo valor do atributo de nome na parte superior do arquivo.registry
: o Registro de Contêiner da Microsoft é o padrão. Se você estiver efetuando o pull das imagens do Microsoft Container Registry e enviando-as por push para um registro de contêiner privado, insira o endereço IP ou o nome DNS do registro aqui.dockerRegistry
: o segredo a ser usado para efetuar pull das imagens de um registro de contêiner privado, se necessário.repository
: o repositório padrão no Registro de Contêiner da Microsoft é arcdata. Se você estiver usando um registro de contêiner privado, insira o caminho da pasta/repositório que contém as imagens de contêiner de serviços de dados habilitados para Azure Arc.imageTag
: a marca de versão mais recente atual é padronizada no modelo, mas você pode alterá-la se quiser usar uma versão mais antiga.logsui-certificate-secret
: nome do segredo criado no cluster do Kubernetes para o certificado da interface do usuário de logs.metricsui-certificate-secret
: o nome do segredo criado no cluster do Kubernetes para o certificado da interface do usuário de métricas.
O exemplo a seguir mostra um yaml do controlador de dados concluído.
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
Salve o arquivo editado no computador local e execute o seguinte comando para criar o controlador de dados:
kubectl create --namespace arc -f <path to your data controller file>
#Example
kubectl create --namespace arc -f data-controller.yaml
Monitorando o status de criação
A criação do controlador levará alguns minutos para ser concluída. Você pode monitorar o progresso em outra janela do terminal com os seguintes comandos:
kubectl get datacontroller --namespace arc
kubectl get pods --namespace arc
Você também pode verificar o estado de criação ou os logs de qualquer pod específico executando um comando como exibido abaixo. Isso é especialmente útil para solucionar problemas.
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
Conteúdo relacionado
Você tem várias opções adicionais para criar o controlador de dados do Azure Arc:
Quer apenas experimentar as novidades? Introdução rápida com o artigo Começar a usar o Azure Arc rapidamente no AKs, Amazon EKS ou GKE ou em uma VM do Azure.
- Criar um controlador de dados no modo de conectividade direta com o portal do Azure
- Criar um controlador de dados no modo de conectividade indireta com a CLI
- Criar um controlador de dados no modo de conectividade indireta com o Azure Data Studio
- Criar um controlador de dados no modo de conectividade indireta do portal do Azure por meio de um notebook Jupyter no Azure Data Studio
- Criar um controlador de dados no modo de conectividade indireta com as ferramentas do Kubernetes, como
kubectl
ouoc