---
title: Criar API Token
slug: aiops/criar-api-token
docTags: 
createdAt: 2024-09-03T17:11:45.993Z
---

## Introdução

Esta documentação descreve o processo para criar um token de API não expirável e persistente para uma ServiceAccount no Kubernetes, utilizando um Secret do tipo kubernetes.io/service-account-token. Esse método é útil quando o mecanismo de solicitação de token não é adequado, fornecendo tokens de longa duração.

:::hint{type="warning"}
Crie tokens de API de longa duração apenas se o mecanismo de solicitação de token não for adequado. O mecanismo de solicitação de token fornece tokens com tempo limitado; devido à sua expiração, representam um risco menor à segurança da informação.
:::

## Passos para Criar um Token de API Persistente

### 1. Criação de um Secret

Para criar um token de API não expirável para uma ServiceAccount, crie um Secret do tipo kubernetes.io/service-account-token com uma anotação referenciando a ServiceAccount. O plano de controle gerará um token de longa duração e atualizará o Secret com os dados do token gerado.

### 2. Manifesto de Exemplo

*Altere os campos&#x20;****my-serviceaccount****&#x20;e&#x20;****my-namespace&#x20;****para os valores de sua preferência.*

**Service Account:**

:::CodeblockTabs
yaml

```yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: discovery
  namespace: default
```
:::

**Secret:**

:::CodeblockTabs
yaml

```yaml
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
  name: discovery-token
  namespace: default
  annotations:
    kubernetes.io/service-account.name: discovery
```
:::

### 3. Crie um ClusterRole e um ClusterRoleBinding com permissões de READ para o Cluster:

**ClusterRole**:

Regra para somente ler no cluster os pods, services e deployments.

:::CodeblockTabs
yaml

```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: read-cluster-discovery
rules:
  - apiGroups: ["", "*"]
    resources: ["*"]
    verbs: ["get", "list"]
```
:::

:::hint{type="info"}
Para realizar um gerenciamento eficaz do inventário em um ambiente Kubernetes, é necessário utilizar ConfigMaps e Secrets para estabelecer correlações entre os serviços. No entanto, o AIOPS não interpreta metadados, incluindo dados sensíveis, o que torna essencial a recuperação de ConfigMaps e Secrets para identificar e relacionar os recursos corretamente no cluster.

Ao extrair estas informações, é importante notar que as chaves armazenadas em Secrets não são expostas, garantindo a segurança dos dados sensíveis.
:::

**ClusterRoleBinding:**

O ClusterRoleBinding dá as regras criadas no ClusterRole para a ServiceAccount (my-serviceaccount) criada anteriomente.

:::CodeblockTabs
yaml

```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: discovery
subjects:
- kind: ServiceAccount
  name: discovery
  namespace: default
  apiGroup: ""
roleRef:
  kind: ClusterRole
  name: read-cluster-discovery
  apiGroup: rbac.authorization.k8s.io
```
:::

E então o secret usado por essa ServiceAccount pode ser usado somente para ler o Cluster, como indicado em "**verbs: \["get"]**"

### 4. Verificação dos Detalhes do Secret

Para ver os detalhes do Secret criado, execute:

:::CodeblockTabs
command

```linux
kubectl -n my-namespace describe secret my-secretname
```
:::

### 5. Exemplo de Saída

A saída será semelhante a:

:::BlockQuote
Namespace:      my-namespace
Labels:         \<none>
Annotations:    kubernetes.io/service-account.name=my-serviceaccount
&#x20;               kubernetes.io/service-account.uid=8a85c4c4-8483-11e9-bc42-526af7764f64

Type:   kubernetes.io/service-account-token

Data
\====
ca.crt:         1362 bytes
namespace:      9 bytes
token:          \<TOKEN\_GERADO>
:::

### 6. Rode o seguinte comando mostrar o Token Gerado:

:::CodeblockTabs
Exemplo

```linux
kubectl get secret my-secretname -n my-namespace -o jsonpath='{.data.token}' | base64 --decode
```
:::

### 7. Rode o seguinte comando para validar o Token:

:::CodeblockTabs
command

```linux
curl -H "Authorization: Bearer <TOKEN>" -k https://<kubernetes-api-server>:16443/api/v1/nodes

```
:::

