Operar serviços de dados habilitados para Azure Arc com privilégios mínimos
Operar serviços de dados habilitados para Arc com privilégios mínimos é uma prática recomendada de segurança. Conceda apenas aos usuários e contas de serviço 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 certos cenários comuns em que a segurança de menor privilégio deve ser aplicada.
Nota
Neste artigo, um nome de namespace de arc
será usado. Se você optar por usar um nome diferente, use o mesmo nome em todo o texto.
Neste artigo, o kubectl
utilitário CLI é usado como exemplo. Qualquer ferramenta ou sistema que use a API do Kubernetes pode ser usado.
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 alto privilégio, como a criação de um namespace Kubernetes ou a criação de uma função de cluster. As etapas a seguir podem ser seguidas para separar a implantação do controlador de dados em várias etapas, cada uma das quais 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 no qual o controlador de dados será criado
Esta etapa criará um novo namespace Kubernetes dedicado no qual o controlador de dados Arc será implantado. É essencial executar essa etapa primeiro, porque as etapas a seguir usarão esse novo namespace como um escopo para as permissões que estão sendo concedidas.
Permissões necessárias para executar esta ação:
- Espaço de nomes
- Criar
- Editar (se necessário para clusters 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 você estiver usando o OpenShift, precisará editar as openshift.io/sa.scc.supplemental-groups
e openshift.io/sa.scc.uid-range
anotações no namespace usando kubectl edit namespace <name of namespace>
. Altere essas anotações existentes para corresponder a esses IDs/intervalos específicos de UID e fsGroup.
openshift.io/sa.scc.supplemental-groups: 1000700001/10000
openshift.io/sa.scc.uid-range: 1000700001/10000
Atribuir permissões à conta de serviço de implantação e usuários/grupos
Esta etapa criará uma conta de serviço e atribuirá funções e funções de cluster à conta de serviço para que a conta de serviço possa ser usada em um trabalho para implantar o controlador de dados Arc com o mínimo de privilégios necessários.
Permissões necessárias para executar esta ação:
- Conta de serviço
- Criar
- Funções
- Criar
- Vinculação de funções
- Criar
- Função de cluster
- Criar
- Vinculação de função de cluster
- Criar
- Todas as permissões que estão sendo concedidas à conta de serviço (consulte 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 seguinte comando para criar a conta de serviço do deployer com o arquivo editado.
kubectl apply --namespace arc -f arcdata-deployer.yaml
Conceder permissões aos usuários para criar o trabalho de bootstrapper e o controlador de dados
Permissões necessárias para executar esta ação:
- Funções
- Criar
- Vinculação de funções
- Criar
Salve uma cópia de arcdata-installer.yaml e substitua o espaço reservado {{INSTALLER_USERNAME}}
no arquivo pelo nome do usuário ao qual conceder as permissões, por exemplo: john@contoso.com
. Adicione assuntos adicionais de vinculação de função, como outros usuários ou grupos, conforme necessário. Execute o seguinte comando para criar as permissões do instalador com o arquivo editado.
kubectl apply --namespace arc -f arcdata-installer.yaml
Implantar o trabalho de bootstrapper
Permissões necessárias para executar esta ação:
- Usuário atribuído à função arcdata-installer-role na etapa anterior
Execute o seguinte comando para criar o trabalho de bootstrapper que executará 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 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.
Crie as métricas e logs de painéis, nomes de usuário e senhas
Na parte superior do arquivo, você pode especificar um nome de usuário e senha que são usados para autenticar nos painéis de métricas e logs como administrador. Escolha uma senha segura e compartilhe-a apenas com aqueles que precisam ter esses privilégios.
Um segredo do Kubernetes é armazenado como uma string 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 os logs e painéis de métricas. Siga as instruções em Especificar certificados SSL/TLS durante a implantação das ferramentas nativas do Kubernetes.
Editar a configuração do controlador de dados
Edite a configuração do controlador de dados conforme necessário:
NECESSÁRIO
location
: altere este para ser o local do Azure onde os metadados sobre o controlador de dados serão armazenados. Reveja a lista de regiões disponíveis.logsui-certificate-secret
: O 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: rever e, possivelmente, alterar os padrões
Analise esses valores e atualize para sua implantação:
storage..className
: a classe de armazenamento a ser usada para os dados e arquivos de log do controlador de dados. Se você não tiver certeza das classes de armazenamento disponíveis em seu cluster Kubernetes, poderá executar o seguinte comando:kubectl get storageclass
. O padrão é default, que pressupõe que há uma classe de armazenamento que existe e é nomeada padrão, não que há uma classe de armazenamento que é o padrão. Nota: Há duas configurações className a serem definidas para a classe de armazenamento desejada - uma para dados e outra para logs.serviceType
: Altere o tipo de serviço para NodePort se você não estiver usando um LoadBalancer.Segurança Para o Azure Red Hat OpenShift ou Red Hat OpenShift Container Platform, substitua as configurações security: pelos seguintes valores no arquivo yaml do controlador de dados.
security: allowDumps: false allowNodeMetricsCollection: false allowPodMetricsCollection: false
Opcional
As configurações a seguir 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 que o atributo name na parte superior do arquivo.registry
: O Microsoft Container Registry é o padrão. Se você estiver extraindo as imagens do Microsoft Container Registry e enviando-as para um registro de contêiner privado, digite o endereço IP ou o nome DNS do seu registro aqui.dockerRegistry
: O segredo a ser usado para extrair as imagens de um registro de contêiner privado, se necessário.repository
: O repositório padrão no Microsoft Container Registry é 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 tag da versão mais recente atual é padrão no modelo, mas você pode alterá-la se quiser usar uma versão mais antiga.logsui-certificate-secret
: O 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 de 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.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
Salve o arquivo editado em seu 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 status de criação ou logs de qualquer pod específico executando um comando como 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údos relacionados
Você tem várias opções adicionais para criar o controlador de dados do Azure Arc:
Só quer experimentar as coisas? Comece rapidamente com o Azure Arc Jumpstart 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 a partir do portal do Azure através de um bloco de notas Jupyter no Azure Data Studio
- Crie um controlador de dados no modo de conectividade indireta com ferramentas do Kubernetes, como
kubectl
ouoc