Audit logging

Visão geral

O GKE On-Prem usa os registros de auditoria do Kubernetes (em inglês), que mantêm um registro cronológico das chamadas feitas ao servidor da API Kubernetes do cluster. Os registros de auditoria são úteis para investigar solicitações de API suspeitas e coletar estatísticas.

Antes do Anthos 1.2, o GKE On-Prem gravava registros de auditoria somente no disco. O Anthos 1.2 introduz um recurso Alfa que permite que os registros de auditoria sejam gravados nos registros de auditoria do Cloud em um projeto do Google Cloud. A gravação em registros de auditoria do Cloud tem vários benefícios em relação à gravação em disco ou até mesmo à captura de registros em um sistema de geração de registros no local:

  • Os registros de auditoria de todos os clusters do Anthos podem ser centralizados.
  • As entradas de registro gravadas nos registros de auditoria do Cloud são imutáveis.
  • As entradas de registros de auditoria do Cloud são mantidas por 400 dias.
  • Os registros de auditoria do Cloud estão incluídos no preço do Anthos.

É possível configurar o GKE On-Prem para gravar registros no disco ou em registros de auditoria do Cloud.

Geração de registros de auditoria baseada em disco

Por padrão, os registros de auditoria do GKE On-Prem são gravados em um disco permanente para que as reinicializações e upgrades de VMs não façam com que os registros desapareçam. O GKE On-Prem mantém até 12 GB de entradas de registro de auditoria.

Registros de auditoria do Cloud

Se os registros de auditoria do Cloud estiverem ativados, as entradas de registro de auditoria referentes à atividade do administrador de todos os servidores da API Kubernetes serão enviadas ao Google Cloud, usando o projeto e o local que você especificar ao criar um cluster de usuário. Quando você ativa os registros de auditoria do Cloud, o GKE On-Prem desativa a geração de registros de auditoria baseados em disco.

Para armazenar em buffer e gravar entradas de registro nos registros de auditoria do Cloud, o GKE On-Prem implanta um pod audit-proxy no cluster de administrador. Esse pod também está disponível como um contêiner de arquivo secundário nos clusters do usuário.

Limitações

Os registros de auditoria do Cloud para o GKE On-Prem são um recurso Alfa. Esta versão Alfa tem várias limitações:

  • A geração de registros de acesso a dados não é compatível.

  • Não é possível modificar a política de auditoria do Kubernetes.

  • Os registros de auditoria do Cloud não são resilientes a interrupções de rede. Se não for possível exportar as entradas de registro para o Google Cloud, elas serão descartadas.

  • O suporte para HTTP_PROXY com o Audit Logging não está disponível. A configuração do proxy de auditoria não considera casos em que um proxy HTTP é usado para acessar as APIs do Google e o Container Registry e, assim, a resolução DNS falha.

Como ativar a API Anthos GKE e a API Anthos Audit

Para usar os registros de auditoria do Cloud com o GKE On-Prem, faça o seguinte:

  1. Se você estiver no Anthos 1.4.x ou anterior, ative a API Anthos GKE.

  2. Se você estiver no Anthos 1.5 ou posterior, ative a API Anthos Audit.

  3. Se você não tiver certeza, ou se estiver planejando fazer o upgrade para o Anthos 1.5, ative os dois.

Ativar a API Anthos GKE

Ative a API Anthos Audit.

Como criar uma conta de serviço para Registros de auditoria do Cloud

Você já tem várias contas de serviço criadas para usar com o GKE On-Prem. Para este recurso Alfa, é necessário criar uma conta de serviço e colocá-la na lista de permissões.

  1. Crie sua conta de serviço dos registros de auditoria do Cloud:

    gcloud iam service-accounts create audit-logging-service-account
  2. Crie um arquivo de chave JSON para sua conta de serviço dos registros de auditoria do Cloud:

    gcloud iam service-accounts keys create audit-logging-key.json \
       --iam-account AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL
    

    em que AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL é o endereço de e-mail da sua conta de serviço.

  3. Salve audit-logging-key.json na estação de trabalho do administrador no mesmo local que as outras chaves da conta de serviço.

Como permitir a listagem da sua conta de serviço

Para solicitar que sua conta de serviço do Cloud Audit Logs seja adicionada à lista de permissões, preencha o formulário Alfa dos registros de auditoria do Cloud para GKE On-Prem. Você receberá um e-mail de notificação quando a lista de permissões for concluída. Sua conta de serviço precisa estar na lista de permissões antes de você criar um cluster de administrador ou um cluster de usuário que ative os registros de auditoria do Cloud.

Como criar um cluster de administrador com os Registros de auditoria do Cloud ativados

Você só pode ativar os Registros de auditoria do Cloud para um cluster de administrador quando cria o cluster de administrador. Não é possível modificar um cluster de administrador atual para ativar os Registros de auditoria do Cloud.

  1. Consulte as instruções sobre Como criar um cluster de administração.

  2. Depois de executar gkectl create-config, preencha o arquivo de configuração normalmente, mas também preencha a nova seção admin-cluster.yaml em cloudAuditLogging.

  3. Defina cloudAuditLogging.projectId como o ID do projeto do Google Cloud em que você quer ver os Registros de auditoria relacionados ao cluster de administrador.

  4. Defina cloudAuditLogging.clusterLocation como uma região do Google Cloud em que você quer armazenar registros de auditoria. Para melhorar a latência, escolha uma região próxima ao seu data center local.

  5. Defina cloudAuditLogging.serviceAccountKeyPath como o caminho do arquivo de chave JSON para sua conta de serviço dos registros de auditoria do Cloud.

Exemplo:

cloudAuditLogging:
  projectId: "my-project"
  clusterLocation: "us-west1"
  serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"

Continue a criação do cluster normalmente.

Como criar um cluster de usuário com registros de auditoria do Cloud ativados

  1. Caso você ainda não tenha criado um cluster de administrador, consulte as instruções Como criar um cluster de administrador.

    Se você já tiver um cluster de administrador, crie um novo cluster de usuário seguindo as instruções em Como criar clusters de usuário extras.

  2. Depois de executar gkectl create-config, preencha o arquivo de configuração normalmente, mas também preencha a nova seção user-cluster.yaml em cloudAuditLogging.

  3. Defina cloudAuditLogging.projectId como o ID do projeto do Google Cloud em que você quer visualizar os registros de auditoria que pertencem ao cluster de usuário.

  4. Defina cloudAuditLogging.clusterLocation como uma região do Google Cloud em que você quer armazenar registros de auditoria. É uma boa ideia escolher uma região próxima ao data center no local.

  5. Defina cloudAuditLogging.serviceAccounKeyPath como o caminho do arquivo de chave JSON para sua conta de serviço dos registros de auditoria do Cloud.

Exemplo:

cloudAuditLogging:
  projectId: "my-project"
  clusterLocation: "us-west1"
  serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"

Continue a criação do cluster normalmente.

Como ativar registros de auditoria do Cloud em um cluster de usuário atual

Os registros de auditoria do Cloud podem ser ativados em um cluster de usuário atual usando o comando gkectl update cluster.

Preencha a seção cloudAuditLogging do arquivo user-cluster.yaml. Consulte Como criar um cluster de usuário com os registros de auditoria do Cloud ativados para ver detalhes sobre os campos individuais.

Depois, execute:

gkectl update cluster --config [USER_CLUSTER_YAML] --kubeconfig [ADMIN_CLUSTER_KUBECONFIG]

Como ativar registros de auditoria do Cloud em um cluster de usuário atual

  1. Abra o arquivo user-cluster.yaml que descreve seu cluster de usuário.

  2. Exclua ou comente a seção cloudAuditLogging e salve o arquivo.

  3. Execute este comando para atualizar o cluster de usuário:

gkectl  update cluster --config [USER_CLUSTER_YAML] --kubeconfig [ADMIN_CLUSTER_KUBECONFIG]

Como acessar os registros de auditoria do GKE On-Prem

Geração de registros de auditoria baseada em disco

  1. Veja os servidores da API Kubernetes em execução no cluster de administrador e todos os clusters de usuário associados:

    kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get pods --all-namespaces -l component=kube-apiserver
    

    em que [ADMIN_CLUSTER_KUBECONFIG] é o arquivo kubeconfig do cluster de administrador.

  2. Faça o download dos registros de auditoria do servidor da API:

    kubectl cp -n [NAMESPACE] [APISERVER_POD_NAME]:/var/log/kube-audit/kube-apiserver-audit.log /tmp/kubeaudit.log
    

    Esse comando busca o arquivo de registro mais recente, que pode conter até 1 GB de dados para o cluster de administrador e até 850 GB para clusters de usuário.

    Também é possível encontrar os registros de auditoria do cluster de administração nos nós do plano de controle em /var/log/kube-audit/kube-apiserver-audit.log. Os registros de auditoria do cluster do usuário estão no PersistentVolumeClaim chamado kube-audit-kube-apiserver-0. É possível acessar esses dados dentro dos seus próprios pods usando entradas volume como esta:

    volumes:

    • name: kube-audit hostPath: path: /var/log/kube-audit type: ""
  3. volumes:
    - name: kube-audit
     persistentVolumeClaim:
       claimName: kube-audit-kube-apiserver-0
       readOnly: true
    

    Para programar seu pod no nó apropriado do cluster de administrador (e somente neste nó), você precisará adicionar seções nodeSelector e tolerations à especificação do pod, como esta:

    spec:
     nodeSelector:
       node-role.kubernetes.io/master: ''
     tolerations:
     - key: node-role.kubernetes.io/master
       value: ""
       effect: NoSchedule
    

    Para o cluster de usuários, use este nodeSelector:

    spec:
     nodeSelector:
       kubernetes.googleapis.com/cluster-name: [USER_CLUSTER_NAME]
    

    Registros de auditoria mais antigos são mantidos em arquivos separados. Para visualizar esses arquivos:

    kubectl exec -n [NAMESPACE] [APISERVER_POD_NAME] -- ls /var/log/kube-audit -la
    

    O nome de arquivo de cada registro de auditoria tem um carimbo de data/hora que indica quando o arquivo foi alternado. Cada arquivo inclui registros de auditoria até esse horário e data.

Registros de auditoria do Cloud

Console

  1. No console do Google Cloud, acesse a página Registros no menu Logging.

    Acesse o Explorador de registros

  2. Na caixa Filtrar por rótulo ou pesquisa de texto, logo acima dos menus suspensos discutidos anteriormente, clique na seta para baixo para abrir o menu suspenso. No menu, escolha Converter para filtro avançado.

  3. Preencha a caixa de texto com o filtro a seguir:

    resource.type="k8s_cluster"
    logName="projects/[PROJECT_ID]/logs/externalaudit.googleapis.com%2Factivity"
    protoPayload.serviceName="anthosgke.googleapis.com"
    
  4. Clique em Enviar filtro para exibir todos os registros de auditoria dos clusters do GKE On-Prem que foram configurados para fazer login nesse projeto.

gcloud

Liste as duas primeiras entradas no registro de atividade do administrador do projeto que se aplicam ao tipo de recurso k8s_cluster:

gcloud logging read \
    'logName="projects/[PROJECT_ID]/logs/externalaudit.googleapis.com%2Factivity" \
    AND resource.type="k8s_cluster" \
    AND protoPayload.serviceName="anthosgke.googleapis.com" ' \
    --limit 2 \
    --freshness 300d

[PROJECT_ID] é o ID do projeto.

A saída mostra duas entradas de registro. Observe que, para cada entrada de registro, o campo logName tem o valor projects/[PROJECT_ID]/logs/externalaudit.googleapis.com%2Factivity, e protoPayload.serviceName é igual a anthosgke.googleapis.com.

Política de auditoria

O comportamento dos Registros de auditoria do Cloud é determinado por uma política de registro de auditoria do Kubernetes configurada estaticamente. No momento, não é possível alterar essa política, mas ela estará disponível em uma versão futura.