Post

Kubernetes 101: Service Accounts

Fala galera! Seis tão baum?

No Kubernetes, as Service Accounts (Contas de Serviço) são usadas para fornecer uma identidade aos processos que rodam dentro dos Pods. Ao contrário das contas de usuário, que são para pessoas, as Service Accounts são projetadas para aplicações e serviços automatizados.

Cada Pod no Kubernetes automaticamente recebe uma Service Account, a menos que uma específica seja atribuída. Isso permite que os Pods interajam com a API do Kubernetes de forma controlada.

O que é uma Service Account?

Uma Service Account é um recurso do Kubernetes que representa uma identidade atribuída a um ou mais Pods. Ela permite que aplicações rodando dentro dos Pods realizem ações autenticadas, como listar pods, criar configmaps, ou acessar outros recursos da API.

Por padrão, cada namespace tem uma Service Account chamada default, automaticamente vinculada a novos Pods.

Para listar as Service Accounts de um namespace:

1
kubectl get serviceaccounts -n default

Saída esperada:

1
2
NAME      SECRETS   AGE
default   1         10d

Criando uma Service Account

Podemos criar uma Service Account personalizada via YAML:

1
2
3
4
5
apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-service-account
  namespace: default

Ou de forma imperativa:

1
kubectl create serviceaccount my-service-account --namespace=default

Verifique a criação:

1
kubectl get serviceaccounts -n default

Associando Service Accounts a Pods

Para atribuir uma Service Account específica a um Pod, usamos a chave serviceAccountName na definição do Pod:

1
2
3
4
5
6
7
8
9
10
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-service-account
  namespace: default
spec:
  serviceAccountName: my-service-account
  containers:
  - name: nginx
    image: nginx

Após aplicar o YAML:

1
kubectl apply -f pod-with-service-account.yaml

Verifique a Service Account associada ao Pod:

1
kubectl get pod pod-with-service-account -n default -o jsonpath='{.spec.serviceAccountName}'

Resultado esperado:

1
my-service-account

Vinculando permissões: Roles e RoleBindings

Uma Service Account, sozinha, não tem permissões suficientes para acessar a maioria dos recursos da API. Para conceder acesso, vinculamos a Service Account a uma Role ou ClusterRole usando um RoleBinding ou ClusterRoleBinding.

Exemplo: conceder permissão para listar pods no namespace default:

Role:

1
2
3
4
5
6
7
8
9
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list"]

RoleBinding:

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods-binding
  namespace: default
subjects:
- kind: ServiceAccount
  name: my-service-account
  namespace: default
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

Aplicando ambos:

1
2
kubectl apply -f role.yaml
kubectl apply -f rolebinding.yaml

Teste se a Service Account pode listar pods:

1
kubectl auth can-i list pods --as=system:serviceaccount:default:my-service-account

Resultado esperado:

1
yes

Se precisar de um lembrete sobre Roles e RoleBindings, confira nosso artigo anterior: Kubernetes 101: Role-Based Access Control (RBAC)

Testando com um Pod

Vamos testar a permissão em um Pod que usa essa Service Account:

1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: Pod
metadata:
  name: pod-test-sa
  namespace: default
spec:
  serviceAccountName: my-service-account
  containers:
  - name: busybox
    image: busybox
    command: ["/bin/sh", "-c", "kubectl get pods"]

Aplicar o Pod:

1
kubectl apply -f pod-test-sa.yaml

Verificar os logs para garantir que a lista de Pods foi exibida:

1
kubectl logs pod-test-sa

Se tudo foi configurado corretamente, você verá a lista de Pods!

Conclusão

As Service Accounts são fundamentais para garantir que suas aplicações interajam de maneira segura com a API do Kubernetes. Ao combinar Service Accounts com o RBAC (Roles e RoleBindings), você mantém um controle rigoroso sobre o que cada aplicação pode ou não fazer.

Não se esqueça de testar as permissões e revisar suas configurações de segurança regularmente!

Você pode acessar a documentação oficial aqui: Service Accounts

É isso, galera! Se você gostou do artigo, comenta ou mande pra galera que também quer aprender Kubernetes!

Se você tiver alguma dúvida ou comentário, sinta-se à vontade para compartilhá-los conosco na seção de comentários abaixo!

Forte Abraço!

Este post está licenciado sob CC BY 4.0 e pelo autor.