Como acessar registros de auditoria

Nesta página, explicamos como usar o registro de auditoria nos clusters do Google Kubernetes Engine (GKE).

Todos os clusters com a tecnologia do Kubernetes têm o Kubernetes Audit Logging, que mantém um registro cronológico das chamadas que foram feitas ao servidor da API Kubernetes. As entradas de registro de auditoria do Kubernetes são úteis para investigar solicitações de API suspeitas, coletar estatísticas ou criar alertas de monitoramento para chamadas de API indesejadas.

Os clusters do GKE integram o Kubernetes Audit Logging com os registros de auditoria do Cloud e o Cloud Logging. É possível ver as entradas de registro de auditoria do Kubernetes no seu projeto do Google Cloud.

Além das entradas gravadas pelo Kubernetes, os registros de auditoria do seu projeto têm entradas gravadas pelo GKE.

O GA do Audit Logging está disponível no GKE 1.11.4 e versões mais recentes.

Antes de começar

Antes de começar, verifique se você realizou as tarefas a seguir:

Defina as configurações padrão da gcloud usando um dos métodos a seguir:

  • Use gcloud init se quiser orientações para definir os padrões.
  • Use gcloud config para definir individualmente a região, a zona e o ID do projeto.

Como usar o gcloud init

Se você receber o erro One of [--zone, --region] must be supplied: Please specify location, conclua esta seção.

  1. Execute gcloud init e siga as instruções:

    gcloud init

    Se você estiver usando SSH em um servidor remoto, utilize a sinalização --console-only para impedir que o comando inicie um navegador:

    gcloud init --console-only
  2. Siga as instruções para autorizar a gcloud a usar sua conta do Google Cloud.
  3. Crie uma nova configuração ou selecione uma atual.
  4. Escolha um projeto do Google Cloud.
  5. Escolha uma zona padrão do Compute Engine para clusters zonais ou uma região para clusters regionais ou de Autopilot.

Como usar o gcloud config

  • Defina o ID do projeto padrão:
    gcloud config set project PROJECT_ID
  • Se você estiver trabalhando com clusters zonais, defina a zona do Compute padrão:
    gcloud config set compute/zone COMPUTE_ZONE
  • Se você estiver trabalhando com clusters de Autopilot ou regionais, defina a região do Compute padrão:
    gcloud config set compute/region COMPUTE_REGION
  • Atualize gcloud para a versão mais recente:
    gcloud components update

É necessário ter um Cluster do GKE no projeto. É possível usar um cluster existente ou criar um novo para os exercícios deste tópico. Se você optar por usar um cluster existente, verifique se ele teve alguma atividade recente. Por exemplo, se você não criou uma implantação recentemente, poderá criar uma agora inserindo este comando:

kubectl run log-exercise --image nginx

Leia sobre o Kubernetes Audit Logging.

Registros de auditoria no seu projeto

Seu projeto do Cloud tem estes registros de auditoria:

  • Registro de atividades do administrador
  • Registro de acesso a dados

O registro de atividades do administrador é ativado por padrão e não tem custo extra.

O registro de acesso a dados está desativado por padrão, e ativá-lo pode resultar em cobrança extra. Para saber mais sobre como ativar o registro de acesso a dados e os custos associados, consulte Como configurar registros do acesso a dados.

O GKE não é compatível com o registro de transparência no acesso.

Vários serviços do Google Cloud gravam entradas nos registros do seu projeto. O serviço do Kubernetes também grava entradas nos registros de auditoria do seu projeto. Para Clusters do GKE, as entradas de registro gravadas por estes serviços são as mais relevantes:

Serviço Nome de exibição Descrição
k8s.io Kubernetes O serviço k8s.io é usado para registros de auditoria do Kubernetes. Esses registros são gerados pelo componente do servidor da API Kubernetes e contêm informações sobre as ações realizadas usando a API Kubernetes. Por exemplo, qualquer alteração feita em um recurso do Kubernetes usando o comando kubectl é registrada pelo serviço k8s.io. Para mais informações, consulte Auditoria na documentação do Kubernetes.
container.googleapis.com Kubernetes Engine O serviço container.googleapis.com é usado para registros de auditoria do plano de controle do GKE. Esses registros são gerados pelos componentes internos do GKE e contêm informações sobre ações realizadas com a API do GKE. Por exemplo, todas as alterações realizadas em uma configuração de cluster do GKE usando um comando gcloud são registradas pelo serviço container.googleapis.com.

Como visualizar o registro de atividade do administrador do seu projeto

Console

  1. No Console do Cloud, acesse a página Registros no menu Geração de registros.

    Acessar a página Registros

  2. Perto do topo da página, localize o menu suspenso para selecionar um tipo de recurso. No menu suspenso, selecione Cluster do Kubernetes.

  3. Opcionalmente, especifique o Local ou escolha Todos os locais. Se você escolher um local, é possível selecionar um cluster específico nele.

  4. O próximo menu à direita é para selecionar um registro. No menu suspenso, selecione atividade e clique em OK.

  5. A tela mostra todos os níveis de registro por padrão. Para especificar um nível de registro, como Aviso, selecione-o no menu suspenso que representa os níveis de registro.

  6. A exibição pode mostrar apenas entradas de registro da última hora. Se não aparecerem entradas de registro da última hora, clique em Carregar registros mais antigos.

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

  8. A caixa de texto exibe um filtro semelhante a este:

    resource.type="k8s_cluster"
    logName="projects/my-project/logs/cloudaudit.googleapis.com%2Factivity"
    
  9. Abra uma das entradas de registro clicando na seta no início da linha. O campo logName da entrada tem o valor projects/project-id/logs/cloudaudit.googleapis.com%2Factivity.

gcloud

Liste as duas primeiras entradas de registro no registro de atividades do administrador do seu projeto:

gcloud logging read \
    'logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"' \
    --limit 2 \
    --freshness 300d

em que 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/cloudaudit.googleapis.com%2Factivity.

insertId: 18yao5jem14og
labels:
  cluster_version: 1.8.8-gke.0
logName: projects/project-id/logs/cloudaudit.googleapis.com%2Factivity
...

Interfaces de filtro básica e avançada

No Console do Cloud, a página Registros tem duas interfaces de filtragem: básica e avançada. Para mais informações sobre as duas interfaces de filtro, consulte Interfaces de filtro do visualizador de registros.

Como exibir serviços que gravam no seu registro de atividades do administrador

Console

  1. No Console do Cloud, acesse a página Registros no menu Geração de registros.

    Acessar a página Registros

  2. Se a página Registros ainda não estiver no modo avançado, mude para o modo avançado. Na caixa de filtro, clique na seta para baixo à direita e selecione Converter para filtro avançado.

  3. Na caixa de filtro, exclua qualquer texto existente e insira este filtro:

    logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
    protoPayload.serviceName="k8s.io"
    

    em que project-id é o ID do projeto.

    Clique em Enviar filtro.

    A exibição lista todas as entradas no registro de atividades do administrador que foram gravadas pelo serviço k8s.io, ou seja, as entradas gravadas pelo painel de controle do Kubernetes.

  4. Procure entradas de registro que foram gravadas por outros serviços k8s.io. Na caixa de filtro, altere serviceName="k8s.io" para serviceName!="k8s.io". Clique em Enviar filtro.

    O display lista entradas de registro no registro de atividades do administrador que não foram gravadas pelo serviço k8s.io.

  5. Abra uma das entradas de registro e expanda o campo protoPayload. Observe o valor de serviceName para ver qual serviço gravou a entrada de registro.

  6. Procure entradas de registro gravadas pelo serviço container.googleapis.com, ou seja, as entradas gravadas pelo painel de controle do Kubernetes Engine: Na caixa de filtro, altere serviceName!="k8s.io" para serviceName="container.googleapis.com". Clique em Enviar filtro.

gcloud

  1. Liste as duas primeiras entradas no registro de atividades do administrador do projeto que foram gravadas pelo serviço k8s.io, ou seja, as entradas gravadas pelo plano de controle do Kubernetes.

    gcloud logging read \
       'logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
           AND protoPayload.serviceName="k8s.io"' \
       --limit 2 \
       --freshness 300d
    

    em que project-id é o ID do projeto.

    Na saída, é possível ver que protoPayload:serviceName tem o valor k8s.io:

    protoPayload:
     ...
     serviceName: k8s.io
    
  2. Procure entradas de registro que foram gravadas por outros serviços k8s.io:

    gcloud logging read \
       'logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
           AND protoPayload.serviceName!="k8s.io"' \
       --limit 2 \
       --freshness 300d
    

    A saída lista no registro de atividades do administrador as entradas de registro que não foram gravadas pelo serviço k8s.io.

    logName: projects/project-id/logs/cloudaudit.googleapis.com%2Factivity
    ...
    protoPayload:
     ...
     serviceName: compute.googleapis.com
    ...
    
  3. Em uma das entradas de registro, observe o valor de protoPayload.serviceName para ver qual serviço gravou a entrada de registro.

  4. Procure entradas de registro gravadas pelo serviço container.googleapis.com. Ou seja, as entradas gravadas pelo plano de controle do GKE:

    gcloud logging read \
       'logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
           AND protoPayload.serviceName="container.googleapis.com"' \
       --limit 2 \
       --freshness 300d
    

    em que project-id é o ID do projeto.

Como filtrar o registro de atividades do administrador por tipo de recurso

Cada entrada de registro no seu registro de atividades do administrador se aplica a um determinado tipo de recurso. Estes são os tipos de recursos mais relevantes para os clusters do Kubernetes:

Tipo de recurso Nome de exibição Descrição
k8s_cluster Cluster do Kubernetes As entradas de registro gravadas pelo servidor da API Kubernetes são aplicáveis ao tipo de recurso k8s_cluster. Essas entradas de registro descrevem as operações nos recursos do Kubernetes no seu cluster, por exemplo, pods, implantações e secrets.
gke_cluster Operações de cluster do GKE As entradas de registro gravadas pelo servidor de API Kubernetes Engine são aplicáveis ao recurso gke_cluster. Essas entradas de registro descrevem operações como criação e exclusão de cluster.

É possível usar esses filtros no Console do Cloud ou usando a ferramenta de linha de comando gcloud.

Console

  1. No Console do Cloud, acesse a página Registros no menu Geração de registros.

    Acessar a página Registros

  2. Se a página Registros ainda não estiver no modo básico, mude para ele. Na caixa de filtro, clique na seta para baixo à direita e selecione Limpar os filtros e retornar ao modo básico.

  3. No menu suspenso, para selecionar um tipo de recurso, selecione Kubernetes Cluster. Este é o nome de exibição do tipo de recurso k8s_cluster.

  4. No menu suspenso para selecionar um registro, selecione atividade e clique em OK.

    A exibição lista todas as entradas de registro no registro de atividades do administrador que se aplicam ao tipo de recurso k8s_cluster.

  5. Abra uma das entradas de registro e expanda o campo resource. Verifique se o campo type tem o valor k8s_cluster.

  6. No menu suspenso, selecione Operações de cluster do GKE. Esse é o nome de exibição do tipo de recurso gke_cluster. No menu suspenso de seleção do registro, selecione a atividade e clique em OK.

    A exibição lista todas as entradas de registro no registro de atividades do administrador que se aplicam ao tipo de recurso gke_cluster.

gcloud

  1. 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/cloudaudit.googleapis.com%2Factivity"
           AND resource.type="k8s_cluster"' \
       --limit 2 \
       --freshness 300d
    

    em que project-id é o ID do projeto.

    Na saída, é possível ver que o campo resource:type tem o valor k8s_cluster:

    resource:
     ...
     type: k8s_cluster
    
  2. Liste as duas primeiras entradas no registro de atividades do administrador do projeto que se aplicam ao tipo de recurso gke_cluster:

    gcloud logging read \
       'logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
           AND resource.type="gke_cluster"' \
       --limit 2 \
       --freshness 300d
    

    Na saída, é possível ver que o campo resource:type tem o valor gke_cluster:

    resource:
     ...
     type: gke_cluster
    

Exemplos de filtros do seu registro de atividades do administrador

Veja alguns exemplos de filtros que você pode testar no Console do Cloud. Em cada um deles, substitua project-id pelo ID do projeto.

Encontre alterações no controle de acesso baseado em papéis, exceto alterações automatizadas do sistema.

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.methodName:"io.k8s.authorization.rbac.v1"
NOT protoPayload.authenticationInfo.principalEmail:"system"
logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.methodName:"io.k8s.authorization.rbac.v1.roles"
NOT protoPayload.authenticationInfo.principalEmail:"system"
logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.methodName:"io.k8s.authorization.rbac.v1.rolebindings"
NOT protoPayload.authenticationInfo.principalEmail:"system"

Use consultas semelhantes para encontrar alterações em clusterroles e clusterrolebindings.

Encontre solicitações de assinatura de certificado.

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.resourceName:"certificates.k8s.io/v1beta1/certificatesigningrequests"

Encontre solicitações da Web não autenticadas.

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.authenticationInfo.principalEmail:"system:anonymous"

Encontre chamadas de identidade de inicialização do kubelet.

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.authenticationInfo.principalEmail:"kubelet"

Encontre solicitações autenticadas de nó.

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.authenticationInfo.principalEmail:"system:node"

Encontre chamadas fora de um intervalo de IP.

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.requestMetadata.callerIp!="127.0.0.1"
protoPayload.requestMetadata.callerIp!="::1"
NOT protoPayload.requestMetadata.callerIp:"ip-prefix"

Localize entradas no registro de atividades do administrador que se aplicam ao tipo de recurso k8s_cluster e descreva a criação de uma implantação.

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.methodName:"deployments.create"

Encontre entradas no registro de atividades do administrador que se aplicam ao tipo de recurso k8s_cluster e que tenham um valor principalEmail de system:anonymous. Essas entradas provavelmente representam tentativas malsucedidas de autenticação.

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.authenticationInfo.principalEmail="system:anonymous"

Localize entradas no registro de atividades do administrador que se aplicam ao tipo de recurso gke_cluster e descrevem a criação do cluster:

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="gke_cluster"
protoPayload.methodName="google.container.v1.ClusterManager.CreateCluster"

Localize as entradas no registro Atividade do administrador que se aplicam ao tipo de recurso gke_cluster e que tenham valor severity de ERROR:

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="gke_cluster"
severity="ERROR"

Localize entradas no registro de atividades do administrador que se aplicam ao tipo de recurso k8s_cluster e descrevem uma solicitação de gravação para um secret:

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.methodName:"io.k8s.core.v1.secrets"
NOT protoPayload.methodName:"get"
NOT protoPayload.methodName:"list"
NOT protoPayload.methodName:"watch"

Encontre entradas no registro de atividades do administrador que se aplicam ao tipo de recurso k8s_cluster e descrevem uma solicitação de pod de um usuário específico:

logName="projects/project-id/logs/cloudaudit.googleapis.com%2Factivity"
resource.type="k8s_cluster"
protoPayload.methodName:"io.k8s.core.v1.pods"
protoPayload.authenticationInfo.principalEmail="dev@example.com"

Para mais informações sobre como construir filtros, consulte Filtros de registro avançados.

Estrutura de uma entrada de registro

Cada entrada de registro é um objeto do tipo LogEntry. Para mais informações, acesse Noções básicas sobre os registros de auditoria.

Como ativar registros de acesso a dados

  1. Chame a política de gerenciamento de identidade e acesso (IAM) do seu projeto:

    gcloud projects get-iam-policy project-id > my-policy.yaml
    

    em que project-id é o ID do projeto.

  2. Abra my-policy.yaml para visualizar sua política do IAM. Essa política provavelmente tem um objeto bindings semelhante a este:

    bindings:
    - members:
      - serviceAccount:xxx.gserviceaccount.com
      - serviceAccount:yyy.gserviceaccount.com
      role: roles/container.clusterAdmin
    - members:
      ...
    
  3. Em my-policy.yaml, crie um objeto auditConfigs ou adicione a seu objeto auditConfigs atual de maneira que ADMIN_READ, DATA_WRITE e DATA_READ estejam listados em auditLogConfigs.

    auditConfigs:
    - auditLogConfigs:
      - logType: ADMIN_READ
      - logType: DATA_WRITE
      - logType: DATA_READ
      service: allServices
    

    Não altere o valor de etag.

  4. Salve o arquivo atualizado como my-policy-2.yaml.

  5. Defina a política do IAM para seu projeto:

    gcloud projects set-iam-policy project-id my-policy-2.yaml
    

    em que project-id é o ID do projeto.

Como visualizar o registro de acesso a dados do projeto

Console

  1. No Console do Cloud, acesse a página Registros no menu Geração de registros.

    Acessar a página Registros

  2. Se a página Registros ainda não estiver no modo básico, mude para ele. Na caixa de filtro, clique na seta para baixo à direita e selecione Limpar os filtros e retornar ao modo básico.

  3. Perto do topo da página, localize o menu suspenso para selecionar um tipo de recurso. No menu suspenso, selecione Cluster do Kubernetes.

  4. No menu para escolha de um registro, selecione data_access e clique em OK .

  5. Na caixa Filtrar por rótulo ou pesquisa de texto, à direita, clique na seta para baixo para abrir o menu suspenso. No menu, escolha Converter para filtro avançado.

  6. A caixa de texto exibe um filtro semelhante a este:

    resource.type="k8s_cluster"
    logName="projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access"
  7. Abra uma das entradas de registro e observe que o campo logName da entrada tem o valor projects/project-id/logs/cloudaudit.googleapis.com%2Fdata_access.

gcloud

Liste as duas primeiras entradas no registro de acesso a dados do seu projeto:

gcloud logging read \
    'logName="projects/project-id/logs/cloudaudit.googleapis.com%2Fdata_access"' \
    --limit 2 \
    --freshness 30d

em que 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/cloudaudit.googleapis.com%2Fdata_access.

insertId:  "x0vy9eej0j54"
labels: {…}
logName:  "projects/project-id/logs/cloudaudit.googleapis.com%2Fdata_access"
...

Como exportar e armazenar entradas de registro

As entradas de registro são mantidas no Cloud Logging por tempo limitado, conhecido como período de armazenamento. Depois disso, as entradas são excluídas.

Para manter suas entradas de registro por mais tempo, exporte-as para um serviço do Google, como Cloud Storage, BigQuery ou Pub/Sub.

Como configurar métricas e alertas

É possível usar o Cloud Monitoring para configurar métricas com base nas entradas de registro. Além disso, é possível usar as métricas com base em registros para configurar gráficos e alertas.

Política de auditoria

A política de auditoria do Kubernetes determina quais entradas de registro são exportadas pelo servidor da API Kubernetes. A política de auditoria do Kubernetes Engine determina quais entradas vão para seu registro de atividades do administrador e quais entradas vão para seu registro de acesso a dados.

Para mais informações sobre políticas de auditoria no Kubernetes Engine, consulte Política de auditoria do Kubernetes Engine.

Próximas etapas