OpenShift - Segurança
A segurança OpenShift é principalmente uma combinação de dois componentes que lidam principalmente com as restrições de segurança.
- Restrições de contexto de segurança (SCC)
- Conta de serviço
Restrições de contexto de segurança (SCC)
É basicamente usado para restrição de pod, o que significa que define as limitações de um pod, como em quais ações ele pode executar e quais todas as coisas que ele pode acessar no cluster.
O OpenShift fornece um conjunto de SCC predefinido que pode ser usado, modificado e estendido pelo administrador.
$ oc get scc
NAME PRIV CAPS HOSTDIR SELINUX RUNASUSER FSGROUP SUPGROUP PRIORITY
anyuid false [] false MustRunAs RunAsAny RunAsAny RunAsAny 10
hostaccess false [] true MustRunAs MustRunAsRange RunAsAny RunAsAny <none>
hostmount-anyuid false [] true MustRunAs RunAsAny RunAsAny RunAsAny <none>
nonroot false [] false MustRunAs MustRunAsNonRoot RunAsAny RunAsAny <none>
privileged true [] true RunAsAny RunAsAny RunAsAny RunAsAny <none>
restricted false [] false MustRunAs MustRunAsRange RunAsAny RunAsAny <none>
Se alguém deseja usar qualquer scc predefinido, isso pode ser feito simplesmente adicionando o usuário ou o grupo ao grupo scc.
$ oadm policy add-user-to-scc <scc_name> <user_name>
$ oadm policy add-group-to-scc <scc_name> <group_name>
Conta de serviço
As contas de serviço são basicamente usadas para controlar o acesso à API mestre do OpenShift, que é chamada quando um comando ou solicitação é disparado de qualquer máquina mestre ou de nó.
Sempre que um aplicativo ou processo exigir um recurso que não seja concedido pelo SCC restrito, você terá que criar uma conta de serviço específica e adicionar a conta ao respectivo SCC. No entanto, se um SCC não atender aos seus requisitos, é melhor criar um novo SCC específico para os seus requisitos, em vez de usar aquele que melhor se ajusta. No final, defina-o para a configuração de implantação.
$ oc create serviceaccount Cadmin
$ oc adm policy add-scc-to-user vipin -z Cadmin
Segurança de contêineres
No OpenShift, a segurança de contêineres é baseada no conceito de quão segura é a plataforma de contêiner e onde os contêineres estão sendo executados. Existem várias coisas que aparecem quando falamos sobre segurança de contêineres e o que precisa ser cuidado.
Image Provenance - Um sistema de rotulagem seguro está em vigor que identifica de forma exata e incontestável de onde vieram os recipientes em execução no ambiente de produção.
Security Scanning - Um scanner de imagem verifica automaticamente todas as imagens em busca de vulnerabilidades conhecidas.
Auditing - O ambiente de produção é auditado regularmente para garantir que todos os contêineres sejam baseados em contêineres atualizados e que os hosts e os contêineres estejam configurados com segurança.
Isolation and Least Privilege- Os contêineres são executados com os recursos e privilégios mínimos necessários para funcionar com eficácia. Eles não podem interferir indevidamente com o host ou outros contêineres.
Runtime Threat Detection - Um recurso que detecta ameaças ativas contra aplicativos em contêineres em tempo de execução e responde automaticamente a elas.
Access Controls - Módulos de segurança do Linux, como AppArmor ou SELinux, são usados para impor controles de acesso.
Existem alguns métodos principais pelos quais a segurança do contêiner é arquivada.
- Controle de acesso via oAuth
- Via console da web de autoatendimento
- Por certificados de plataforma
Controle de acesso via OAuth
Neste método, a autenticação para acesso de controle de API é arquivada obtendo um token seguro para autenticação por meio de servidores OAuth, que vem embutido na máquina mestre OpenShift. Como administrador, você tem a capacidade de modificar a configuração do servidor OAuth.
Para obter mais detalhes sobre a configuração do servidor OAuth, consulte o Capítulo 5 deste tutorial.
Via console da web de autoatendimento
Este recurso de segurança do console da web está embutido no console da web OpenShift. Este console garante que todas as equipes que trabalham juntas não tenham acesso a outros ambientes sem autenticação. O mestre multi-telnet no OpenShift possui os seguintes recursos de segurança -
- A camada TCL está habilitada
- Usa certificado x.509 para autenticação
- Protege a configuração do etcd na máquina mestre
Por certificados de plataforma
Nesse método, os certificados para cada host são configurados durante a instalação por meio do Ansible. Como ele usa o protocolo de comunicação HTTPS via API Rest, precisamos de uma conexão segura TCL para diferentes componentes e objetos. Esses são certificados predefinidos, no entanto, pode-se até ter um certificado personalizado instalado no cluster de mestre para acesso. Durante a configuração inicial do mestre, os certificados personalizados podem ser configurados substituindo os certificados existentes usandoopenshift_master_overwrite_named_certificates parâmetro.
Example
openshift_master_named_certificates = [{"certfile": "/path/on/host/to/master.crt",
"keyfile": "/path/on/host/to/master.key",
"cafile": "/path/on/host/to/mastercert.crt"}]
Para obter mais detalhes sobre como gerar certificados personalizados, visite o seguinte link -
https://www.linux.com/learn/creating-self-signed-ssl-certificates-apache-linux
Segurança de rede
No OpenShift, o Software Defined Networking (SDN) é usado para comunicação. O namespace de rede é usado para cada pod no cluster, em que cada pod obtém seu próprio IP e um intervalo de portas para obter o tráfego de rede nele. Por esse método, pode-se isolar pods por causa dos quais não pode se comunicar com pods no outro projeto.
Isolando um Projeto
Isso pode ser feito pelo administrador do cluster usando o seguinte oadm command da CLI.
$ oadm pod-network isolate-projects <project name 1> <project name 2>
Isso significa que os projetos definidos acima não podem se comunicar com outros projetos no cluster.
Segurança de Volume
A segurança de volume significa claramente proteger o PV e o PVC de projetos no cluster OpenShift. Existem principalmente quatro seções para controlar o acesso a volumes no OpenShift.
- Grupos Suplementares
- fsGroup
- runAsUser
- seLinuxOptions
Grupos suplementares - grupos suplementares são grupos regulares do Linux. Quando um processo é executado no sistema, ele é executado com um ID de usuário e um ID de grupo. Esses grupos são usados para controlar o acesso ao armazenamento compartilhado.
Verifique a montagem NFS usando o seguinte comando.
# showmount -e <nfs-server-ip-or-hostname>
Export list for f21-nfs.vm:
/opt/nfs *
Verifique os detalhes do NFS no servidor de montagem usando o seguinte comando.
# cat /etc/exports
/opt/nfs *(rw,sync,no_root_squash)
...
# ls -lZ /opt/nfs -d
drwxrws---. nfsnobody 2325 unconfined_u:object_r:usr_t:s0 /opt/nfs
# id nfsnobody
uid = 65534(nfsnobody) gid = 454265(nfsnobody) groups = 454265(nfsnobody)
O / opt / nfs / export pode ser acessado por UID454265 e o grupo 2325.
apiVersion: v1
kind: Pod
...
spec:
containers:
- name: ...
volumeMounts:
- name: nfs
mountPath: /usr/share/...
securityContext:
supplementalGroups: [2325]
volumes:
- name: nfs
nfs:
server: <nfs_server_ip_or_host>
path: /opt/nfs
fsGroup
fsGroup significa o grupo do sistema de arquivos que é usado para adicionar grupos suplementares de contêineres. O ID do grupo de suplemento é usado para armazenamento compartilhado e fsGroup é usado para armazenamento de bloco.
kind: Pod
spec:
containers:
- name: ...
securityContext:
fsGroup: 2325
runAsUser
runAsUser usa o ID do usuário para comunicação. Isso é usado para definir a imagem do contêiner na definição do pod. Um único usuário de ID pode ser usado em todos os contêineres, se necessário.
Durante a execução do contêiner, o ID definido é correspondido com o ID do proprietário na exportação. Se o ID especificado for definido externamente, ele se tornará global para todos os contêineres do pod. Se for definido com um pod específico, ele se tornará específico para um único contêiner.
spec:
containers:
- name: ...
securityContext:
runAsUser: 454265