Como usar contas de serviço do Kubernetes

Nesta página, descrevemos as contas de serviço do Kubernetes e como e quando usá-las no Google Kubernetes Engine (GKE).

Visão geral

As contas de serviço do Kubernetes são recursos do Kubernetes, criados e gerenciados com o uso da API Kubernetes, para serem usados por entidades criadas pelo Kubernetes em clusters, como os pods, para autenticar para o servidor da API Kubernetes ou para serviços externos.

As contas de serviço do Kubernetes são diferentes das contas de serviço do gerenciamento de identidade e acesso (IAM, na sigla em inglês).

Quando usar contas de serviço do Kubernetes

As contas de serviço do Kubernetes permitem dar uma identidade aos pods, que podem ser usados para:

  • Autenticar pods no servidor da API Kubernetes, permitindo que os pods leiam e manipulem objetos da API Kubernetes (por exemplo, um pipeline de CI/CD que implanta aplicativos no cluster).
  • Autentique pods nos recursos do Google Cloud por Identidade da carga de trabalho, permitindo que os pods atuem como uma conta de serviço do Google. Isso permite fornecer identidade e autorização refinadas a pods quando eles precisam acessar as APIs do Google Cloud.

Como criar uma conta de serviço do Kubernetes

Para criar uma conta de serviço do Kubernetes, execute as seguintes tarefas:

  1. Configure kubectl para se comunicar com o cluster:

    gcloud container cluster get-credentials CLUSTER_NAME
    

    Substitua CLUSTER_NAME pelo nome do cluster.

  2. Para criar um namespace:

    kubectl create namespace NAMESPACE_NAME
    

    Substitua NAMESPACE_NAME pelo nome do novo namespace.

  3. Crie a conta de serviço do Kubernetes para o namespace:

    kubectl create serviceaccount KSA_NAME --namespace NAMESPACE_NAME
    

    Substitua:

    • KSA_NAME: o nome da nova conta de serviço do Kubernetes.
    • NAMESPACE_NAME: o nome do namespace.

Como atribuir uma conta de serviço do Kubernetes a um pod

Ao usar contas de serviço do Kubernetes, é possível escolher entre dois tipos de credenciais diferentes:

  • Credenciais padrão da conta de serviço: ativa uma credencial estática de longa duração para a conta de serviço no pod.

    apiVersion: v1
    kind: Pod
    metadata:
      name: POD_NAME
      namespace: NAMESPACE_NAME
    spec:
      serviceAccountName: KSA_NAME
    
  • Projeção de volume de token da conta de serviço: ativa um token de conta de serviço do Kubernetes com curta duração e de rotação automática no pod. Esse token é um token do OpenID Connect e pode ser usado para autenticação na API Kubernetes e em outros serviços externos.

    apiVersion: v1
    kind: Pod
    metadata:
      name: POD_NAME
      namespace: NAMESPACE_NAME
    spec:
      containers:
      - image: CONTAINER_NAME
        name: CONTAINER_NAME
        volumeMounts:
        - mountPath: /var/run/secrets/tokens
          name: KSA_NAME_TOKEN
      serviceAccountName: KSA_NAME
      volumes:
      - name: KSA_NAME_TOKEN
        projected:
          sources:
          - serviceAccountToken:
              path: KSA_NAME_TOKEN
              expirationSeconds: 86400
              audience: some-oidc-audience
    

Práticas recomendadas para gerenciar contas de serviço

  • Separe as contas de serviço por namespace de acordo com os limites administrativos do cluster. Isso permite que você restrinja quem pode gerenciar contas de serviço específicas no seu cluster, o que talvez seja útil à medida que sua organização cresce.
  • Use um namespace por responsabilidade da carga de trabalho. No entanto, se você tiver várias cargas de trabalho em um único namespace que exijam diferentes responsabilidades, use contas de serviço distintas para essas responsabilidades da carga de trabalho; não use a conta de serviço padrão. Se nenhuma conta de serviço for especificada em um pod, o pod será executado como a conta de serviço padrão no namespace. Ao criar uma conta de serviço do Kubernetes para cada carga de trabalho, é possível aplicar o princípio de privilégio mínimo.
  • Use a projeção de volume do token da conta de serviço, porque isso garante que as credenciais da conta de serviço sejam de curta duração, reduzindo o impacto de credenciais vazadas.

Como fazer a rotação das credenciais da conta de serviço do Kubernetes

Se uma credencial de conta de serviço do Kubernetes estiver comprometida e você quiser revogar as credenciais comprometidas, siga uma destas duas abordagens:

  • Crie uma nova conta de serviço do Kubernetes, migre o pod e todas as autorizações para a nova conta de serviço e, em seguida, revogue o acesso à conta de serviço antiga do Kubernetes.
  • Execute uma rotação de credenciais, que revogará todas as credenciais de contas de serviço do Kubernetes no seu cluster. A rotação também altera o certificado de CA e o endereço IP do seu cluster.

A seguir